다른 AWS 계정의 AWS Identity and Access Management(IAM) 역할을 수임하려면 AWS Lambda 함수가 필요합니다. 어떻게 설정해야 하나요?
간략한 설명
Lambda 함수가 다른 AWS 계정의 IAM 역할을 수임하게 하려면 다음을 수행하세요.
- Lambda 함수가 다른 AWS 계정의 IAM 역할을 수임하도록 함수의 실행 역할을 구성합니다.
- Lambda 함수가 역할을 수임하도록 교차 계정 IAM 역할의 신뢰 정책을 수정합니다.
- AWS Security Token Service(AWS STS) AssumeRole API 호출을 Lambda 함수의 코드에 추가합니다.
참고: Lambda 함수는 다음 중 하나를 수행하기 위해 다른 AWS 계정의 IAM 역할을 수임할 수 있습니다.
해결 방법
참고: 다음 예제 절차에서는 서로 다른 두 가지 유형의 AWS 계정을 참조합니다.
- Lambda 함수를 호스트하는 홈 계정(111111111111)
- Lambda 함수가 수임하는 IAM 역할을 포함하는 교차 계정(222222222222)
이 절차에서는 다음을 가정합니다.
- 교차 계정(222222222222)에서 사용할 IAM 역할을 생성했음
Lambda 함수가 다른 AWS 계정의 IAM 역할을 수임하도록 함수의 실행 역할 구성
IAM 자격 증명 권한 추가 및 제거의 지침에 따라 Lambda 함수의 실행 역할(111111111111 계정 내)에 다음 정책 문을 추가합니다.
중요: 222222222222를 함수가 수임하는 교차 계정 역할의 AWS 계정 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 역할의 신뢰 정책을 수정합니다.
역할 신뢰 정책 수정(콘솔)의 지침에 따라 교차 계정 IAM 역할의 신뢰 정책(222222222222 계정 내)에 다음 정책 문을 추가합니다.
중요: 111111111111을 Lambda 함수가 있는 계정의 AWS 계정 ID로 교체합니다. my-lambda-execution-role을 사용자 함수의 실행 역할 이름으로 교체합니다.
{
"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 함수의 코드에 추가
Lambda 함수 옵션 구성 지침에 따라 AWS STS AssumeRole API 호출을 함수의 코드에 추가합니다.
참고: AWS STS AssumeRole API 호출은 서비스 클라이언트를 생성하는 데 사용할 수 있는 자격 증명을 반환합니다. 이 서비스 클라이언트를 사용하면 수임된 역할에 의해 부여된 권한이 Lambda 함수에 부여됩니다. 자세한 내용은 AWS SDK for Python(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에 대한 리소스 기반 정책 사용
AWS Lambda 권한
IAM 역할(AWS API)로 전환하기
IAM 역할 문제 해결
Python으로 Lambda 함수 빌드