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

최종 업데이트 날짜: 2019년 5월 28일

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

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

aws s3api list-objects --bucket awsexamplebucket --prefix index.html

3.    정식 ID가 일치하지 않는 경우에는 사용자(버킷 소유자)가 객체를 소유하고 있지 않은 것입니다. 개별 객체의 경우, 객체 소유자는 다음과 같이 이 put-object-acl 명령을 실행하여 완전한 제어권을 부여할 수 있습니다.

aws s3api put-object-acl --bucket bucket-name --key object-name --acl bucket-owner-full-control

접두사 내부의 객체의 경우, 객체 소유자는 접두사를 다시 복사하고 작업의 일부로서 객체를 완전히 제어해야 합니다. 예를 들어, 객체 소유자는 --acl bucket-owner-full-control 파라미터와 함께 이 cp 명령을 실행할 수 있습니다.

aws s3 cp s3://awsexamplebucket/abc/ s3://awsexamplebucket/abc/ --acl bucket-owner-full-control --recursive --storage-class STANDARD

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

버킷 정책 제한 사항

1.    Amazon S3 콘솔을 엽니다.

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

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

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

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

예를 들어, 이 버킷 정책은 모든 사용자가 awsexamplebucketabc/* 접두사에 액세스하는 것을 거부합니다.

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

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

IAM 사용자 정책의 제한 사항

1.    IAM 콘솔을 엽니다.

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

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

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

예를 들어, 다음 IAM 정책에는 awsexamplebucket 내의 접두사 abc/*에 대한 IAM 자격 증명의 액세스를 차단하는 "Effect": "Deny" 명령문이 있습니다. 또한 정책에는 awsexamplebucket에 대한 액세스 권한을 부여하는 "Effect": "Allow" 명령문도 있습니다. 전체 버킷에 대한 허용문에도 불구하고 명시적 거부문은 IAM 자격 증명이 접두사 abc/*에 액세스하지 못하게 합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StatementPrefixDeny",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::awsexamplebucket/abc/*"
            ]
        },
        {
            "Sid": "StatementFullPermissionS3",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::awsexamplebucket",
                "arn:aws:s3:::awsexamplebucket/*"
            ]
        }
    ]
}

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

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

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

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

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

"Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
],

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

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