실행 역할로 Lambda 함수 권한 정의하기
실행 역할로 Lambda 함수 권한 정의하기 (Defining Lambda function permissions with an execution role)
Lambda 함수의 실행 역할(execution role)은 함수가 AWS 서비스와 리소스에 접근할 수 있게 하는 AWS Identity and Access Management(IAM) 역할이에요. 예를 들어 Amazon CloudWatch에 로그를 보내고 AWS X-Ray에 트레이스 데이터를 업로드할 권한이 있는 실행 역할을 만들 수 있어요. 이 페이지는 Lambda 함수 실행 역할을 만들고, 보고, 관리하는 방법을 설명해요.
Lambda는 함수를 호출할 때 실행 역할을 자동으로 수임(assume)해요. 함수 코드에서 sts:AssumeRole을 수동으로 호출해 실행 역할을 수임하는 것은 피하세요. 역할이 자신을 수임해야 하는 사용 사례라면 역할의 신뢰 정책에 역할 자체를 신뢰할 수 있는 주체로 포함해야 해요.
Lambda가 실행 역할을 제대로 수임하려면 역할의 신뢰 정책이 Lambda 서비스 주체(lambda.amazonaws.com)를 신뢰하는 서비스로 지정해야 해요.
본문
IAM 콘솔에서 실행 역할 만들기
기본적으로 Lambda는 Lambda 콘솔에서 함수를 만들 때 최소 권한으로 실행 역할을 만들어요. 구체적으로 이 실행 역할은 함수가 Amazon CloudWatch Logs에 이벤트를 기록하는 기본 권한을 주는 AWSLambdaBasicExecutionRole 관리 정책을 포함해요. Permissions 섹션에서 Create default role을 선택할 수 있어요.
Permissions 섹션에서 Use another role을 선택해 기존 역할을 선택할 수도 있어요. Lambda 함수가 이벤트에 응답해 Amazon DynamoDB 데이터베이스 항목을 업데이트하는 것 같은 작업에 추가 권한이 필요하다면 필요한 권한으로 커스텀 실행 역할을 만들 수 있어요. 이렇게 하려면 Permissions 섹션에서 Use another role을 선택하면 권한을 커스터마이즈할 수 있는 드로워가 열려요.
참고
계정에서 역할 관리자(role manager)가 활성화되어 있으면 Lambda 콘솔이 실행 역할을 자동으로 연결해요. 권한을 커스터마이즈하려면 함수를 만든 다음 함수의 권한을 편집해 다른 역할을 선택하거나 연결된 역할을 커스터마이즈하세요.
콘솔에서 실행 역할을 구성하려면
- Role details 섹션에 역할 이름을 입력합니다.
- Policy 섹션에서 Use existing policy를 선택합니다.
- 역할에 연결할 AWS 관리 정책을 선택합니다. 예를 들어 함수가 DynamoDB에 접근해야 한다면
AWSLambdaDynamoDBExecutionRole관리 정책을 선택합니다. - Create role을 선택합니다.
또는 Lambda 콘솔에서 함수를 만들 때 이전에 만든 실행 역할을 함수에 연결할 수 있어요. 기존 함수에 새 실행 역할을 연결하려면 함수 실행 역할 업데이트 단계를 따르세요.
AWS CLI로 역할 만들기·관리하기
AWS Command Line Interface(AWS CLI)로 실행 역할을 만들려면 create-role 명령을 사용해요. 이 명령에서 신뢰 정책을 인라인으로 지정할 수 있어요. 역할의 신뢰 정책은 지정된 주체에게 역할 수임 권한을 부여해요. 다음 예시에서는 Lambda 서비스 주체에게 역할 수임 권한을 부여해요. JSON 문자열에서 따옴표를 이스케이프하는 요구 사항은 셸에 따라 다를 수 있어요.
aws iam create-role \
--role-name lambda-ex \
--assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
역할의 신뢰 정책을 별도의 JSON 파일로도 정의할 수 있어요. 다음 예시에서 trust-policy.json은 현재 디렉토리의 파일이에요.
예제 trust-policy.json
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name lambda-ex \
--assume-role-policy-document file://trust-policy.json
역할에 권한을 추가하려면 attach-policy-to-role 명령을 사용해요. 다음 명령은 lambda-ex 실행 역할에 AWSLambdaBasicExecutionRole 관리 정책을 추가해요.
aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
실행 역할을 만든 후에는 함수에 연결하세요. Lambda 콘솔에서 함수를 만들 때 이전에 만든 실행 역할을 함수에 연결할 수 있어요.
Lambda 실행 역할에 최소 권한 부여
개발 단계에서 Lambda 함수용 IAM 역할을 처음 만들 때 필요한 권한을 넘어 부여할 때가 있어요. 프로덕션 환경에 함수를 게시하기 전에 모범 사례로 정책을 필요한 권한만 포함하도록 조정하세요.
IAM Access Analyzer를 사용해 IAM 실행 역할 정책에 필요한 권한을 식별하는 것이 좋아요. IAM Access Analyzer는 지정한 날짜 범위의 AWS CloudTrail 로그를 검토하고 해당 기간에 함수가 사용한 권한만 담은 정책 템플릿을 생성해요. 템플릿으로 세밀한 권한의 관리 정책을 만들고 IAM 역할에 연결할 수 있어요. 이렇게 하면 특정 사용 사례에서 역할이 AWS 리소스와 상호작용하는 데 필요한 권한만 부여돼요.