Amazon Web Services 한국 블로그

Amazon S3 Block Public Access – 계정 및 버킷 추가 보호 기능 출시

Amazon S3 신규 생성 버킷과 객체는 기본적으로 비공개 및 보호된 상태로 시작됩니다. 선택적으로 액세스 제어 목록(ACL) 및 버킷 정책을 사용하여 다른 AWS 계정 또는 퍼블릭(익명) 요청에 대해 액세스 권한을 부여할 수 있습니다. ACL과 정책은 상당한 유연성을 제공하며, 여러 계정에 권한 부여, 특정 IP 주소에 대한 액세스 제한, Multi-Factor Authentication(MFA) 사용 요청, 다른 계정이 새 객체를 버킷에 업로드하도록 허용다양한 설정이 가능합니다.

AWS에서는 고객이 필요에 따라 퍼블릭 버킷과 객체를 사용하도록 지원하는 동시에 단순한 실수나 착오로 이러한 리소스에 대한 퍼블릭 액세스가 부여되지 않도록 도와주는 도구를 제공합니다.

예를 들어, 작년에 AWS는 어느 버킷에 대한 퍼블릭 액세스가 설정되어 있는지 한 눈에 볼 수 있도록 해 주는 퍼블릭 표시기를 제공했습니다.

버킷 보기는 기본적으로 퍼블릭 버킷이 맨 위에 오도록 정렬됩니다.

뿐만 아니라 AWS는 Trusted Advisor의 버킷 권한 확인 기능을 무료로 제공합니다.

신규 Amazon S3 Block Public Access 기능
Amazon S3 Block Public Access 기능은 버킷과 객체를 더욱 쉽게 보호할 수 있습니다. 이 기능은 계정 수준뿐 아니라 추후 생성하게 될 버킷을 비롯한 개별 버킷에서 작동하는 새로운 차원의 보호 기능을 제공합니다. 고객은 ACL 또는 정책에 의해 지정되었는지 여부에 상관 없이 기존 퍼블릭 액세스를 차단할 수 있으며 새롭게 생성된 항목에 퍼블릭 액세스가 부여되지 않을 것을 확인할 수 있습니다. AWS 계정이 데이터 레이크 또는 기타 비즈니스 애플리케이션의 호스팅에 사용되는 경우 퍼블릭 액세스의 차단은 우발적인 공개적 노출에 대한 계정 수준의 보호 기능 역할을 합니다. AWS의 목표는 퍼블릭 액세스는 웹 호스팅에 사용되어야 함을 명확히 하는 데 있습니다!

이 기능은 사용이 간편하도록 설계되었으며 S3 콘솔, CLI, S3 API 및 CloudFormation 템플릿을 통해 액세스할 수 있습니다. S3 콘솔과 퍼블릭 버킷에서 시작해 보겠습니다.

[Public access settings for this account(현재 계정의 퍼블릭 액세스 설정)]를 클릭하면 계정 수준의 제어를 설정할 수 있습니다.

아래는 한국어 콘솔에서 보이는 화면입니다.

퍼블릭 ACL을 관리하는 옵션 두 가지와 퍼블릭 버킷 정책을 관리하는 옵션 두 가지가 주어집니다. 각 옵션을 자세히 살펴보겠습니다.

Block new public ACLs and uploading public objects(새 퍼블릭 ACL 및 퍼블릭 객체 업로드 차단) – 이 옵션은 새 퍼블릭 버킷 또는 객체 ACL의 사용을 금지하며 추후 이러한 리소스의 사용을 포함하는 PUT 요청이 실패하게 만드는 데 사용됩니다. 기존 버킷 또는 객체에는 영향을 미치지 않습니다. 이 설정을 사용하면 추후 ACL 사용을 통해 버킷 또는 객체를 퍼블릭으로 만들려는 시도를 차단할 수 있습니다. 애플리케이션이 퍼블릭 ACL을 통한 객체 업로드를 시도하거나 관리자가 버킷에 퍼블릭 액세스 설정을 적용하려고 시도하는 경우, 이 설정이 버킷 또는 객체에 대한 퍼블릭 액세스 설정을 차단합니다.

Remove public access granted through public ACLs (퍼블릭 ACL을 통해 부여된 퍼블릭 액세스 권한 제거) – 이 옵션은 S3가 요청 승인할 때 퍼블릭 ACL을 평가하지 않도록 지시하므로 ACL를 사용하여 어떤 버킷 또는 객체도 퍼블릭으로 설정할 수 없게 됩니다. 이 설정은 버킷에 있는 현재 및 추후 객체에 대한 모든 현재 또는 추후 퍼블릭 액세스 설정을 재정의합니다. 기존 애플리케이션이 현재 퍼블릭 ACL을 통해 버킷에 객체를 업로드하고 있는 경우에는 이 설정이 객체에 대한 해당 설정을 재정의합니다.

Block new public bucket policies (새 퍼블릭 버킷 정책 차단) – 이 옵션은 새 퍼블릭 버킷 정책의 사용을 금지하며 추후 이러한 리소스의 사용을 포함하는 PUT 요청이 실패하게 만드는 데 사용됩니다. 이 경우에도 기존 버킷 또는 객체에는 영향을 미치지 않습니다. 이 설정은 버킷 정책이 퍼블릭 액세스를 허용하도록 업데이트되지 않도록 해 줍니다.

Block public and cross-account access to buckets that have public policies (퍼블릭 정책이 있는 버킷에 대한 퍼블릭 액세스 및 계정 간 액세스 차단) – 이 옵션을 설정하면 퍼블릭 액세스가 가능한 버킷에 대한 액세스가 버킷 소유자 및 AWS 서비스로 제한됩니다. 이 옵션은 퍼블릭 액세스 정책을 제거하는 동안 퍼블릭 액세스를 지원하는 버킷을 보호할 수 있게 해 줍니다. 이 옵션은 AWS 서비스에 의해 버킷에 로깅된 정보에 퍼블릭 액세스가 제공되지 않도록 보호하는 역할을 수행합니다.

설정을 변경하려면 [편집]을 클릭하고 원하는 퍼블릭 액세스 설정을 선택한 다음 [저장]을 클릭합니다.

내부 AWS 애플리케이션용으로 사용되는 모든 계정에 이러한 설정을 사용할 것이 권장됩니다!

그런 다음 목적을 확인합니다.

작업을 마쳤으면 애플리케이션과 스크립트를 테스트하여 모두 예상한 대로 작동하는지 확인해야 합니다!

이러한 설정을 계정 수준에서 지정하면 해당 설정이 현재 버킷에 적용되고 추후 생성하는 버킷에도 적용됩니다. 그러나 액세스 제어에 대한 보다 세밀한 접근 방식을 선호하는 경우에는 개별 버킷에 이러한 옵션을 설정할 수도 있습니다. 일부 옵션은 계정 수준에서 설정하고 또다른 옵션은 버킷에 설정하는 경우 보호 수준은 적층 방식으로 적용됩니다. 버킷을 선택하고 [Edit public access settings]을 클릭합니다.

그런 다음 원하는 옵션을 선택합니다.

이미 계정 수준에서 모든 퍼블릭 액세스를 거부했으므로 이는 중복적인 작업이지만 버킷 수준에서 제어가 가능하다는 점을 알려드리고자 합니다. 참고로 버킷 수준에서 옵션을 설정하여 계정 수준 설정을 재정의할 수는 없습니다.

한 눈에 모든 버킷의 퍼블릭 액세스 상태를 볼 수 있습니다.

프로그램 방식의 액세스
S3 API에 대한 호출을 통해서도 이 기능에 액세스할 수 있습니다. 관련 함수는 다음과 같습니다.

GetPublicAccessBlock – 계정 또는 버킷에 대한 퍼블릭 액세스 차단 옵션을 가져옵니다.

PutPublicAccessBlock – 계정 또는 버킷에 대한 퍼블릭 액세스 차단 옵션을 설정합니다.

DeletePublicAccessBlock – 계정 또는 버킷에서 퍼블릭 액세스 차단 옵션을 제거합니다.

GetBucketPolicyStatus – 버킷 액세스 정책이 퍼블릭인지 아닌지 확인합니다.

CloudFormation 템플릿을 통해 버킷을 생성할 때에도 옵션을 설정할 수 있습니다.

{
   "Type":"AWS::S3::Bucket",
   "Properties":{
      "PublicAccessBlockConfiguration":{
         "BlockPublicAcls":true,
         "IgnorePublicAcls":false,
         "BlockPublicPolicy":true,
         "RestrictPublicBucket":true
      }
   }
}

주요 사항
S3 Block Public Access를 사용할 때에는 알아두어야 할 몇 가지 사항이 있습니다.

새 버킷 – S3 콘솔을 사용하여 추후 생성하는 버킷에는 웹 호스팅을 제외한 모든 애플리케이션에 권장되는 바와 같이 네 가지 설정 모두가 활성화됩니다. 버킷을 퍼블릭으로 설정하려면 이러한 설정 중 하나 이상을 비활성화해야 합니다.

자동 추론 – Zelkova Automated Reasoning 시스템을 사용하여 주어진 정책 또는 ACL을 퍼블릭 설정 대상으로 고려할지 여부를 결정합니다(자세한 내용은 How AWS Uses Automated Reasoning to Help You Achieve Security at Scale 참조).

OrganizationsAWS Organizations를 사용하는 경우 서비스 제어 정책(SCP)을 사용하여 조직 내의 AWS 계정에서 사용 가능한 설정을 제한할 수 있습니다. 예를 들어, 원하는 모든 계정에 대해 원하는 퍼블릭 액세스 설정을 지정한 다음 SCP를 사용하여 설정이 계정 소유자에 의해 변경되지 않도록 할 수 있습니다.

요금 – 이 기능의 사용에는 요금이 부과되지 않습니다. 고객은 S3 API에 전송되는 모든 요청에 대한 일반 요금만 지불하면 됩니다.

정식 출시
Amazon S3 Block Public Access는 현재 모든 상용 AWS 리전에서 이용할 수 있으며 지금 바로 시작하실 수 있습니다!

Jeff;