ACL 사용 중지를 위한 사전 조건 - Amazon Simple Storage Service

ACL 사용 중지를 위한 사전 조건

버킷 ACL이 AWS 계정 외부의 액세스 권한을 부여하는 경우 ACL을 사용 중지하기 전에 버킷 ACL 권한을 버킷 정책으로 마이그레이션하고 버킷 ACL을 기본 프라이빗 ACL로 재설정해야 합니다. 이러한 버킷 ACL을 마이그레이션하지 않으면 ACL 비활성화를 위한 버킷 소유자 적용 설정 적용 요청이 실패하고 InvalidBucketAclWithObjectOwnership 오류 코드를 반환합니다. 또한 객체 ACL 권한을 검토하고 버킷 정책으로 마이그레이션하는 것이 좋습니다. 기타 제안된 사전 조건에 대한 자세한 내용은 ACL 사용 중지를 위한 사전 조건 섹션을 참조하십시오.

기존 버킷 및 객체 ACL마다 IAM 정책에 해당 항목이 있습니다. 다음 버킷 정책 예는 버킷 및 객체 ACL에 대한 READWRITE 권한이 IAM 권한에 매핑되는 방식을 보여줍니다. 각 ACL이 IAM 권한으로 변환되는 방법에 대한 자세한 내용은 ACL 권한과 액세스 정책 권한의 매핑 섹션을 참조하십시오.

ACL 권한을 검토하고 버킷 정책으로 마이그레이션하려면 다음 주제를 참조하십시오.

버킷 정책 예제

이 예제 버킷 정책은 서드 파티 AWS 계정에 대한 READWRITE 버킷과 객체 ACL 권한을 버킷 정책으로 마이그레이션하는 방법을 보여줍니다. READ_ACPWRITE_ACP ACL은 ACL 관련 권한(s3:GetBucketAcl, s3:GetObjectAcl, s3:PutBucketAcls3:PutObjectAcl)을 부여하기 때문에 정책과 관련이 적습니다.

예 - 버킷에 대한 READ ACL

버킷의 콘텐츠를 나열할 수 있는 AWS 계정 111122223333 권한을 부여하는 READ ACL이 버킷에 있는 경우, 버킷에 대한 s3:ListBuckets3:ListBucketVersionss3:ListBucketMultipartUploads 권한을 부여하는 버킷 정책을 작성할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to list the objects in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:ListBucket", "s3:ListBucketVersions", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" } ] }
예 - 버킷의 모든 객체에 대한 READ ACL

AWS 계정 111122223333에 액세스 권한을 부여하는 READ ACL이 버킷의 모든 객체에 있는 경우, 버킷의 모든 객체에 대해 이 계정에 s3:GetObject 및 s3:GetObjectVersion 권한을 부여하는 버킷 정책을 작성할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Read permission for every object in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

이 예제 리소스 요소는 특정 객체에 대한 액세스 권한을 부여합니다.

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/OBJECT-KEY"
예 – 버킷에 객체를 쓸 수 있는 권한을 부여하는 WRITE ACL

버킷에 객체를 쓸 수 있는 AWS 계정 111122223333 권한을 부여하는 WRITE ACL이 있는 경우, 버킷에 대한 s3:PutObject 권한을 부여하는 버킷 정책을 작성할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to write objects to a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

S3 콘솔을 사용하여 ACL 권한 검토 및 마이그레이션

버킷의 ACL 권한 검토
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 버킷 이름을 선택합니다.

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

  4. 액세스 제어 목록(ACL)(Access control list (ACL))에서 버킷 ACL 권한을 검토합니다.

객체의 ACL 권한 검토
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. Buckets(버킷) 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

  3. 객체(Objects) 목록에서 사용자의 객체 이름을 선택합니다.

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

  5. 액세스 제어 목록(ACL)(Access control list (ACL))에서 객체 ACL 권한을 검토합니다.

ACL 권한 마이그레이션 및 버킷 ACL 업데이트
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 버킷 이름을 선택합니다.

  3. 권한(Permissions) 탭의 버킷 정책(Bucket policy)에서 편집(Edit)을 선택합니다.

  4. 정책(Policy) 상자에서 버킷 정책을 추가하거나 업데이트합니다.

    예제 버킷 정책은 버킷 정책 예제예제 안내 섹션을 참조하십시오.

  5. Save changes(변경 사항 저장)를 선택합니다.

  6. 버킷 ACL을 업데이트하여 다른 그룹 또는 AWS 계정에 대한 ACL 부여를 제거합니다.

  7. 객체 소유권에 대한 버킷 소유자 적용 설정을 적용합니다.

AWS CLI를 사용하여 ACL 권한 검토 및 마이그레이션

  1. 버킷에 대한 버킷 ACL을 반환하려면 get-bucket-acl AWS CLI 명령을 사용합니다.

    aws s3api get-bucket-acl --bucket DOC-EXAMPLE-BUCKET

    예를 들어, 이 버킷 ACL은 서드 파티 계정에 WRITEREAD 액세스 권한을 부여합니다. 이 ACL에서 서드 파티 계정은 정식 사용자 ID로 식별됩니다. 버킷 소유자 적용 설정을 적용하고 ACL을 비활성화하려면 서드 파티 계정에 대한 이러한 권한을 버킷 정책으로 마이그레이션해야 합니다.

    { "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "WRITE" } ] }

    다른 예제 ACL은 예제 안내 섹션을 참조하십시오.

  2. 버킷 ACL 권한을 버킷 정책으로 마이그레이션합니다.

    이 예제 버킷 정책은 서드 파티 계정에 s3:PutObjects3:ListBucket 권한을 부여합니다. 버킷 정책에서 서드 파티 계정은 AWS 계정 ID(111122223333)로 식별됩니다.

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForCrossAccountAllowUpload", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

    더 많은 예제 버킷 정책은 버킷 정책 예제예제 안내 섹션을 참조하십시오.

  3. 특정 객체에 대한 ACL을 반환하려면 get-object-acl AWS CLI 명령을 사용합니다.

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key EXAMPLE-OBJECT-KEY
  4. 필요한 경우 객체 ACL 권한을 버킷 정책으로 마이그레이션합니다.

    이 예제 리소스 요소는 버킷 정책의 특정 객체에 대한 액세스 권한을 부여합니다.

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/EXAMPLE-OBJECT-KEY"
  5. 버킷의 ACL을 기본 ACL로 재설정합니다.

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  6. 객체 소유권에 대해 버킷 소유자 적용 설정을 적용합니다.

예제 안내

다음 예에서는 특정 사용 사례에 대해 ACL 권한을 버킷 정책으로 마이그레이션하는 방법을 보여줍니다.

서버 액세스 로깅을 위해 S3 로그 전송 그룹에 대한 액세스 권한 부여

버킷 소유자 적용 설정을 적용하여 서버 액세스 로깅 대상 버킷(대상 버킷이라고도 함)에 대해 ACL을 비활성화하려는 경우 S3 로그 전송 그룹에 대한 버킷 ACL 권한을 버킷 정책의 로깅 서비스 보안 주체(logging.s3.amazonaws.com)로 마이그레이션해야 합니다. 로그 전달 권한에 대한 자세한 내용은 로그 전달을 위한 권한 섹션을 참조하십시오.

이 버킷 ACL은 S3 로그 전달 그룹에 WRITEREAD_ACP 액세스 권한을 부여합니다.

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "WRITE" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "READ_ACP" } ] }
버킷 정책의 로깅 서비스 보안 주체로 S3 로그 전달 그룹에 대한 버킷 ACL 권한 마이그레이션
  1. 다음 버킷 정책을 대상 버킷에 추가하여 예시 값을 대체합니다.

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: { { "Version": "2012-10-17", "Statement": [ { "Sid": "S3ServerAccessLogsPolicy", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/EXAMPLE-LOGGING-PREFIX*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME" }, "StringEquals": { "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID" } } } ] }
  2. 대상 버킷의 ACL을 기본 ACL로 재설정합니다.

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  3. 대상 버킷에 객체 소유권에 대해 버킷 소유자 적용 설정을 적용합니다.

버킷의 객체에 대한 퍼블릭 읽기 액세스 권한 부여

객체 ACL이 버킷의 모든 객체에 대해 퍼블릭 읽기 액세스 권한을 부여하는 경우 이러한 ACL 권한을 버킷 정책으로 마이그레이션할 수 있습니다.

이 객체 ACL은 버킷의 객체에 대한 퍼블릭 읽기 액세스 권한을 부여합니다.

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] }
버킷 정책으로 퍼블릭 읽기 ACL 권한 마이그레이션
  1. 버킷의 모든 객체에 대한 퍼블릭 읽기 액세스 권한을 부여하려면 다음 버킷 정책을 추가하여 예제 값을 바꿉니다.

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }

    버킷 정책의 특정 객체에 대한 퍼블릭 액세스 권한을 부여하려면 Resource 요소에 다음 형식을 사용합니다.

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/OBJECT-KEY"

    특정 접두사가 있는 모든 객체에 대한 퍼블릭 액세스 권한을 부여하려면 Resource 요소에 다음 형식을 사용합니다.

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/PREFIX/*"
  2. 객체 소유권에 대해 버킷 소유자 적용 설정을 적용합니다.

Amazon ElastiCache for Redis에 S3 버킷에 대한 액세스 권한 부여

S3 버킷으로 ElastiCache for Redis 백업을 내보내면 ElastiCache 외부에서 백업에 액세스할 수 있습니다. S3 버킷으로 백업을 내보내려면 버킷에 스냅샷을 복사할 수 있는 권한을 ElastiCache에 부여해야 합니다. 버킷 ACL에서 ElastiCache에 권한을 부여한 경우 버킷 소유자 적용 설정을 적용하여 ACL을 비활성화하기 전에 이러한 권한을 버킷 정책으로 마이그레이션해야 합니다. 자세한 내용은 Amazon ElastiCache 사용 설명서ElastiCache에 Amazon S3 버킷에 대한 액세스 권한 부여를 참조하십시오.

다음 예에서는 ElastiCache에 권한을 부여하는 버킷 ACL 권한을 보여줍니다.

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "WRITE" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ_ACP" } ] }
버킷 정책으로 ElastiCache for Redis에 대한 버킷 ACL 권한 마이그레이션
  1. 다음 버킷 정책을 버킷에 추가하여 예제 값을 대체합니다.

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: "Id": "Policy15397346", "Statement": [ { "Sid": "Stmt15399483", "Effect": "Allow", "Principal": { "Service": "Region.elasticache-snapshot.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:GetBucketAcl", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }
  2. 버킷의 ACL을 기본 ACL로 재설정합니다.

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  3. 객체 소유권에 대해 버킷 소유자 적용 설정을 적용합니다.