Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
다른 AWS 계정의 IAM 사용자가 내 Amazon S3 버킷에 액세스하려고 할 때 발생하는 Access Denied 오류를 해결하려면 어떻게 해야 합니까?
내 Amazon Simple Storage Service(S3) 버킷 정책이 다른 AWS 계정에 대한 전체 액세스 권한을 부여합니다. 하지만 다른 계정의 AWS Identity and Access Management(IAM) 사용자가 내 버킷에 액세스하려고 하면 “Access Denied” 오류가 발생합니다.
간략한 설명
버킷 정책이 이미 다른 계정에 대한 액세스 권한을 부여한 경우 다음과 같은 이유로 교차 계정 사용자에게 Access Denied 오류가 발생할 수 있습니다.
- 사용자의 IAM 정책이 버킷에 대한 액세스 권한을 부여하지 않습니다.
- AWS Key Management Service(AWS KMS)로 객체를 암호화했지만, 사용자는 AWS KMS 키에 액세스할 수 없습니다.
- 버킷 정책 또는 IAM 정책의 Deny 문이 사용자의 액세스를 차단하고 있습니다.
- Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트 정책이 버킷에 대한 액세스를 차단합니다.
- AWS Organizations 서비스 제어 정책(SCP)이 버킷에 대한 액세스를 차단합니다.
- 객체가 버킷을 소유하는 계정에 속하지 않습니다.
- Amazon S3 버킷에 대해 요청자 지불을 활성화했습니다.
- 버킷에 대한 액세스를 차단하는 세션 정책을 통과했습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
사용자의 IAM 정책이 버킷에 대한 액세스 권한을 부여하지 않음
교차 계정 액세스의 경우 사용자 계정의 IAM 정책과 내 계정의 버킷 정책에서 버킷 액세스를 허용해야 합니다.
사용자 계정의 IAM 정책에 버킷 권한을 추가하려면 다음 단계를 완료하십시오.
- IAM 콘솔을 엽니다.
- 탐색 창에서 버킷에 액세스할 수 없는 IAM 사용자 또는 역할을 선택합니다.
- Permissions policies(권한 정책)에서 각 정책을 확장하여 해당 JSON 정책 문서를 확인합니다.
- 버킷 이름이 포함된 JSON 정책 문서에서 정책이 버킷에서 올바른 S3 작업을 허용하는지 확인합니다.
- IAM 사용자 또는 역할이 버킷에 대한 액세스 권한을 부여하지 않는 경우 올바른 권한을 부여하는 정책을 추가하십시오.
다음 예제 IAM 정책은 사용자에게 DOC-EXAMPLE-BUCKET의 GetObject 요청에서 객체를 다운로드할 수 있는 액세스 권한을 부여합니다.{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt", "Action": "s3:GetObject", "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }
참고: 인스턴스 프로파일을 사용하거나 역할을 수임하는 경우 정책에 올바른 권한이 있는지 확인하십시오.
AWS KMS로 객체 암호화
IAM 정책과 버킷 정책이 모두 교차 계정 액세스를 허용하는 경우 AWS KMS에서 버킷의 기본 암호화를 확인하십시오. 또는 AWS KMS 암호화에 대한 객체 속성을 확인하십시오. KMS 키로 객체를 암호화한 경우 사용자에게도 키 사용 권한이 있어야 합니다.
IAM 사용자에게 버킷을 다운로드 및 버킷에 업로드하고 AWS KMS 키를 사용할 권한을 부여하려면 다음 단계를 완료하십시오.
-
KMS 키 정책을 편집하여 다음 문을 추가합니다.
{ "Sid": "ExampleStmt", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Jane" }, "Resource": "*" }참고: 예제 ARN을 위탁자의 ARN으로 바꾸십시오.
-
AWS KMS 키가 IAM 사용자 계정에 속하는 경우 키 정책을 업데이트할 필요가 없습니다. AWS KMS 키가 계정에 속하는 경우 IAM 사용자의 권한을 업데이트하여 다음 IAM 정책 문을 추가해야 합니다.
{ "Sid": "KMSAccess", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Effect": "Allow", "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd" }참고: 예제 KMS 키의 ARN을 KMS 키의 ARN으로 바꾸십시오.
자세한 내용은 교차 계정 사용자가 AWS KMS 고객 관리형 키로 암호화한 내 S3 객체에 액세스하려고 할 때 Access Denied 오류가 발생하는 이유는 무엇입니까?를 참조하십시오.
정책의 Deny 문이 사용자의 액세스 차단
버킷 정책과 사용자의 IAM 정책에 사용자의 버킷 액세스를 명시적으로 거부하는 문이 있는지 확인하십시오.
버킷 정책을 확인하려면 다음 단계를 완료하십시오.
- Amazon S3 콘솔을 엽니다.
- 버킷 목록에서 확인하려는 정책이 있는 버킷을 선택합니다.
- Permissions(권한) 탭을 선택합니다.
- Bucket policy(버킷 정책)에서 **"Effect": "Deny"**가 포함된 문을 찾습니다.
- 버킷 정책을 수정하여 버킷에 대한 사용자의 액세스를 거부하는 "Effect": “Deny” 문을 제거합니다.
사용자의 IAM 정책을 확인하려면 다음 단계를 완료하십시오.
- IAM 콘솔을 엽니다.
- 탐색 창에서 버킷에 액세스할 수 없는 IAM 사용자 또는 역할을 선택합니다.
- Permissions policies(권한 정책)에서 각 정책을 확장하여 JSON 정책 문서를 확인합니다.
- S3 버킷과 관련된 JSON 정책 문서에서 **"Effect": "Deny"**가 포함된 문을 찾습니다.
- 사용자의 IAM 권한 정책을 수정하여 버킷에 대한 사용자의 액세스를 거부하는 "Effect": “Deny” 문을 제거합니다.
VPC 엔드포인트 정책이 버킷에 대한 액세스 차단
사용자가 VPC 엔드포인트를 통해 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용하여 버킷에 액세스하는 경우 VPC 엔드포인트 정책을 확인하십시오. VPC 엔드포인트 정책에 S3 버킷에 액세스할 수 있는 올바른 권한이 포함되어 있는지 확인합니다.
다음 VPC 엔드포인트 정책 예제는 DOC-EXAMPLE-BUCKET에 대한 액세스를 허용합니다.
{ "Id": "Policy1234567890123", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567890123", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Principal": "*" } ] }
경고: "Principal": "*" 요소는 VPC 엔드포인트를 사용하는 모든 사람에게 버킷에 대한 액세스 권한을 부여합니다. 사용 사례에 대한 Principal 값의 범위를 제한해야 합니다.
Organizations SCP가 버킷에 대한 액세스 차단
사용자 계정에서 Organizations를 사용하는 경우 SCP에 버킷에 대한 액세스를 차단하는 Deny 문이 있는지 확인하십시오.
다음 예제 정책은 Amazon S3에 대한 액세스를 명시적으로 거부합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }
객체가 버킷을 소유하는 계정에 속하지 않음
기본적으로 다른 계정이 버킷을 소유하고 있더라도 객체를 업로드한 계정이 객체를 소유합니다. 버킷 권한은 다른 계정이 소유한 객체에 자동으로 적용되지 않습니다.
S3 객체 소유권에서 발생한 Access Denied 오류를 해결하려면 다음 모범 사례를 따르십시오.
- S3 객체 소유권에 대한 버킷 소유자 적용 설정을 적용하여 버킷에 대한 액세스 제어 목록(ACL)을 비활성화합니다.
- 새 객체에 객체 소유권을 적용하기 위해 ACL을 비활성화하고 싶지 않다면 버킷 소유자 기본 설정을 적용합니다. 버킷에 대한 모든 PUT 요청에 대해 bucket-owner-full-control이 지정된 ACL을 요구하도록 버킷 정책을 업데이트해야 합니다. 객체 소유자는 다음 put-object-acl을 실행하여 버킷 소유자에게 액세스 권한을 부여할 수 있습니다.
참고: 객체에 액세스하려면 객체 소유자가 버킷 소유자에게 명시적으로 액세스 권한을 부여해야 합니다. 객체 소유자 계정을 사용하여 이전 명령을 실행합니다.aws s3api put-object-acl --bucket examplebucket --key keyname --acl bucket-owner-full-control
요청자 지불 활성화
버킷에서 요청자 지불을 활성화한 경우 다른 계정의 사용자가 x-amz-request-payer 파라미터를 지정해야 합니다.
사용자는 다음과 같은 조치를 취해야 합니다.
- DELETE, GET, HEAD, POST 및 PUT 요청의 경우 헤더에 x-amz-request-payer : requester를 포함합니다.
- 서명된 URL의 경우 요청에 x-amz-request-payer=requester를 포함합니다.
- AWS CLI 명령의 경우 --request-payer 파라미터를 포함합니다.
aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester
세션 정책이 버킷에 대한 액세스 차단
전달한 세션 정책이 S3 버킷에 대한 액세스를 차단하지 않는지 확인하십시오.
관련 정보
Amazon S3의 403 Access Denied 오류 문제를 해결하려면 어떻게 해야 합니까?
Amazon S3 버킷에 객체를 추가할 권한이 있는 사용자에게 Access Denied 오류가 발생합니다. 이유가 무엇입니까?
관련 콘텐츠
- 질문됨 일 년 전
