Amazon Simple Storage Service(Amazon S3) 버킷에 있는 특정 접두사나 객체에 액세스할 수 없습니다. 버킷의 나머지 데이터에 액세스할 수 있습니다.
간략한 설명
접두사 또는 객체에 대한 액세스를 거부하는 설정에 대해 다음 권한을 확인하세요.
- 접두사 또는 객체의 소유권
- 버킷 정책의 제한
- AWS Identity and Access Management(IAM) 사용자 정책의 제한
- AWS Key Management Service(AWS KMS)로 암호화된 객체에 대한 권한
또한 다음과 같은 액세스 조건을 참고하세요.
- AWS KMS 키로 객체를 암호화한 경우 객체를 암호화한 AWS 계정만 객체를 읽을 수 있습니다.
- 권한 경계 설정 및 세션 정책을 정의한 경우 요청자의 최대 권한이 영향을 받을 수 있습니다. 객체 액세스도 영향을 받을 수 있습니다.
- VPC 엔드포인트 정책 및 서비스 제어 정책(SCP)과 같은 다른 정책에서는 제한을 지정할 수 있습니다. 따라서 이러한 정책을 확인하고 이에 따라 업데이트하세요.
- Amazon S3 객체 소유권을 사용하여 업로드한 객체의 소유권을 제어할 수도 있습니다. 객체 소유권을 BucketOwnerPreferred로 설정하는 경우 bucket-owner-full-control canned ACL이 있는 계정은 버킷 소유자로 전환되는 객체에 쓸 수 있습니다.
해결 방법
접두사 또는 객체의 소유권
기본적으로 AWS 계정이 S3 객체를 업로드하면 계정이 해당 객체를 소유합니다. 이는 다른 계정이 해당 버킷을 소유한 경우에도 마찬가지입니다. 다른 계정이 버킷에 업로드할 수 있는 경우 다음 단계에 따라 액세스할 수 없는 객체 또는 접두사에 대한 권한을 얻으세요.
-
계정에 대한 Amazon S3 정식 ID를 가져오려면 다음 AWS Command Line Interface(AWS CLI) 명령을 실행합니다.
aws s3api list-buckets --query Owner.ID
-
액세스할 수 없는 객체를 소유한 계정의 Amazon S3 정식 ID를 가져옵니다.
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
-
정식 ID가 일치하지 않는 경우 귀하(버킷 소유자)가 객체를 소유하고 있지 않은 것입니다. 객체 소유자는 개별 객체에 대하여 다음과 같은 put-object-acl 명령을 사용하여 사용자에게 전체 제어 권한을 부여할 수 있습니다.
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control
접두사 내의 객체의 경우 객체 소유자는 접두사를 다시 복사하고 작업의 일환으로 귀하에게 객체에 대한 전체 제어 권한을 부여해야 합니다. 예를 들어, 객체 소유자는 --acl bucket-owner-full-control 파라미터를 사용하여 다음 cp 명령을 실행할 수 있습니다.
aws s3 cp s3://DOC-EXAMPLE-BUCKET/abc/ s3://DOC-EXAMPLE-BUCKET/abc/ --acl bucket-owner-full-control --recursive --storage-class STANDARD
팁: 버킷 정책을 사용하면 다른 계정이 버킷에 업로드하는 객체의 소유권을 귀하에게 부여하도록 요구할 수 있습니다.
버킷 정책의 제한
-
Amazon S3 콘솔을 엽니다.
-
버킷 목록에서 확인하려는 버킷 정책이 있는 버킷을 엽니다.
-
권한 탭을 선택합니다.
-
버킷 정책을 선택합니다.
-
**"Effect": "Deny"**가 포함된 문을 찾습니다. 그런 다음 해당 문에 액세스할 수 없는 접두사 또는 개체에 대한 참조가 있는지 검토합니다. 예를 들어, 이 버킷 정책은 DOC-EXAMPLE-BUCKET의 abc/* 접두사에 대한 모든 사용자의 액세스를 거부합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StatementPrefixDeny",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/abc/*"
}
]
}
-
버킷 정책을 수정하여 접두사 또는 개체에 대한 액세스를 잘못 거부하는 **"Effect": "Deny"**문을 편집하거나 제거합니다.
IAM 사용자 정책의 제한
-
IAM 콘솔을 엽니다.
-
콘솔에서 접두사 또는 객체에 액세스하는 데 사용하는 IAM 사용자 또는 역할을 엽니다.
-
IAM 사용자 또는 역할의 권한 탭에서 각 정책을 확장하여 해당 JSON 정책 문서를 확인합니다.
-
JSON 정책 문서에서 Amazon S3 액세스와 관련된 정책을 검색합니다. 그런 다음 해당 정책에서 접두사 또는 객체에 대한 액세스를 차단하는 **"Effect": "Deny"**문을 검색합니다.
예를 들어, 다음 IAM 정책에는 **"Effect": "Deny"**문이 있으며 이것은 DOC-EXAMPLE-BUCKET 내의 접두사 abc/*에 대한 IAM 자격 증명의 액세스를 차단합니다. 정책에는 다음과 같은 **"Effect": "Allow"**문이 있으며 이것은 DOC-EXAMPLE-BUCKET에 대한 액세스를 부여합니다. 전체 버킷에 대한 허용문에도 불구하고 명시적 거부문을 사용하면 IAM 자격 증명이 접두사 abc/*에 액세스할 수 없습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StatementPrefixDeny",
"Effect": "Deny",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/abc/*"
]
},
{
"Sid": "StatementFullPermissionS3",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
-
정책을 수정하여 버킷에 대한 사용자의 액세스를 잘못 거부하는 **"Effect": "Deny"**문을 편집하거나 제거합니다.
AWS KMS로 암호화된 객체에 대한 권한
객체가 AWS KMS 키로 암호된 경우 객체와 키 모두에 대한 권한이 필요합니다. AWS KMS 키에 대한 권한이 없어 객체에 액세스할 수 없는지 확인합니다.
-
Amazon S3 콘솔을 사용하여 액세스할 수 없는 객체 중 하나의 속성을 확인합니다. 객체의 암호화 속성을 검토합니다.
-
객체가 사용자 지정 AWS KMS 키로 암호화된 경우 키 정책을 검토합니다. 정책에서 IAM 자격 증명이 다음 작업을 수행하도록 허용하는지 확인합니다.
"Action": ["kms:Decrypt"]
-
IAM 자격 증명에 이러한 작업에 대한 권한이 누락된 경우 키 정책을 수정하여 누락된 권한을 부여합니다.
**중요:**IAM 자격 증명과 AWS KMS 키가 서로 다른 계정에 속한 경우 적절한 권한이 있는지 확인합니다. IAM 및 키 정책 모두 필요한 AWS KMS 작업에 대한 권한을 부여해야 합니다.
관련 정보
다른 AWS 계정에서 Amazon S3 버킷에 업로드한 객체에 액세스할 수 없는 이유는 무엇인가요?
사용자에게 Amazon S3 버킷의 특정 폴더에 대한 액세스 권한을 부여하려면 어떻게 해야 하나요?
Amazon S3에서 KMS로 암호화된 객체를 다운로드할 때 AWS KMS 키를 지정해야 하나요?