내 AWS Lambda 함수가 다른 AWS 계정의 AWS Identity and Access Management(IAM) 역할을 맡도록 하려고 합니다.
간략한 설명
Lambda 함수가 다른 계정의 IAM 역할을 맡도록 하려면 다음 단계를 완료하세요.
- Lambda 함수의 실행 역할을 이 함수가 다른 AWS 계정의 IAM 역할을 맡을 수 있도록 구성합니다.
- 교차 계정 IAM 역할의 신뢰 정책을 수정하여 Lambda 함수가 역할을 맡을 수 있도록 하세요.
- AWS Security Token Service(AWS STS) AssumeRole API 직접 호출을 Lambda 함수 코드에 추가합니다.
참고: Lambda 함수는 다른 계정에서 IAM 역할을 맡아 Amazon Simple Storage Service(S3) 버킷과 같은 리소스에 액세스할 수 있습니다. 또한 Lambda 함수는 인스턴스 시작 및 중지와 같은 작업을 수행하는 역할을 맡을 수도 있습니다.
해결 방법
참고: 다음 예제 절차에서는 두 가지 유형의 계정을 참조합니다.
- Lambda 함수를 호스팅하는 홈 계정(111111111111)
- Lambda 함수가 담당하는 IAM 역할을 포함하는 교차 계정(222222222222)
사전 요구 사항
교차 계정에서 사용할 IAM 역할을 생성합니다.
Lambda 함수의 실행 역할을 이 함수가 다른 계정의 IAM 역할을 맡을 수 있도록 구성
다음의 정책 문을 계정 111111111111에서 Lambda 함수의 IAM 역할에 추가하세요.
참고: 222222222222를 함수가 담당하는 교차 계정 역할의 계정 ID로 바꾸고 role-on-source-account를 위임된 역할의 이름으로 바꾸세요.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::222222222222:role/role-on-source-account"
}
}
Lambda 함수가 역할을 맡을 수 있도록 교차 계정 IAM 역할의 신뢰 정책을 수정
계정 222222222222의 교차 계정 IAM 역할 신뢰 정책에 다음 정책 문을 추가하세요.
참고: 111111111111을 Lambda 함수가 속한 계정의 계정 ID로 바꾸고 my-lambda-execution-role을 함수의 IAM 역할 이름으로 변경하세요.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:role/my-lambda-execution-role"
},
"Action": "sts:AssumeRole"
}
]
}
AWS STS AssumeRole API 직접 호출을 Lambda 함수 코드에 추가
함수 코드에 AWS STS AssumeRole API 직접 호출을 추가하려면 Lambda 함수 옵션 구성의 단계를 완료하세요.
참고: AWS STS AssumeRole API 직접 호출은 서비스 클라이언트를 생성하는 데 사용할 수 있는 자격 증명을 반환합니다. 서비스 클라이언트를 사용하는 경우 Lambda 함수는 위임된 역할이 부여한 권한을 가집니다. 자세한 내용은 AWS Boto 3 웹 사이트의 assume_role을 참조하세요.
AWS STS AssumeRole API 직접 호출을 포함하는 Python 함수 코드 예제
참고: 222222222222를 함수가 담당하는 교차 계정 역할의 AWS 계정 ID로 바꾸고 role-on-source-account을 위임된 역할의 이름으로 바꾸세요.
import boto3
def lambda_handler(event, context):
sts_connection = boto3.client('sts')
acct_b = sts_connection.assume_role(
RoleArn="arn:aws:iam::222222222222:role/role-on-source-account",
RoleSessionName="cross_acct_lambda"
)
ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
SESSION_TOKEN = acct_b['Credentials']['SessionToken']
# create service client using the assumed role credentials, e.g. S3
client = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN,
)
return "Hello from Lambda"
관련 정보
AWS Lambda에 리소스 기반 정책 사용
Lambda 리소스 액세스 권한
IAM 역할로 전환(AWS API)
IAM 역할 문제 해결
Python으로 Lambda 함수 빌드