모든 새 버킷에 대해 ACL 비활성화 및 Object Ownership 적용

모든 새 버킷에 대해 ACL 비활성화 및 Object Ownership 적용

Amazon S3는 객체 수준의 접근 제어가 필요하지 않은 한 일반적으로 ACL을 비활성화할 것을 권장해요. 이 주제는 Object Ownership을 적용하고 모든 새 버킷에 대해 ACL을 비활성화하는 몇 가지 방법을 제공해요.

전체 AWS 계정이나 개별 IAM 정책에 적용되는 정책 요소를 사용해 Bucket owner enforced Object Ownership 설정을 적용하고 ACL 사용을 막을 수 있어요. 아래에서 설명할게요.

계정 또는 조직 수준으로 적용

Bucket owner enforced 설정은 전체 AWS 계정이나 AWS Organization 수준에서 적용할 수 있어요. 이렇게 하면 사용자와 역할이 ACL이 활성화된 버킷을 만드는 것을 막고, 기존 버킷에서 ACL을 다시 활성화하는 것도 막아요.

계정이나 조직 수준으로 Bucket owner enforced 설정을 적용하려면 먼저 버킷 소유권 SCP(service control policy) 또는 RCP(resource control policy)를 내 AWS 계정이나 조직에 적용해야 해요. 그런 다음 버킷 자체에 Object Ownership을 적용하려면 버킷 수준 리소스 정책도 적용해야 해요.

단계는 다음과 같아요.

SCP 또는 RCP를 구성하려면 다음 정책을 사용하세요. 이 정책을 만들거나 적용하는 방법은 AWS Organizations 사용자 가이드의 서비스 제어 정책(SCP) 및 리소스 제어 정책(RCP)을 참고하세요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyObjectOwnershipNonCompliantBuckets",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:CreateBucket",
        "s3:PutBucketOwnershipControls"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "s3:ObjectOwnership": "bucket-owner-enforced"
        }
      }
    }
  ]
}

위 SCP/RCP 가 있을 때 다음 일반적인 사용 사례가 지원돼요.

  • SCP/RCP는 allowlist가 아니므로 단독으로는 아무것도 허용하지 않아요.
  • 권한 부여가 없는 보안 주체에 대해서는 계정에서 버킷 생성 및 소유권 제어가 거부돼요.

SCP/RCP가 적용되면 다음 작업이 방지돼요.

  • 버킷 소유권 제어를 bucket-owner-enforced 외의 값으로 설정하기(거부됨)
  • Object Ownership 설정이 bucket-owner-enforced가 아닌 버킷 만들기(거부됨)
  • Object Ownership 설정을 변경해 ACL 활성화하기(거부됨)

그런 다음 버킷 자체에 Object Ownership을 적용하려면 다음 버킷 수준 리소스 정책도 적용해야 해요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenySetObjectACLs",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutBucketAcl",
      "Resource": "arn:aws:s3:::your-bucket*",
      "Condition": {
        "Bool": {
          "s3:SetAclBucketOwnerEnforcedFailure": "true"
        }
      }
    }
  ]
}

이제 버킷 수준 리소스 정책을 적용했으므로 다음 작업이 거부돼요.

  • 버킷 수준 ACL 설정(s3:PutBucketAcl)이 거부돼요.

버킷 수준 ACL이 거부되면 객체 수준 ACL도 암시적으로 거부되어 Amazon S3가 ACL을 적용하지 않아요.

IAM 정책으로 적용

IAM 정책을 사용해서도 Bucket owner enforced 설정을 적용할 수 있어요. 다음 정책 예제는 Bucket owner enforced 설정의 주요 사용 사례를 다뤄요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyAclActions",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:PutBucketAcl",
        "s3:PutObjectAcl",
        "s3:PutBucketOwnershipControls"
      ],
      "Resource": "*"
    }
  ]
}

출처: 문서

본문

Enforcing Object Ownership (Object Ownership 적용)

Bucket owner enforced 설정을 계정/조직 수준(SCP/RCP + 버킷 리소스 정책) 또는 IAM 정책으로 적용해 모든 새 버킷에서 ACL을 비활성화하는 방법을 설명했어요.

더 알아보기 (Learn more)