다른 AWS 계정에서 IAM 역할을 맡도록 Lambda 함수를 구성하려면 어떻게 해야 하나요?

3분 분량
0

내 AWS Lambda 함수가 다른 AWS 계정의 AWS Identity and Access Management(IAM) 역할을 맡도록 하려고 합니다.

간략한 설명

Lambda 함수가 다른 계정의 IAM 역할을 맡도록 하려면 다음 단계를 완료하세요.

  1. Lambda 함수의 실행 역할을 이 함수가 다른 AWS 계정의 IAM 역할을 맡을 수 있도록 구성합니다.
  2. 교차 계정 IAM 역할의 신뢰 정책을 수정하여 Lambda 함수가 역할을 맡을 수 있도록 하세요.
  3. 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 함수 빌드

AWS 공식
AWS 공식업데이트됨 5달 전