내 Amazon S3 버킷의 일부 객체에 퍼블릭 읽기 액세스 권한을 부여하려면 어떻게 해야 하나요?

5분 분량
0

Amazon Simple Storage Service(S3) 버킷의 일부 객체를 공개적으로 읽을 수 있게 하고 싶습니다. 하지만 같은 버킷에 있는 다른 객체에 대한 권한은 변경하고 싶지 않습니다.

간략한 설명

다음 방법 중 하나로 퍼블릭 읽기 액세스 권한을 부여합니다.

  • Amazon S3 콘솔을 사용하여 객체의 액세스 제어 목록(ACL) 업데이트
  • AWS Command Line Interface(AWS CLI)를 사용하여 객체의 ACL 업데이트
  • 특정 객체 태그에 대한 퍼블릭 읽기 액세스 권한을 부여하는 버킷 정책 사용
  • 특정 접두사에 대한 퍼블릭 읽기 액세스 권한을 부여하는 버킷 정책 사용

중요: S3 객체 소유권이 객체 소유자 적용으로 설정된 버킷의 경우 버킷 및 객체 ACL을 통한 퍼블릭 액세스 권한을 부여할 수 없습니다. 대부분의 경우, 객체와 버킷에 권한을 부여하는 데 ACL이 필요하지 않습니다. 대신 AWS Identity Access and Management(IAM) 정책과 S3 버킷 정책을 사용하여 객체 및 버킷에 권한을 부여할 수 있습니다.

기본적으로 새 버킷, 액세스 포인트, 객체는 퍼블릭 액세스를 허용하지 않습니다. 계정 내 모든 버킷에 대해 퍼블릭 액세스 차단이 활성화되면 “버킷 및 객체가 공개되지 않음”이라는 메시지가 표시됩니다. 자세한 내용은 계정의 퍼블릭 액세스 차단 설정 구성을 참조하세요.

해결 방법

중요: 시작하기 전에 계정 수준 또는 버킷 수준에서 퍼블릭 액세스 차단 설정이 없는지 확인합니다. 설정을 통해 객체를 공개하는 것을 막지 않아야 합니다. 기본적으로 새로운 S3 버킷에서 퍼블릭 액세스 차단 설정이 True로 설정됩니다.

Amazon S3 콘솔을 사용하여 객체의 ACL 업데이트

여러 객체를 한 번에 공개하려면, 다음 단계를 따르세요.

경고: 여러 객체를 공개한 후에는 여러 객체에 대해 이 작업을 한 번에 취소할 수 있는 옵션이 없습니다. 퍼블릭 액세스를 제거하려면, Amazon S3 콘솔의 각 객체로 이동해야 합니다. 그런 다음, 객체의 권한 탭에서 퍼블릭 액세스를 수정합니다. 부여한 퍼블릭 액세스를 취소하려는 모든 객체에 대해 이 작업을 수행해야 합니다. 공개하기 전에 객체 목록을 주의 깊게 검토합니다.

1.    Amazon S3 콘솔을 엽니다.

2.    버킷 목록에서 업데이트할 객체가 포함된 버킷을 선택합니다.

3.    해당 객체가 들어 있는 폴더로 이동합니다.

4.    객체 목록에서 공개할 객체를 모두 선택합니다.

5.    작업을 선택한 다음, 퍼블릭으로 설정을 선택합니다.

6.    퍼블릭으로 설정 대화 상자에서 객체 목록이 정확한지 확인합니다.

7.    퍼블릭으로 설정을 선택합니다.

개별 객체를 퍼블릭으로 설정하려면, 이전 절차를 반복하거나 다음 단계를 따르세요.

1.    Amazon S3 콘솔에서 업데이트할 객체가 포함된 버킷을 선택합니다.

2.    해당 객체가 들어 있는 폴더로 이동합니다.

3.    객체 이름의 링크를 선택하여 객체를 엽니다.

4.    권한 탭을 선택합니다.

5.    편집을 선택합니다.

6.    모든 사용자 섹션에서 객체 읽기를 선택합니다.

7.    이 변경 사항이 이 객체에 미치는 영향을 이해합니다를 선택합니다.

8.    변경 사항 저장을 선택합니다.

AWS CLI를 사용하여 객체의 ACL 업데이트

Amazon S3에 이미 저장한 객체의 경우, 다음 명령을 실행하여 퍼블릭 읽기 액세스를 위한 ACL을 업데이트할 수 있습니다.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

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

또는 이 명령을 실행하여 AWS 계정 소유자에게 객체에 대한 전체 제어 권한을 부여하고 다른 모든 사람에게는 읽기 권한을 부여할 수 있습니다.

참고: --grant-full-control 값의 경우, 계정의 정식 사용자 ID를 입력합니다.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

특정 객체 태그에 대한 퍼블릭 읽기 액세스 권한을 부여하는 버킷 정책 사용

중요: 시작하기 전에 S3 객체 태그 지정 요금을 검토하세요.

우선 특정 태그가 포함된 모든 객체에 퍼블릭 읽기 액세스를 허용하는 버킷 정책을 추가합니다. 예를 들어, 이 정책은 키-값 페어 public=yes로 태그가 지정된 모든 객체에 대한 퍼블릭 읽기 액세스를 허용합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/public": "yes"
        }
      }
    }
  ]
}

그런 다음, 공개적으로 읽을 수 있게 하려는 객체에 이 태그를 추가합니다. Amazon S3 콘솔을 사용하여 객체 태그를 추가 또는 관리할 수 있습니다. 또는 AWS CLI를 사용할 수 있습니다.

객체에 기존 태그가 있는지 확인하려면, 다음 AWS CLI 명령을 실행합니다.

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

다음 명령을 실행하여 기존 태그가 없는 객체에 태그를 추가합니다.

경고: 이 명령은 기존의 객체 태그를 덮어씁니다.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

기존 태그가 있는 객체에 태그를 추가하려면, 다음 명령을 실행합니다. 객체의 새 태그뿐 아니라 유지하려는 기존 태그도 포함해야 합니다.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

객체 태그를 추가한 후에 다음 명령을 실행하여 모든 객체의 태그를 검토합니다.

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

특정 접두사에 대한 퍼블릭 읽기 액세스 권한을 부여하는 버킷 정책 사용

경고: 다음 버킷 정책은 특정 접두사의 모든 객체에 대한 퍼블릭 읽기 액세스 권한을 부여합니다. 이 버킷 정책을 사용하기 전에 사용 사례가 접두사 내에서 공개적으로 읽을 수 있는 모든 객체를 지원하는지 확인하세요. 이 정책은 접두사에 대한 목록 액세스 권한을 부여하지 않습니다. 사용자는 객체 경로를 알고 있는 경우에만 객체에 액세스할 수 있습니다. 접두사에 없는 개체에 액세스할 때 사용자에게 403 오류가 발생합니다.

특정 객체 접두사에 대한 퍼블릭 읽기 액세스 권한을 부여하려면, 다음과 비슷한 버킷 정책을 추가하세요.

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"]
      }
  ]
}

그런 다음, 퍼블릭 읽기 액세스 권한이 있는 접두사에 객체를 복사합니다. 다음과 비슷한 명령을 실행하여 접두사에 객체를 복사할 수 있습니다.

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

참고: 객체의 접두사에 따라 퍼블릭 읽기 액세스 권한을 부여하기 위해 객체를 복사하지 않아도 됩니다.

관련 정보

ACL 구성

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠