다른 AWS 계정에서 역할을 위임하도록 Lambda 함수를 구성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 10월 22일

내 AWS Lambda 함수가 다른 AWS 계정의 역할을 위임하여 특정 태스크를 수행하도록 해야 합니다. 그렇게 구성하려면 어떻게 해야 합니까?

간략한 설명

다음과 같은 이유로 한 계정(“계정 A”)에서 만든 Lambda 함수에서 다른 계정(“계정 B”)의 역할을 수임할 수 있는 권한을 부여할 수 있습니다.

자세한 내용은 AWS Lambda에서 리소스 기반 정책 사용을 참조하십시오.

해결 방법

아직 구성하지 않은 경우 다음 두 가지 AWS Identity and Access Management(IAM) 역할을 구성하십시오.

  • 실행 역할 - 계정 A의 주요 역할이며 Lambda 함수에 이 작업을 수행할 수 있는 권한을 제공합니다.
  • 위임된 역할 - 계정 B의 주요 역할이며 계정 A의 Lambda 함수가 교차 계정 리소스에 액세스할 수 있도록 합니다.

그런 다음, 아래의 지침을 따르십시오.

1.    다음 IAM 정책을 계정 A의 Lambda 함수 실행 역할에 연결하여 계정 B의 역할을 위임하도록 합니다.

참고: 222222222222를 계정 B의 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"
    }
}

2.    계정 B의 위임된 역할의 신뢰 정책을 다음과 같이 수정하십시오.

참고: 111111111111을 계정 A의 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"
        }
    ]
}

3.    Lambda 함수 코드를 업데이트하여 AWS Security Token Service(AWS STS) AssumeRole API 호출을 추가하십시오. 이 호출은 서비스 클라이언트 생성에 사용할 수 있는 자격 증명 세트를 반환합니다. 이 클라이언트를 사용할 때 함수는 위임된 역할에 의해 부여된 권한을 가지며 계정 B에 속한 것처럼 작동합니다. 자세한 내용은 Python용 AWS SDK(Boto 3) 설명서의 assume_role을 참조하십시오.

다음 Python 함수 코드를 사용자의 사용 사례에 대한 예제로 사용할 수 있습니다. 이 코드는 있는 그대로 제공됩니다.

참고: 222222222222를 계정 B의 AWS 계정 ID로 바꾸십시오. role-on-source-account를 위임된 역할의 이름으로 바꾸십시오.

import boto3

def lambda_handler(context, event):

    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"

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?