Amazon S3 스토리지에 대한 퍼블릭 액세스 차단 - Amazon Simple Storage Service

Amazon S3 스토리지에 대한 퍼블릭 액세스 차단

Amazon S3 퍼블릭 액세스 차단 기능은 액세스 포인트, 버킷 및 계정에 대한 설정을 제공하여 Amazon S3 리소스에 대한 퍼블릭 액세스를 관리하는 데 도움을 줍니다. 기본적으로 새 버킷, 액세스 포인트 및 객체는 퍼블릭 액세스를 허용하지 않습니다. 그러나 사용자는 퍼블릭 액세스를 허용하도록 버킷 정책, 액세스 포인트 정책 또는 객체 권한을 수정할 수 있습니다. S3 퍼블릭 액세스 차단 설정은 이러한 정책 및 권한을 무시하므로 이러한 리소스에 대한 퍼블릭 액세스를 제한할 수 있습니다.

S3 퍼블릭 액세스 차단을 사용하면 계정 관리자와 버킷 소유자가 리소스 생성 방식에 관계없이 적용되는 Amazon S3 리소스에 대한 퍼블릭 액세스를 제한하는 중앙 집중식 제어를 쉽게 설정할 수 있습니다.

퍼블릭 블록 액세스 구성에 대한 지침은 퍼블릭 액세스 차단 구성에서 확인하십시오.

Amazon S3가 버킷이나 객체에 대한 액세스 요청을 받으면 버킷이나 버킷 소유자 계정에 적용된 퍼블릭 액세스 차단 설정이 있는지 판단합니다. 액세스 포인트를 통해 요청이 이루어진 경우 Amazon S3는 액세스 포인트에 대한 퍼블릭 액세스 차단 설정도 확인합니다. 요청된 액세스를 금지하는 퍼블릭 액세스 차단 설정이 있는 경우 Amazon S3가 요청을 거부합니다.

Amazon S3 퍼블릭 액세스 차단은 네 가지 설정을 제공합니다. 각각의 설정은 독립적이며 어떤 조합으로든 사용할 수 있습니다. 각 설정은 액세스 포인트, 버킷 또는 전체 AWS 계정에 적용할 수 있습니다. 액세스 포인트, 버킷 또는 계정에 대한 퍼블릭 액세스 차단 설정이 다른 경우 Amazon S3에서는 액세스 포인트, 버킷 및 계정 설정의 가장 제한적인 조합을 적용합니다.

따라서 Amazon S3가 퍼블릭 액세스 차단 설정에 의해 작업이 금지되는지 평가하는 경우, 액세스 포인트, 버킷 또는 계정 설정을 위반하는 요청을 거부합니다.

중요

ACL(액세스 제어 목록), 액세스 포인트 정책, 버킷 정책 또는 모두를 통해 버킷 및 객체에 퍼블릭 액세스 권한이 부여됩니다. 모든 Amazon S3 액세스 포인트, 버킷 및 객체의 퍼블릭 액세스가 차단되도록 하려면 계정에 대해 퍼블릭 액세스 차단 설정 4개를 모두 켜는 것이 좋습니다. 이러한 설정은 현재와 미래의 모든 버킷 및 액세스 포인트에 대한 퍼블릭 액세스를 차단합니다.

이 설정을 적용하기 전에 퍼블릭 액세스 없이 애플리케이션이 올바르게 작동하는지 확인합니다. 버킷 또는 객체에 대한 특정 수준의 퍼블릭 액세스가 필요한 경우(예를 들어 Amazon S3를 사용하여 정적 웹 사이트 호스팅에 설명된 대로 정적 웹 사이트를 호스팅하는 경우), 스토리지 사용 사례에 적합하도록 개별 설정을 사용자 지정할 수 있습니다.

퍼블릭 액세스 차단을 활성화하면 S3 리소스에 직접 연결된 리소스 정책 또는 액세스 제어 목록(ACL)을 통해 퍼블릭 액세스가 부여되지 않도록 하여 리소스를 보호하는 데 도움이 됩니다. 퍼블릭 액세스 차단을 활성화하는 것 외에도 다음 정책을 주의 깊게 검토하여 퍼블릭 액세스를 허용하지 않는지 확인하세요.

  • 관련 AWS 보안 주체(예: IAM 역할)에 연결된 자격 증명 기반 정책

  • 관련 AWS 리소스(예: AWS Key Management Service(KMS) 키)에 연결된 리소스 기반 정책

참고
  • 액세스 포인트, 버킷 및 AWS 계정에 대해서만 퍼블릭 액세스 차단 설정을 사용할 수 있습니다. Amazon S3는 객체별로 퍼블릭 액세스 차단 설정을 지원하지 않습니다.

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

퍼블릭 액세스 차단 설정

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을 감사, 미세 조정하거나 변경할 수 있습니다.

참고

액세스 포인트에 연결된 ACL이 없습니다. 이 설정을 액세스 포인트에 적용하면 기본 버킷에 대한 패스스루 역할을 합니다. 액세스 포인트에 이 설정이 사용 설정된 경우, 버킷에 실제로 이 설정이 사용 설정되어 있는지 여부와 상관없이 액세스 포인트를 통해 이루어진 요청은 기본 버킷에 이 설정이 사용 설정된 것처럼 동작합니다.

IgnorePublicAcls

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

참고

액세스 포인트에 연결된 ACL이 없습니다. 이 설정을 액세스 포인트에 적용하면 기본 버킷에 대한 패스스루 역할을 합니다. 액세스 포인트에 이 설정이 사용 설정된 경우, 버킷에 실제로 이 설정이 사용 설정되어 있는지 여부와 상관없이 액세스 포인트를 통해 이루어진 요청은 기본 버킷에 이 설정이 사용 설정된 것처럼 동작합니다.

BlockPublicPolicy

버킷에 이 옵션을 TRUE로 설정하면 지정된 버킷 정책이 퍼블릭 액세스를 허용하는 경우 PUT Bucket 정책에 대한 호출을 Amazon S3가 거부합니다. 버킷에 이 옵션을 TRUE로 설정하면 지정된 버킷 정책이 퍼블릭 액세스를 허용하는 경우, 버킷의 동일한 계정 액세스 포인트 모두에 PUT 액세스 포인트 정책에 대한 호출을 Amazon S3가 거부합니다.

액세스 포인트에 이 옵션을 TRUE로 설정하면 지정된 정책(액세스 포인트 또는 기본 버킷)이 퍼블릭 액세스를 허용하는 경우, 액세스 포인트를 통해 이루어지는 PUT 액세스 포인트 정책 및 PUT 버킷 정책에 대한 호출을 Amazon S3가 거부합니다.

이 설정을 사용하면 사용자가 버킷 또는 버킷에 포함된 객체를 공개적으로 공유하지 않고 사용자가 액세스 포인트 및 버킷 정책을 관리할 수 있습니다. 이 설정을 사용 설정해도 기존 액세스 포인트 또는 버킷 정책에는 영향을 주지 않습니다.

중요

이 설정을 효과적으로 사용하려면 계정 레벨에서 적용하는 것이 좋습니다. 버킷 정책을 통해 사용자가 버킷의 퍼블릭 액세스 차단 설정을 변경할 수 있습니다. 따라서 버킷 정책을 변경할 권한이 있는 사용자는 버킷에 대한 퍼블릭 액세스 차단 설정을 사용 중지하도록 허용하는 정책을 삽입할 수 있습니다. 특정 버킷이 아닌 전체 계정에 이 설정이 사용 설정되면 사용자가 이 설정을 사용 중지하기 위해 버킷 정책을 변경한 경우에도 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이 있는 버킷이나 객체가 다시 공개적으로 액세스할 수 있습니다.

액세스 포인트에서 퍼블릭 액세스 차단 작업 수행

액세스 포인트에서 퍼블릭 액세스 차단 작업을 수행하려면 AWS CLI 서비스 s3control을 사용하십시오.

중요

현재는 액세스 포인트를 생성한 후에 액세스 포인트의 퍼블릭 액세스 차단 설정을 변경할 수 없습니다. 따라서 액세스 포인트에 대한 퍼블릭 액세스 차단 설정을 지정하는 유일한 방법은 액세스 포인트를 생성할 때 포함시키는 것입니다.

"퍼블릭"의 의미

ACL

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

버킷 정책

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

  • AWS 보안 주체, 사용자, 역할 또는 서비스 보안 주체(예: aws:PrincipalOrgID)

  • aws:SourceIp를 사용하는 Classless Inter-Domain Routing(CIDR) 집합. CIDR에 대한 자세한 내용은 RFC Editor 웹 사이트에서 RFC 4632를 참조하세요.

    참고

    IP 범위가 매우 넓은(예: 0.0.0.0/1) aws:SourceIp 조건 키를 기반으로 액세스를 부여하는 버킷 정책은 '퍼블릭'으로 평가됩니다. 여기에는 IPv4의 경우 /8, IPv6의 경우 /32보다 광범위한 값이 포함됩니다(RFC1918 프라이빗 범위 제외). 퍼블릭 액세스 차단은 이러한 '퍼블릭' 정책을 거부하고 이러한 '퍼블릭' 정책을 이미 사용하고 있는 버킷에 대한 크로스 계정 액세스를 차단합니다.

  • aws:SourceArn

  • aws:SourceVpc

  • aws:SourceVpce

  • aws:SourceOwner

  • aws:SourceAccount

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

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

  • s3:DataAccessPointArn

    참고

    버킷 정책에 사용되는 경우 계정 ID가 고정되어 있는 한 정책을 퍼블릭으로 렌더링하지 않고도 액세스 포인트 이름에 대한 와일드카드가 이 값에 포함될 수 있습니다. 예를 들어 arn:aws:s3:us-west-2:123456789012:accesspoint/*에 대한 액세스를 허용하면 버킷 정책을 퍼블릭으로 렌더링하지 않고도 리전 123456789012의 계정 us-west-2와 연결된 모든 액세스 포인트에 대한 액세스가 허용됩니다. 이 동작은 액세스 포인트 정책에 따라 다릅니다. 자세한 내용은 액세스 포인트 단원을 참조하십시오.

  • s3:DataAccessPointAccount

버킷 정책에 대한 자세한 내용은 Amazon S3의 버킷 정책를 참조하십시오.

예 : 퍼블릭 버킷 정책

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

{ "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가 퍼블릭 액세스 권한과 퍼블릭이 아닌 액세스 권한을 모두 포함하는 버킷 정책을 평가하는 방법

이 예제는 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는 버킷과 비교하여 액세스 포인트에 대해 퍼블릭 액세스 차단 설정을 약간 다르게 평가합니다. 액세스 포인트 정책이 퍼블릭인 시점을 결정하기 위해 Amazon S3가 적용하는 규칙은 다음과 같은 경우를 제외하고 일반적으로 버킷에 대한 규칙과 액세스 포인트에 대한 규칙이 동일합니다.

  • 네트워크 오리진이 VPC인 액세스 포인트는 액세스 포인트 정책의 내용에 관계없이 항상 퍼블릭이 아닌 것으로 간주됩니다.

  • s3:DataAccessPointArn를 사용하여 액세스 포인트 집합에 대한 액세스 권한을 부여하는 액세스 포인트 정책은 퍼블릭으로 간주됩니다. 이 동작은 버킷 정책과 다릅니다. 예를 들어, s3:DataAccessPointArn와 일치하는 arn:aws:s3:us-west-2:123456789012:accesspoint/* 값에 액세스 권한을 부여하는 버킷 정책은 공개로 간주되지 않습니다. 그러나 액세스 포인트 정책의 동일한 명령문은 액세스 포인트를 퍼블릭으로 렌더링합니다.

IAM Access Analyzer for S3를 사용하여 퍼블릭 버킷 검토

IAM Access Analyzer for S3를 사용하여 퍼블릭 액세스 권한을 부여하는 버킷 ACL, 버킷 정책 또는 액세스 포인트 정책이 있는 버킷을 검토할 수 있습니다. IAM Access Analyzer for S3는 인터넷상의 모든 사용자 또는 조직 외부의 AWS 계정을 포함한 다른 AWS 계정에 대한 액세스를 허용하도록 구성된 S3 버킷에 대한 알림을 제공합니다. 각 퍼블릭 버킷 또는 공유 버킷에 대해 퍼블릭 액세스 또는 공유 액세스의 수준과 소스를 보고하는 결과가 수신됩니다.

IAM Access Analyzer for S3에서는 한 번의 클릭으로 버킷에 대한 모든 퍼블릭 액세스를 차단할 수 있습니다. 또한 버킷 수준 권한 설정으로 드릴다운하여 세부적인 액세스 수준을 구성할 수 있습니다. 퍼블릭 액세스 또는 공유 액세스가 필요한 것으로 확인된 특정 사용 사례의 경우, 버킷에 대한 결과를 보관하여 버킷을 퍼블릭 상태로 유지할 것인지 공유 상태로 유지할 것인지 확인하고 기록할 수 있습니다.

드문 경우지만 IAM Access Analyzer for S3는 Amazon S3 퍼블릭 액세스 차단 평가에서 퍼블릭으로 보고되는 버킷에 대해 어떤 결과도 보고하지 않을 수 있습니다. 이는 Amazon S3 퍼블릭 액세스 차단이 현재 작업 및 향후 추가될 수 있는 모든 잠재적 작업에 대한 정책을 검토하기 때문에 발생하며 버킷은 퍼블릭이 됩니다. 반면 IAM Access Analyzer for S3는 액세스 상태 평가에서 Amazon S3 서비스에 대해 지정된 현재 작업만 분석합니다.

IAM Access Analyzer for S3에 대한 자세한 내용은 IAM Access Analyzer for S3를 사용하여 버킷 액세스 검토 섹션을 참조하십시오.

권한

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

작업 필수 권한
GET 버킷 정책 상태 s3:GetBucketPolicyStatus
버킷 퍼블릭 액세스 차단 설정 GET s3:GetBucketPublicAccessBlock
버킷 퍼블릭 액세스 차단 설정 PUT s3:PutBucketPublicAccessBlock
버킷 퍼블릭 액세스 차단 설정 DELETE s3:PutBucketPublicAccessBlock
계정 퍼블릭 액세스 차단 설정 GET s3:GetAccountPublicAccessBlock
계정 퍼블릭 액세스 차단 설정 PUT s3:PutAccountPublicAccessBlock
계정 퍼블릭 액세스 차단 설정 DELETE s3:PutAccountPublicAccessBlock
PUT 액세스 포인트 퍼블릭 액세스 차단 설정 s3:CreateAccessPoint
참고

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

퍼블릭 액세스 차단 구성

AWS 계정 및 Amazon S3 버킷에 대한 퍼블릭 액세스 차단을 구성하는 방법에 대한 자세한 내용은 다음 주제를 참조하십시오.