사용자가 다른 AWS 계정에서 내 Amazon Simple Storage Service(Amazon S3) 버킷에 액세스할 때 발생하는 ‘Access Denied’ 오류를 해결하고 싶습니다. Amazon S3 버킷을 AWS Key Management Service(AWS KMS) 고객 관리형 키로 암호화합니다.
간략한 설명
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
다음과 같은 이유로 이 오류가 발생합니다.
오류를 해결하려면 IAM 사용자 또는 역할에 버킷 정책을 볼 수 있는 s3:GetBucketPolicy 권한과 이를 편집할 수 있는 s3:PutBucketPolicy 권한이 있는지 확인합니다. 액세스 권한을 부여하는 IAM 사용자 정책이 없는 경우 정책을 추가하십시오. 필요한 권한이 없는 경우 버킷 액세스 권한이 있는 다른 IAM ID를 사용하고 버킷 정책을 수정하십시오. 버킷 정책에 액세스할 수 있는 사용자가 없는 경우 delete-bucket-policy AWS CLI 명령을 사용하여 정책을 삭제한 후 다시 만드십시오.
퍼블릭 읽기 정책을 추가해야 하는 경우 버킷의 Amazon S3 Block Public Access 기능을 비활성화하십시오. AWS Organizations를 사용하는 경우 Amazon S3 작업을 명시적으로 거부하는 서비스 제어 정책이 없는지 확인하십시오. 또한 작업에 예외를 추가할 수 있는지 확인하십시오.
해결 방법
s3:GetBucketPolicy 및 s3:PutBucketPolicy에 대한 권한 확인
권한을 확인하려면 다음 단계를 완료하십시오.
- IAM 콘솔을 엽니다.
- 버킷 정책에 액세스하는 데 사용되는 ID(예: 사용자 또는 역할)를 선택합니다.
- 버킷 정책에 액세스하는 데 사용하는 IAM ID 이름을 선택합니다.
- IAM ID의 권한 탭에서 각 정책을 확장하여 해당 JSON 정책 문서를 확인합니다.
- JSON 정책 문서에서 Amazon S3 액세스와 관련된 정책을 검색합니다. 그런 다음, 버킷에서 s3:GetBucketPolicy 및 s3:PutBucketPolicy 작업에 대한 권한이 있는지 확인합니다.
다음 예제 IAM 정책은 IAM ID가 DOC-EXAMPLE-BUCKET에서 s3:GetBucketPolicy 및 s3:PutBucketPolicy 작업을 수행할 수 있도록 허용합니다.
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "ModifyBucketPolicy",
"Action": [
"s3:GetBucketPolicy",
"s3:PutBucketPolicy"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
{
"Sid": "AccessS3Console",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
}
]
}
참고: 위 IAM 정책의 AccessS3Console 문은 Amazon S3 콘솔에 액세스 권한을 부여합니다. 이는 버킷 정책 변경에만 국한되지 않습니다.
- JSON 정책 문서에서 **“Effect”: “Deny”**가 포함된 문을 검색합니다. 그런 다음, 이러한 문이 s3:GetBucketPolicy 또는 s3:PutBucketPolicy에 대한 IAM ID 액세스를 거부하지 않는지 확인합니다.
- 정책의 리소스 섹션에 버킷의 Amazon 리소스 이름(ARN)을 포함해야 합니다. 위 예제에서 ARN은 aws:s3:::DOC-EXAMPLE-BUCKET입니다.
참고: s3:GetBucketPolicy 및 s3:PutBucketPolicy는 버킷 수준 작업입니다.
- IAM 정책에 aws:SourceIP와 같은 전역 조건을 적용하여 s3:GetBucketPolicy 및 s3:PutBucketPolicy 작업을 제한했는지 확인합니다. 이러한 조건으로 인해 액세스가 제한되는 경우 해당 조건을 제거하거나 업데이트합니다.
버킷 정책이 존재하지 않는 경우 추가
s3:GetBucketPolicy 또는 s3:PutBucketPolicy 권한을 부여하는 정책을 찾을 수 없는 경우, IAM ID에 해당 권한을 부여하는 정책을 추가하십시오. s3:GetBucketPolicy 또는 s3:PutBucketPolicy에 대한 액세스를 거부하는 정책이 있는 경우 해당 정책을 삭제하십시오. IAM 권한을 수정하는 방법에 대한 설명은 IAM 사용자의 권한 변경을 참조하십시오.
버킷 액세스 권한이 있는 다른 IAM ID를 사용하여 버킷 정책 수정
버킷 정책을 수정하려면 다음 단계를 완료하십시오.
- Amazon S3 콘솔을 엽니다.
- 버킷 목록에서 변경하려는 버킷 정책이 있는 버킷을 엽니다.
- 권한 탭을 선택합니다.
- 버킷 정책을 선택합니다.
- **"Effect": “Deny”**가 포함된 문을 검색합니다.
- 버킷 정책을 편집하여 "Effect": "Deny" 문, 즉 s3:GetBucketPolicy 또는 s3:PutBucketPolicy에 대한 IAM ID 액세스를 거부하는 모든 문을 업데이트합니다. 설명은 Amazon S3 콘솔을 사용하여 버킷 정책 추가의 버킷 정책 만들기 또는 편집 섹션을 참조하십시오.
- 버킷 정책에 IAM 엔터티에 대한 s3:GetBucketPolicy 및 s3:PutBucketPolicy 작업을 제한하는 aws:PrincipalArn과 같은 조건이 포함되어 있는지 확인합니다. 이러한 조건으로 인해 액세스가 제한되는 경우 해당 조건을 제거하거나 업데이트합니다.
버킷 정책이 모든 사용자의 액세스를 거부하는 경우 버킷 정책을 삭제하고 다시 만들기
버킷 정책이 s3:GetBucketPolicy, s3:PutBucketPolicy 또는 모든 Amazon S3 작업(s3:*)에 대한 모든 사용자의 액세스를 거부하는 경우, 버킷 정책을 삭제하십시오. 실수로 버킷이 잠겨 버킷 정책을 삭제할 수 없는 경우 버킷에 대한 액세스 권한을 다시 획득하십시오. 버킷 정책을 삭제한 후 새 정책을 만들 수 있습니다.
Amazon S3 Block Public Access 비활성화
버킷 정책에서 퍼블릭 액세스를 허용하는 경우 버킷에 대한 Amazon S3 Block Public Access를 비활성화하십시오. 자세한 내용은 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단 및 ‘퍼블릭’의 의미를 참조하십시오.
참고: 프라이빗 버킷에 대한 퍼블릭 액세스를 방지하려면 AWS 계정 수준에서 비활성화하기 전에 버킷의 Amazon S3 Block Public Access를 활성화하십시오.
AWS Organizations의 경우 Amazon S3 액세스를 허용하지 않는 서비스 제어 정책 삭제
AWS Organizations를 사용하는 경우 서비스 제어 정책(SCP)을 검토하십시오. s3:PutBucketPolicy 작업 또는 기타 Amazon S3 정책 작업을 명시적으로 거부하는 명령문이 있는지 찾아보십시오. 조직에서 정책을 요구하지 않는 경우 s3:* 작업에 Deny 효과를 적용하는 SCP를 삭제하십시오.
다음 예제 정책은 모든 Amazon S3 작업에 대한 액세스를 거부합니다.
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
]
}