다른 AWS 계정에서 내 Amazon S3 버킷에 업로드된 웹 사이트 콘텐츠를 로드할 수 없는 이유는 무엇입니까?

4분 분량
0

Amazon Simple Storage Service (Amazon S3) 버킷을 사용하여 웹 사이트의 콘텐츠를 저장합니다. 다른 AWS 계정의 사용자가 웹 사이트의 객체를 내 버킷에 업로드했습니다. 내 버킷 정책은 정확하지만 객체가 웹 사이트에 로드되지 않습니다.

간략한 설명

버킷에 액세스 제어 목록 (ACL) 이 활성화되어 있으면 기본적으로 다른 AWS 계정이 사용자 버킷에 업로드하는 객체를 소유하지 않습니다. 따라서 객체를 읽지 못할 수도 있습니다. 업로드 계정은 버킷 소유자인 사용자에게 객체에 대한 권한을 명시적으로 부여해야 합니다.

또한 버킷 정책은 다른 계정이 소유한 버킷의 객체에는 적용되지 않습니다. 따라서 웹 사이트 사용자에게 읽기 권한을 부여하는 버킷 정책은 다른 계정이 업로드하는 객체에는 자동으로 적용되지 않습니다.

이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.

  • S3 버킷에서 ACL을 비활성화합니다 (모범 사례).
  • 객체 소유자가 객체에 퍼블릭 읽기 액세스 권한을 부여하도록 합니다.
  • 객체 소유자에게 객체에 대한 전체 제어 권한을 부여하도록 합니다.

해결 방법

S3 버킷의 ACL 비활성화 (모범 사례)

Amazon S3 버킷에서 ACL을 비활성화하려면 버킷 소유자가 적용하는 객체 소유권 설정을 선택합니다. 이 설정을 적용하면 ACL이 꺼지고 버킷의 모든 객체를 자동으로 소유하고 전체 제어 권한을 가집니다. 크로스 계정 업로드 객체의 경우에도 이 객체의 소유권은 버킷 소유자에게 있습니다. 또한 버킷 소유자는 해당 객체에 적용되는 읽기 액세스 권한을 부여하는 버킷 정책을 제어합니다.

사전 요구 사항

ACL을 비활성화하기 전에 ACL 비활성화를 위한 사전 요구 사항을 참조하세요.

ACL 끄기

  1. Amazon S3 콘솔을 엽니다.
  2. 버킷을 선택한 다음 S3 객체 소유권 설정을 적용할 버킷의 이름을 선택합니다.
  3. 권한 탭을 선택합니다.
  4. 객체 소유권에서 편집을 선택합니다.
  5. 객체 소유권에서 버킷 소유자 적용을 선택합니다.
  6. 저장을 선택합니다.

사용 사례에서 ACL을 비활성화할 수 없는 경우 다음 대체 방법 중 하나를 사용합니다.

객체 소유자가 객체에 퍼블릭 읽기 액세스 권한을 부여하도록 합니다

**참고:**AWS CLI 명령을 실행할 때 오류가 발생하면 최신 AWS CLI 버전을 사용하고 있는지 확인합니다.

객체를 업로드한 계정은 객체에 퍼블릭 읽기 권한을 부여할 수 있습니다. 이렇게 하려면 다음 AWS Command Line Interface (AWS CLI) 명령을 실행합니다.

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl public read

참고:****--bucket을 웹 사이트 콘텐츠를 저장하는 버킷 이름으로 바꿉니다.

객체 소유자에게 객체에 대한 전체 제어 권한을 부여하도록 합니다

객체 소유자는 자동으로 버킷 소유자에게 객체에 대한 전체 제어 권한을 부여할 수 있습니다. 이렇게 하려면 대상 버킷에서 S3 객체 소유권을 켭니다. 이렇게 하면 오브젝트 소유자가 오브젝트를 업로드할 때 버킷 소유자 제어 권한을 부여하고 bucket-owner-full-control이 지정된 ACL을 포함합니다.

버킷 소유자가 S3 객체 소유권을 ** 버킷 소유자 기본 설정으로 구성한 후 **버킷 소유자는 다른 버킷 정책을 추가할 수 있습니다. 이 추가 버킷 정책에서는 모든 Amazon S3 PUT 작업에 bucket-owner-full-control이 지정된 ACL이 포함되어야 합니다. 이 ACL은 버킷 소유자에게 새 객체에 대한 전체 제어 권한을 부여합니다.

버킷 소유자에게 객체에 대한 전체 제어 권한을 부여하려면 업로드 계정은 객체 업로드 중에 CLI 구문을 사용해야 합니다.

aws s3api put-object --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

이제 버킷 소유자가 객체를 소유하며 객체는 버킷 정책에 설정된 권한을 상속합니다.

S3 개체 소유권을 활성화하기 전에 업로드한 기존 개체의 경우 개체 소유자는 개체에 대한 버킷 소유자 권한을 부여해야 합니다. 그런 다음 버킷 소유자는 객체 자체를 복사해야 합니다.

버킷 소유자에게 객체에 대한 전체 제어 권한을 부여하려면 업로드 계정에서 CLI 구문을 사용해야 합니다.

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

객체의 객체 소유권을 상속하려면 버킷 소유자가 객체 자체를 복사해야 합니다.

aws s3 cp s3://docexamplebucket/example.jpg s3://docexamplebucket/example.jpg --acl bucket-owner-full-control

이제 버킷 소유자가 객체를 소유하며 객체는 버킷 정책에 설정된 권한을 상속합니다.

크로스 계정 업로드를 통해 버킷 소유자에게 객체에 대한 전체 제어 권한을 부여하도록 요구

다른 계정의 모든 업로드 (s3:PutObject) 가 버킷 소유자에게 전체 객체 제어 권한을 부여하도록 하려면 다음 예와 같은 버킷 정책을 사용합니다.

{
  "Id": "Policy1541018284691",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireBucketOwnerFullControlOnPuts",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/iam_user"
        ]
      },
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::docexamplebucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

이 버킷 정책을 사용하면 다른 계정의 사용자 (111122223333) 는 사용자가 객체의 ACL을 지정하는 경우에만 버킷에 업로드할 수 있습니다. 객체의 ACL은 버킷 소유자에게 전체 제어 권한을 부여해야 합니다. 그러면 다른 계정 사용자가 다음 명령과 같이 객체를 업로드해야 합니다.

aws s3 cp path/to/local/file s3://docexamplebucket --acl bucket-owner-full-control

관련 정보

Amazon S3가 요청을 승인하는 방법

액세스 정책 가이드라인

웹 사이트 액세스 권한 설정

사용자 정책으로 버킷에 대한 액세스 제어

AWS 공식
AWS 공식업데이트됨 8달 전
댓글 없음

관련 콘텐츠