Amazon S3 버킷의 특정 폴더나 파일에 액세스할 수 없는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 7월 9일

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 사전 설정 ACL이 있는 다른 계정에서 새로 작성한 객체는 버킷 소유자로 전환됩니다.

해결 방법

접두사 또는 객체 소유권

기본적으로 S3 객체는 해당 객체를 업로드한 AWS 계정의 소유입니다. 이는 버킷을 다른 계정에서 소유하는 경우에도 마찬가지입니다. 다른 계정이 사용자의 버킷에 업로드할 수 있는 경우, 다음 단계에 따라 액세스할 수 없는 객체 또는 접두사에 대한 권한을 얻으십시오.

1.    다음 AWS Command Line Interface(AWS CLI) 명령을 실행하여 귀하의 계정에 대한 Amazon S3 정식 ID를 가져옵니다.

aws s3api list-buckets --query Owner.ID

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

2.    다음 명령을 실행하여 사용자가 액세스할 수 없는 객체를 소유한 계정의 Amazon S3 정식 ID를 가져옵니다.

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html

3.    정식 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

팁: 버킷 정책을 사용하여 다른 계정이 사용자에게 버킷에 업로드하는 객체의 소유권을 부여하도록 요구할 수 있습니다.

버킷 정책 제한 사항

1.    Amazon S3 콘솔을 엽니다.

2.    버킷 목록에서 검토하려는 정책을 포함하는 버킷을 엽니다.

3.    [권한] 탭을 선택합니다.

4.    [버킷 정책]을 선택합니다.

5.    "Effect": "Deny"를 포함하는 문을 검색합니다. 그런 다음, 액세스할 수 없는 접두사 또는 객체에 대한 참조문을 검토합니다.

예를 들어, 이 버킷 정책은 모든 사람이 DOC-EXAMPLE-BUCKETabc/* 접두사에 액세스하는 것을 거부합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StatementPrefixDeny",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/abc/*"
        }
    ]
}

6.     버킷 정책을 수정하여 접두사나 객체에 대한 액세스를 잘못 거부하는 "Effect": "Deny" 명령문을 편집하거나 제거합니다.

IAM 사용자 정책의 제한 사항

1.    IAM 콘솔을 엽니다.

2.    콘솔에서 접두사 또는 객체에 액세스하는 데 사용 중인 IAM 사용자 또는 역할을 엽니다.

3.    IAM 사용자 또는 역할의 [권한] 탭에서 각 정책을 확장하여 해당 JSON 정책 문서를 봅니다.

4.    JSON 정책 문서에서 Amazon S3 액세스와 관련된 정책을 검색합니다. 그런 다음, 해당 정책에서 접두사 또는 객체에 대한 액세스를 차단하는 "Effect": "Deny" 명령문을 검색합니다.

예를 들어, 다음 IAM 정책에는 DOC-EXAMPLE-BUCKET 내의 접두사 abc/*에 대한 IAM 자격 증명의 액세스를 차단하는 "Effect": "Deny" 명령문이 있습니다. 또한 정책에는 DOC-EXAMPLE-BUCKET에 대한 액세스 권한을 부여하는 "Effect": "Allow" 명령문도 있습니다. 전체 버킷에 대한 허용문에도 불구하고 명시적 거부문은 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/*"
            ]
        }
    ]
}

5.    정책을 수정하여 접두사나 객체에 대한 액세스를 잘못 거부하는 "Effect": "Deny" 명령문을 편집하거나 제거합니다.

AWS KMS로 암호화된 객체에 대한 권한

객체가 AWS KMS 키로 암호화된 경우 객체와 키 모두에 대한 권한이 필요합니다. AWS KMS 키에 대한 권한이 필요하기 때문에 객체에 액세스할 수 없는지 확인하려면 다음 단계를 따르십시오.

1.    Amazon S3 콘솔을 사용하여 액세스할 수 없는 객체 중 하나의 속성을 확인합니다. 객체의 암호화 속성을 검토합니다.

2.    객체가 사용자 지정 AWS KMS 키(KMS 키)로 암호화된 경우 KMS 키 정책을 검토합니다. 키 정책에서 IAM 자격 증명이 다음 KMS 작업을 수행할 수 있는지 확인합니다.

"Action": ["kms:Decrypt"]

3.    IAM 자격 증명에 이러한 작업에 대한 권한이 없는 경우, 누락된 권한을 부여하도록 키 정책을 수정합니다.

중요: IAM 자격 증명 및 KMS 키가 다른 계정에 속해 있는 경우 적절한 권한이 있는지 확인합니다. IAM 및 키 정책 모두 필요한 KMS 작업에 대한 권한을 부여해야 합니다.