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

최종 업데이트 날짜: 2020년 10월 20일

Amazon Simple Storage Service(Amazon S3) 버킷에 있는 특정 접두사 또는 객체에 액세스할 수 없습니다. 버킷의 나머지 데이터에는 액세스할 수 있습니다. 해결하려면 어떻게 해야 하나요?

간략한 설명

접두사 또는 객체에 대한 액세스를 거부하는 설정에 대해 다음 권한을 확인하십시오.

  • 접두사 또는 객체 소유권
  • 버킷 정책 제한 사항
  • AWS Identity and Access Management(IAM) 사용자 정책의 제한 사항
  • AWS Key Management Service(KMS)로 암호화된 객체에 대한 권한

해결 방법

접두사 또는 객체 소유권

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

1.    다음 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 고객 마스터 키(CMK)로 암호화된 경우 CMK의 정책을 검토합니다. 키 정책에서 IAM 자격 증명이 다음 KMS 작업을 수행할 수 있는지 확인합니다.

"Action": [
    "kms:Decrypt",
    "kms:ReEncrypt",
    "kms:GenerateDataKey"
],

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

중요: IAM 자격 증명과 KMS 키가 서로 다른 계정에 속해있는 경우 IAM 정책과 키 정책이 모두 사용자에게 필요한 KMS 작업에 대한 권한을 부여해야 합니다.