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)에서 AWS Lambda 함수
- 다른 계정(계정 B)에서 Amazon S3 버킷
계정 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/*"
]
}
]
}