Lambda 함수를 사용하여 다른 계정의 Amazon S3 버킷에 파일을 업로드할 때 액세스 거부 오류가 발생하는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 11월 2일

AWS Lambda 함수를 사용하여 다른 AWS 계정의 Amazon Simple Storage Service(Amazon S3) 버킷에 파일을 업로드하려고 할 때 액세스 거부 오류가 발생합니다. 해결하려면 어떻게 해야 하나요?

간략한 설명

AWS Lambda 함수와 Amazon S3 버킷 간의 권한이 불완전하거나 올바르지 않으면 액세스 거부 오류가 발생합니다.

한 계정(계정 A)의 Lambda 함수와 다른 계정(계정 B)의 S3 버킷 간에 올바른 권한을 설정하려면 다음 단계를 수행하십시오.

1.    계정 A에서, 함수가 Amazon S3에 객체를 업로드할 수 있도록 허용하는 Lambda 함수에 대해 AWS Identity and Access Management(IAM) 역할(실행 역할)을 생성합니다.

2.    계정 B에서, 버킷 정책을 업데이트하여 Lambda 함수가 객체를 업로드할 수 있도록 합니다.

해결 방법

시작하기 전에 다음을 생성했는지 확인하십시오.

계정 A에서, 함수가 Amazon S3에 객체를 업로드할 수 있도록 허용하는 Lambda 함수에 대해 IAM 역할(실행 역할)을 생성합니다.

1.    Lambda 함수에 대해 IAM 역할을 생성합니다.

2.    이후 단계에서 IAM 역할의 Amazon 리소스 이름(ARN)을 메모해 둡니다. ARN을 얻는 한 가지 방법은 AWS 명령줄 인터페이스(AWS CLI) 명령 get-role을 실행하는 것입니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하십시오.

3.    계정 B의 버킷에 객체 업로드 권한(s3:PutObject)을 부여하는 IAM 역할에 정책을 연결합니다. 예를 들어, 이 정책은 역할에 s3:PutObject 및 s3:PutObjectAcl 모두에 대한 권한을 부여합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
  "s3:PutObject",
  "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::AccountBBucketName/*"
        }
    ]
}

4.    Lambda 함수의 실행 역할을 생성한 IAM 역할로 변경합니다. 함수의 설정을 구성하여 실행 역할을 변경할 수 있습니다.

계정 B에서, 버킷 정책을 업데이트하여 Lambda 함수가 객체를 업로드할 수 있도록 합니다.

버킷 정책을 업데이트하여 Lambda 함수의 IAM 역할(실행 역할)의 ARN을 작업 s3:PutObject에 액세스할 수 있는 보안 주체로 지정합니다. 다음과 비슷한 버킷 정책을 사용할 수 있습니다.

참고: 또한 이 정책은 실행 역할에 s3:PutObjectAcl에 대한 권한을 부여합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountA:role/AccountARole"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::AccountBBucketName/*"
            ]
        }
    ]
}

이 문서가 도움이 되었나요?


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