Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

Amazon S3 퍼블릭 액세스 차단 사용

Amazon S3는 버킷 및 계정에 대한 퍼블릭 액세스 차단 설정을 제공하여 Amazon S3 리소스에 대한 퍼블릭 액세스를 관리하는 데 도움을 줍니다. 기본적으로 새 버킷 및 객체는 퍼블릭 액세스를 허용하지 않지만 사용자는 퍼블릭 액세스를 허용하도록 버킷 정책 또는 객체 권한을 수정할 수 있습니다. Amazon S3 퍼블릭 액세스 차단 설정은 이러한 정책 및 권한을 무시하므로 이러한 리소스에 대한 퍼블릭 액세스를 제한할 수 있습니다. Amazon S3 퍼블릭 액세스 차단을 사용하면 계정 관리자 및 버킷 소유자가 리소스 생성 방식에 관계없이 적용되는 Amazon S3 리소스에 대한 퍼블릭 액세스를 제한하는 중앙 집중식 제어를 쉽게 설정할 수 있습니다.

Amazon S3가 버킷이나 객체에 대한 액세스 요청을 받으면 버킷이나 버킷 소유자 계정에 적용된 퍼블릭 액세스 차단 설정이 있는지 판단합니다. 요청된 액세스를 금지하는 퍼블릭 액세스 차단 설정이 있는 경우 Amazon S3가 요청을 거부합니다. Amazon S3 퍼블릭 액세스 차단은 네 가지 설정을 제공합니다. 각각의 설정은 독립적이며 어떤 조합으로든 사용할 수 있습니다. 각 설정은 한 개의 버킷이나 전체 AWS 계정에 적용할 수 있습니다. 버킷에 소유자 계정과 다른 퍼블릭 액세스 차단 설정이 있는 경우 Amazon S3는 가장 제한적인 조합의 버킷 수준과 계정 수준 설정을 적용합니다. 따라서 Amazon S3가 퍼블릭 액세스 차단 설정에 의해 작업이 금지되는지 평가하는 경우, 버킷 수준 또는 계정 수준 설정을 위반하는 요청을 거부합니다.

주의

ACL(액세스 제어 목록), 버킷 정책 또는 둘 다를 통해 버킷 및 객체에 퍼블릭 액세스 권한이 부여됩니다. 모든 S3 버킷 및 객체의 퍼블릭 액세스가 차단되도록 하려면 퍼블릭 액세스 차단을 위한 4가지 모든 설정을 켭니다. 이러한 설정은 모든 현재 및 미래 버킷에 계정 전체로 적용됩니다.

퍼블릭 액세스 차단 설정을 켜는 것이 좋습니다. 이러한 설정을 적용하기 전에 퍼블릭 액세스 없이 애플리케이션이 올바르게 작동하는지 확인합니다. 버킷 또는 객체에 대한 특정 수준의 퍼블릭 액세스가 필요한 경우 스토리지 사용 사례에 적합하도록 개별 설정을 사용자 지정할 수 있습니다.

참고

  • 버킷 및 AWS 계정에 대해서만 퍼블릭 액세스 차단 설정을 활성화할 수 있습니다. Amazon S3는 객체 단위로 퍼블릭 액세스 차단 설정을 지원하지 않습니다.

  • 계정에 퍼블릭 액세스 차단 설정을 적용하면 해당 설정은 전 세계 모든 AWS 리전에 적용됩니다. 설정이 모든 리전에서 즉시 또는 동시에 적용되지는 않지만 결국 모든 리전으로 전파됩니다.

Amazon S3 콘솔에서 퍼블릭 액세스 차단 활성화

Amazon S3 퍼블릭 액세스 차단은 네 가지 설정을 제공합니다. 이러한 설정은 개별 버킷 또는 전체 AWS 계정에 어떤 조합으로든 적용할 수 있습니다. 아래 이미지는 계정의 Amazon S3 콘솔에서 퍼블릭 액세스 차단을 활성화하는 방법을 보여줍니다. 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서권한 설정: 퍼블릭 액세스 차단을 참조하십시오.


					퍼블릭 액세스 계정 차단 설정을 보여주는 콘솔 스크린샷.

퍼블릭 액세스 차단 설정

Amazon S3 퍼블릭 액세스 차단은 네 가지 설정을 제공합니다. 이러한 설정은 개별 버킷 또는 전체 AWS 계정에 어떤 조합으로든 적용할 수 있습니다. 설정을 계정에 적용하면 해당 계정이 소유한 모든 버킷에 적용됩니다.

다음 테이블에는 사용 가능한 설정이 포함되어 있습니다.

이름 설명
BlockPublicAcls

이 옵션을 TRUE로 설정하면 다음과 같은 동작이 발생합니다.

  • 지정된 ACL(액세스 제어 목록)이 퍼블릭이면 PUT Bucket acl 및 PUT Object acl 호출이 실패합니다.

  • 요청에 퍼블릭 ACL이 포함되어 있으면 PUT Object 호출이 실패합니다.

  • 이 설정이 계정에 적용되면, 요청에 퍼블릭 ACL이 포함된 경우 PUT Bucket 호출이 실패합니다.

이 설정을 TRUE로 설정하면 지정된 작업이 실패합니다(REST API, AWS CLI 또는 AWS SDK 등 설정 경로와 상관없이). 그러나 버킷 및 객체에 대한 기존 정책 및 ACL은 수정되지 않습니다. 이 설정을 사용하면 퍼블릭 액세스를 차단하는 동시에 버킷과 객체에 대한 기존 정책 및 ACL을 감사, 미세 조정하거나 변경할 수 있습니다.

IgnorePublicAcls

이 옵션을 TRUE로 설정하면 Amazon S3가 버킷의 모든 퍼블릭 ACL 및 거기에 포함된 모든 객체를 무시합니다. 이 설정을 사용하면 ACL에 의해 부여된 퍼블릭 액세스를 안전하게 차단하면서 퍼블릭 ACL을 포함하는 PUT Object 호출을 허용할 수 있습니다(퍼블릭 ACL이 포함된 PUT Object 호출을 거부하는 BlockPublicAcls과 반대). 이 설정을 활성화하면 기존 ACL의 지속성에 영향을 주지 않으며 새 퍼블릭 ACL이 설정되는 것을 방지하지 않습니다.

BlockPublicPolicy

이 옵션을 TRUE로 설정하면 지정된 버킷 정책이 퍼블릭 액세스를 허용하는 경우 Amazon S3가 PUT Bucket 정책에 대한 호출을 거부합니다. 이 설정을 사용하면 버킷 또는 거기에 포함된 객체를 공개적으로 공유하지 않고 사용자가 버킷 정책을 관리할 수 있습니다. 이 설정 활성화는 기존 버킷 정책에 영향을 주지 않습니다.

중요

이 설정을 효과적으로 사용하려면 계정 레벨에서 적용해야 합니다. 버킷 정책을 통해 사용자가 버킷의 퍼블릭 액세스 차단 설정을 변경할 수 있습니다. 따라서 버킷 정책을 변경할 권한이 있는 사용자는 버킷에 대한 퍼블릭 액세스 차단 설정을 비활성화하도록 허용하는 정책을 삽입할 수 있습니다. 특정 버킷이 아닌 전체 계정에 이 설정이 활성화되면 사용자가 이 설정을 비활성화하기 위해 버킷 정책을 변경한 경우에도 Amazon S3가 퍼블릭 정책을 차단합니다.

RestrictPublicBuckets

이 옵션을 TRUE로 설정하면 퍼블릭 정책이 있는 버킷에 대한 액세스가 버킷 소유자 계정 내에서 권한 있는 사용자와 AWS 서비스로만 제한됩니다. 이 설정은 AWS 서비스에서 제외한 버킷에 대한 모든 교차 계정 액세스를 차단하지만 계정 내 사용자는 계속 버킷을 관리할 수 있습니다.

이 설정을 활성화하면 기존 버킷 정책에 영향을 주지 않습니다. 단, Amazon S3는 특정 계정에 대한 비공개 위임을 포함하여 모든 퍼블릭 버킷 정책에서 파생된 퍼블릭 및 교차 계정 액세스를 차단합니다.

중요

  • GET Bucket acl 및 GET Object acl에 대한 호출은 항상 지정된 버킷 또는 객체에 대한 효율적인 권한을 반환합니다. 예를 들어, 버킷에 퍼블릭 액세스를 부여하는 ACL이 있고 버킷에 IgnorePublicAcls 설정도 활성화되어 있다고 가정하겠습니다. 이 경우 GET Bucket acl은 버킷과 연결된 실제 ACL이 아닌 Amazon S3가 적용되는 액세스 권한을 반영하는 ACL을 반환합니다.

  • 퍼블릭 액세스 차단 설정은 기존 정책이나 ACL을 변경하지 않습니다. 따라서 퍼블릭 액세스 차단 설정을 제거하면 퍼블릭 정책이나 ACL이 있는 버킷이나 객체가 다시 공개적으로 액세스할 수 있습니다.

"퍼블릭"의 의미

  • ACL

    • Amazon S3는 미리 정의된 AllUsers 또는 AuthenticatedUsers 그룹의 구성원에게 권한을 부여하는 경우 버킷 또는 객체 ACL을 퍼블릭으로 간주합니다. 미리 정의된 그룹에 대한 자세한 내용은 Amazon S3의 미리 정의된 그룹 단원을 참조하십시오.

  • 정책

    • 버킷 정책을 평가할 때 Amazon S3는 정책을 퍼블릭으로 가정하여 시작합니다. 그런 다음 정책을 평가하여 비공개로 판단할 수 있는지 결정합니다. 퍼블릭이 아닌 것으로 평가되려면 버킷 정책은 다음 중 하나 이상의 고정 값(와일드카드가 없는 값)에만 액세스 권한을 부여해야 합니다.

      • aws:SourceIp를 사용하는 클래스 없는 도메인 간 라우팅(CIDR) 집합. CIDR에 대한 자세한 내용은 RFC Editor 웹 사이트에서 RFC 4632를 참조하십시오.

      • AWS 보안 주체, 사용자, 역할 또는 서비스 보안 주체

      • aws:SourceArn

      • aws:SourceVpc

      • aws:SourceVpce

      • aws:SourceOwner

      • aws:SourceAccount

      • s3:x-amz-server-side-encryption-aws-kms-key-id

      • aws:userid, 패턴 외부 "AROLEID:*"

    • 이 규칙에서 다음 예제 정책은 퍼블릭으로 간주됩니다.

      { “Principal”: { “Federated”: “graph.facebook.com” }, “Resource”: “*”, “Action”: “s3:PutObject”, “Effect”: “Allow” }
      { “Principal”: “*”, “Resource”: “*”, “Action”: “s3:PutObject”, “Effect”: “Allow” }
      { “Principal”: “*”, “Resource”: “*”, “Action”: “s3:PutObject”, “Effect”: “Allow”, “Condition”: { “StringLike”: {“aws:SourceVpc”: “vpc-*”}} }

      고정 값을 사용하여 이전에 나열된 조건 키를 포함하면 이러한 정책을 비공개로 만들 수 있습니다. 예를 들어 앞의 마지막 정책은 다음과 같이 aws:SourceVpc를 고정 값으로 설정하여 비공개로 만들 수 있습니다.

      { “Principal”: “*”, “Resource”: “*”, “Action”: “s3:PutObject”, “Effect”: “Allow”, “Condition”: {“StringEquals”: {“aws:SourceVpc”: “vpc-91237329”}} }
    • 버킷 정책에 대한 자세한 내용은 버킷 정책 및 사용자 정책 사용를 참조하십시오.

이 예제는 Amazon S3가 공개 및 비공개 액세스 권한을 모두 포함하는 정책을 어떻게 평가하는지 보여줍니다.

버킷에 고정된 보안 주체 집합에 대한 액세스를 부여하는 정책이 있다고 가정하겠습니다. 이전에 설명한 규칙에 따르면 이 정책은 퍼블릭이 아닙니다. 따라서 RestrictPublicBuckets 설정을 활성화하면 RestrictPublicBuckets이 퍼블릭 정책이 있는 버킷에만 적용되므로 정책은 작성된 대로 유효하게 유지됩니다. 그러나 정책에 퍼블릭 설명을 추가하면 RestrictPublicBuckets이 버킷에 영향을 줍니다. 그러면 버킷 소유자 계정의 권한 있는 사용자와 AWS 서비스 주체만 버킷에 액세스할 수 있습니다.

예를 들어, "Account-1"이 소유한 버킷에 다음을 포함하는 정책이 있다고 가정하겠습니다.

  1. AWS CloudTrail(AWS 서비스 보안 주체)에 액세스 권한을 부여하는 설명문

  2. "Account-2" 계정에 액세스 권한을 부여하는 설명문

  3. 예를 들어 Condition 제한 없이 "Principal": "*"를 지정하여 퍼블릭에 액세스 권한을 부여하는 설명문

이 정책은 세 번째 설명문으로 인해 퍼블릭으로 평가됩니다. 이 정책이 있고 RestrictPublicBuckets이 활성화되면, Amazon S3는 CloudTrail의 액세스만 허용합니다. 설명문 2가 퍼블릭이 아니더라도 Amazon S3는 "Account-2"에 의한 액세스를 비활성화합니다. 설명문 3이 전체 정책을 퍼블릭으로 만들기 때문으로, RestrictPublicBuckets이 적용됩니다. 결과적으로 정책이 특정 계정 "Account-2"에 대한 액세스를 위임하더라도 Amazon S3는 교차 계정 액세스를 비활성화합니다. 그러나 정책에서 설명문 3을 제거하면 정책은 퍼블릭으로 평가되지 않으며 RestrictPublicBuckets은 더 이상 적용되지 않습니다. 따라서 RestrictPublicBuckets을 활성화해 두어도 "Account-2"는 버킷에 대한 액세스를 다시 얻습니다.

권한

Amazon S3 퍼블릭 액세스 차단 기능을 사용하려면 다음 권한이 있어야 합니다.

작업 필요한 권한
GET 버킷 정책 상태 s3:GetBucketPolicyStatus
버킷 퍼블릭 액세스 차단 설정 GET s3:GetBucketPublicAccessBlock
버킷 퍼블릭 액세스 차단 설정 PUT s3:PutBucketPublicAccessBlock
버킷 퍼블릭 액세스 차단 설정 DELETE s3:PutBucketPublicAccessBlock
계정 퍼블릭 액세스 차단 설정 GET s3:GetAccountPublicAccessBlock
계정 퍼블릭 액세스 차단 설정 PUT s3:PutAccountPublicAccessBlock
계정 퍼블릭 액세스 차단 설정 DELETE s3:PutAccountPublicAccessBlock

참고

DELETE 작업에는 PUT 작업과 동일한 권한이 필요합니다. DELETE 작업에 대한 별도의 권한은 없습니다.

예제

AWS CLI의 퍼블릭 액세스 차단 사용

AWS CLI를 통해 Amazon S3 퍼블릭 액세스 차단을 사용할 수 있습니다. 사용하는 명령은 버킷이나 계정에서 퍼블릭 액세스 차단 호출을 수행할지 여부에 따라 다릅니다. AWS CLI의 설정 및 사용에 대한 자세한 내용은 AWS Command Line Interface란? 단원을 참조하십시오.

  • 버킷

    • 버킷에서 퍼블릭 액세스 차단 작업을 수행하려면 AWS CLI 서비스 s3api를 사용하십시오. 이 서비스를 사용하는 버킷 수준 작업은 다음과 같습니다.

      • PUT PublicAccessBlock(버킷)

      • GET PublicAccessBlock(버킷)

      • DELETE PublicAccessBlock(버킷)

      • GET BucketPolicyStatus

  • 계정

    • 계정에서 퍼블릭 액세스 차단 작업을 수행하려면 AWS CLI 서비스 s3control을 사용하십시오. 이 서비스를 사용하는 계정 수준 작업은 다음과 같습니다.

      • PUT PublicAccessBlock(계정)

      • GET PublicAccessBlock(계정)

      • DELETE PublicAccessBlock(계정)

AWS SDK for Java의 퍼블릭 액세스 차단 사용

다음 예제는 AWS SDK for Java에서 Amazon S3 퍼블릭 액세스 차단을 사용하는 방법을 보여줍니다. 실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 AWS SDK for Java 사용 단원을 참조하십시오.

예제 1

이 예제는 AWS SDK for Java를 사용하여 S3 버킷에 퍼블릭 액세스 차단 구성을 설정하는 방법을 보여줍니다.

AmazonS3 client = AmazonS3ClientBuilder.standard() .withCredentials(<credentials>) .build(); client.setPublicAccessBlock(new SetPublicAccessBlockRequest() .withBucketName(<bucket-name>) .withPublicAccessBlockConfiguration(new PublicAccessBlockConfiguration() .withBlockPublicAcls(<value>) .withIgnorePublicAcls(<value>) .withBlockPublicPolicy(<value>) .withRestrictPublicBuckets(<value>)));

중요

이 예제는 AmazonS3 클라이언트 클래스를 사용하는 버킷 수준 작업에만 적용됩니다. 계정 수준 작업의 경우 다음 예제를 참조하십시오.

예제 2

이 예제는 AWS SDK for Java를 사용하여 Amazon S3 계정에 퍼블릭 액세스 차단 구성을 설정하는 방법을 보여줍니다.

AWSS3ControlClientBuilder controlClientBuilder = AWSS3ControlClientBuilder.standard(); controlClientBuilder.setRegion(<region>); controlClientBuilder.setCredentials(<credentials>); AWSS3Control client = controlClientBuilder.build(); client.putPublicAccessBlock(new PutPublicAccessBlockRequest() .withAccountId(<account-id>) .withPublicAccessBlockConfiguration(new PublicAccessBlockConfiguration() .withIgnorePublicAcls(<value>) .withBlockPublicAcls(<value>) .withBlockPublicPolicy(<value>) .withRestrictPublicBuckets(<value>)));

중요

이 예제는 AWSS3Control 클라이언트 클래스를 사용하는 계정 수준 작업에만 적용됩니다. 버킷 수준 작업의 경우 앞의 예를 참조하십시오.

다른 AWS SDK의 퍼블릭 액세스 차단 사용

다른 AWS SDK 사용 방법에 대한 자세한 내용은 AWS SDK, CLI 및 Explorer 사용 단원을 참조하십시오.

REST API의 퍼블릭 액세스 차단 사용

REST API를 통한 Amazon S3 퍼블릭 액세스 차단 사용에 대한 자세한 내용은 Amazon Simple Storage Service API Reference에서 다음 주제를 참조하십시오.