Amazon S3 버킷에 대한 액세스 권한을 Lambda 실행 역할에 허용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 4월 5일

내 AWS Lambda 함수에서 Amazon Simple Storage Service(Amazon S3) 버킷에 액세스하고 싶습니다. 어떻게 해야 합니까?

간략한 설명

다음 단계를 따르십시오.

1.    S3 버킷에 대한 액세스 권한이 부여된 Lambda 함수에 대한 AWS Identity and Access Management(IAM) 역할을 생성합니다.

2.    IAM 역할의 신뢰 정책을 수정합니다.

3.    IAM 역할을 Lambda 함수의 실행 역할로 설정합니다.

4.    버킷 정책에서 Lambda 함수의 실행 역할에 액세스 권한을 부여하는지 확인합니다.

중요: Lambda 함수에 대해 생성한 IAM 역할이 버킷과 동일한 AWS 계정에 있는 경우 IAM 역할과 버킷 정책 모두에서 Amazon S3 권한을 부여하지 않아도 됩니다. 대신, IAM 역할에서 권한을 부여한 후 버킷 정책이 Lambda 함수 역할에 대한 액세스를 명시적으로 거부하지 않는지 확인할 수 있습니다. 예를 들어, 다음 절차는 IAM 역할에서 Amazon S3 권한을 부여합니다. IAM 역할 및 버킷이 다른 계정에 있는 경우 IAM 역할 및 버킷 정책 모두에서 Amazon S3 권한을 부여해야 합니다.

해결 방법

S3 버킷에 대한 액세스를 부여하는 Lambda 함수에 대한 IAM 역할 생성

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 [역할]을 선택합니다.

3.    [역할 만들기]를 선택합니다.

4.    [AWS 서비스]에서 [Lambda]를 선택합니다.

5.    [다음: 권한]을 선택합니다.

6.    [다음: 태그]를 선택합니다.

7.    [다음: 검토]를 선택합니다.

8.    [역할 이름]에 역할 이름을 입력합니다.

9.    [역할 만들기]를 선택합니다.

10.    IAM 역할 목록에서 방금 생성한 역할을 선택합니다.

12.    [권한] 보기에서 [인라인 정책 추가]를 선택합니다.

13.    [JSON] 보기를 선택합니다.

14.    S3 버킷에 대한 액세스 권한을 부여하는 정책을 입력합니다. 다음과 비슷한 정책을 사용할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
{
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::ExampleBucketName",
                "arn:aws:s3:::ExampleBucketName/*"
            ]
        }
    ]
}

15.    [정책 검토]를 선택합니다.

16.    [이름]에 정책 이름을 입력합니다.

17.    [정책 생성]을 선택합니다.

IAM 역할의 신뢰 정책 수정

1.    IAM 콘솔에서 생성한 IAM 역할을 엽니다.

2.    [신뢰 관계] 보기를 선택합니다.

3.    [신뢰 관계 편집]을 선택합니다.

4.    [정책 문서]에서 AWS 계정 루트 사용자가 역할을 수임하도록 허용하기 위해 정책을 업데이트합니다. IAM 역할 및 버킷이 동일한 계정에 속하는 경우 보안 주체 개체로 루트 계정 사용자의 Amazon 리소스 이름(ARN)을 지정하는 다음 정책을 사용할 수 있습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root",
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

IAM 역할 및 버킷이 다른 계정에 속하는 경우 보안 주체 개체로 두 루트 사용자의 ARN을 지정하는 다음 정책을 사용할 수 있습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": ["arn:aws:iam::123456789012:root",
                "arn:aws:iam::098765432109:root"],
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

IAM 역할을 Lambda 함수의 실행 역할로 설정

1.    Lambda 콘솔을 엽니다.

2.    Lambda 함수를 선택합니다.

3.    [실행 역할] 아래 [기존 역할]에서 생성한 IAM 역할을 선택합니다.

4.    [저장]을 선택합니다.

버킷 정책에서 Lambda 함수의 실행 역할에 액세스 권한을 부여하는지 확인

Lambda 함수의 실행 역할(IAM 역할)이 버킷과 동일한 AWS 계정에 있는 경우 버킷 정책이 Lambda 함수나 실행 역할에 대한 액세스를 명시적으로 거부하지 않는지 확인합니다. 버킷 정책이 액세스를 명시적으로 거부하지 않으면 Lambda 함수는 IAM 역할에서 부여된 권한으로 인해 버킷에 액세스할 수 있습니다.

Lambda 함수의 실행 역할과 버킷이 다른 계정에 속하는 경우 실행 역할에서 요청이 생성된 경우 버킷에 대한 액세스를 허용하는 버킷 정책을 추가해야 합니다. 이 교차 계정 액세스를 위해 IAM 정책 및 버킷 정책 모두에서 Amazon S3에 대한 권한을 실행 역할에 부여해야 합니다.

다음과 비슷한 버킷 정책을 사용할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
            },
            "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::ExampleBucketName",
        "arn:aws:s3:::ExampleBucketName/*”
            ]
        }
    ]
}

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

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?