Amazon S3 스토리지에 대한 공개 접근 차단
Amazon S3 스토리지에 대한 공개 접근 차단
Amazon S3 Block Public Access 기능은 액세스 포인트, 버킷, 계정, AWS Organizations에 대한 설정을 제공해 Amazon S3 리소스에 대한 공개 접근을 관리할 수 있게 해 줘요. 기본적으로 새 버킷, 액세스 포인트, 객체는 공개 접근을 허용하지 않아요. 하지만 사용자가 버킷 정책, 액세스 포인트 정책, 또는 객체 권한을 수정하면 공개 접근을 허용할 수 있어요. S3 Block Public Access 설정은 이런 정책과 권한을 재정의해서 이 리소스들에 대한 공개 접근을 제한할 수 있게 해 줘요.
S3 Block Public Access를 사용하면 조직 관리자, 계정 관리자, 버킷 소유자가 리소스를 어떻게 만들었든 관계없이 적용되는 중앙 집중식 제어를 쉽게 설정해 Amazon S3 리소스에 대한 공개 접근을 제한할 수 있어요.
Block Public Access 설정은 조직 수준(AWS Organizations 사용), 계정 수준, 버킷 및 액세스 포인트 수준 등 여러 수준에서 관리할 수 있어요. 공개 접근 차단 구성 방법은 공개 접근 차단 구성을 참고하세요.
Amazon S3가 버킷이나 객체에 대한 접근 요청을 받으면, 버킷이나 버킷 소유자의 계정에 block public access 설정이 적용되어 있는지 판단해요. 계정이 Block Public Access 정책이 있는 AWS Organizations의 일부라면 Amazon S3는 조직 수준 설정도 확인해요. 요청이 액세스 포인트를 통해 이루어졌다면 Amazon S3는 액세스 포인트에 대한 block public access 설정도 확인해요. 요청된 접근을 금지하는 기존 block public access 설정이 있으면 Amazon S3는 요청을 거부해요.
Amazon S3 Block Public Access는 4가지 설정을 제공해요. 이 설정들은 독립적이며 어떤 조합으로든 사용할 수 있어요. 각 설정은 액세스 포인트, 버킷, 또는 전체 AWS 계정에 적용할 수 있어요. 조직 수준에서는 4가지 설정이 모두 통합 정책으로 함께 적용돼요 — 개별 설정을 세밀하게 선택할 수는 없어요. 액세스 포인트, 버킷, 또는 계정의 block public access 설정이 다르다면 Amazon S3는 액세스 포인트, 버킷, 계정 설정 중 가장 제한적인 조합을 적용해요. 계정 수준 설정은 조직 수준 정책이 있으면 자동으로 상속하고, S3는 버킷 수준 설정과 유효한 계정 수준 설정 중 더 제한적인 정책을 적용해요. 예를 들어 조직에 Block Public Access 정책이 활성화되어 있지만 특정 버킷의 버킷 수준 Block Public Access가 비활성화되어 있어도, S3가 더 제한적인 조직/계정 수준 설정을 적용하므로 그 버킷은 여전히 보호돼요. 반대로 조직 정책이 비활성화되어 있어도 버킷의 Block Public Access가 활성화되어 있다면 그 버킷은 버킷 수준 설정으로 계속 보호돼요.
Amazon S3가 block public access 설정에 작업이 금지되는지 평가할 때, 조직 정책(계정 BPA 설정을 강제함)이나 액세스 포인트, 버킷, 또는 계정 설정을 위반하는 요청은 모두 거부해요.
중요
공개 접근은 access control list(ACL), 액세스 포인트 정책, 버킷 정책, 또는 이 모두를 통해 버킷과 객체에 부여돼요. 모든 Amazon S3 액세스 포인트, 버킷, 객체의 공개 접근이 차단되도록 하려면 계정에 대해 4가지 block public access 설정을 모두 켜는 것을 권장해요. 여러 계정을 관리하는 조직은 중앙 집중식 제어를 위해 조직 수준 Block Public Access 정책을 고려해 보세요. 또한 AWS Security Hub Foundational Security Best Practices 제어 S3.8을 준수하려면 각 버킷에 대해 4가지 설정을 모두 켜는 것도 권장해요. 이 설정들은 현재와 미래의 모든 버킷과 액세스 포인트에 대한 공개 접근을 차단해요.
이 설정을 적용하기 전에 애플리케이션이 공개 접근 없이도 올바르게 작동하는지 확인하세요. 버킷이나 객체에 어느 정도의 공개 접근이 필요하다면, 예를 들어 Amazon S3로 정적 웹사이트 호스팅에서 설명한 대로, 저장소 사용 사례에 맞게 개별 설정을 조정할 수 있어요.
Block Public Access를 활성화하면 S3 리소스에 직접 연결된 리소스 정책이나 access control list(ACL)를 통해 공개 접근이 부여되는 것을 방지해 리소스를 보호할 수 있어요. Block Public Access 활성화 외에도 다음 정책을 주의 깊게 검사해 공개 접근을 부여하지 않는지 확인하세요.
- 연결된 AWS 보안 주체(예: IAM 역할)에 연결된 신원 기반 정책
- 연결된 AWS 리소스(예: AWS Key Management Service(KMS) 키)에 연결된 리소스 기반 정책
참고
block public access 설정은 조직, 액세스 포인트, 버킷, AWS 계정에만 활성화할 수 있어요. Amazon S3는 객체별로 block public access 설정을 지원하지 않아요.
계정에 block public access 설정을 적용하면 설정이 모든 AWS 리전에 전역으로 적용돼요. 설정이 모든 리전에서 즉시 또는 동시에 적용되지 않을 수 있지만, 결국 모든 리전으로 전파돼요.
조직 수준 block public access 정책을 적용하면 선택한 멤버 계정에 자동으로 전파되고 계정 수준 설정을 재정의해요.
Block public access 설정
S3 Block Public Access는 4가지 설정을 제공해요. 이 설정들을 개별 액세스 포인트, 버킷, 또는 전체 AWS 계정에 어떤 조합으로든 적용할 수 있어요. 조직 수준에서는 "all" 또는 "none" 방식으로 4가지 설정을 모두 함께 활성화하거나 비활성화할 수만 있으며, 개별 설정에 대한 세밀한 제어는 불가능해요. 설정을 계정에 적용하면 그 계정이 소유한 모든 버킷과 액세스 포인트에 적용돼요. 계정 수준 설정은 조직 정책이 있으면 자동으로 상속해요. 마찬가지로 설정을 버킷에 적용하면 그 버킷과 연결된 모든 액세스 포인트에 적용돼요.
정책 상속과 적용은 다음과 같이 이루어져요.
- 조직 수준 정책은 멤버 계정에 자동으로 적용되어 기존 계정 수준 설정을 강제해요
- 계정 수준 설정은 조직 정책이 있으면 조직 정책을 상속하고, 조직 정책이 없으면 로컬로 구성된 설정을 사용해요
- 버킷 수준 설정은 독립적으로 작동하지만 적용 제한의 대상이 돼요. S3는 조직/계정 수준과 버킷 수준 설정 등 적용 가능한 모든 수준에서 가장 제한적인 조합을 적용해요. 즉 버킷은 계정(조직이 관리할 수 있음)의 기준 보호를 상속하지만, S3는 버킷 설정과 계정의 유효 설정 중 더 제한적인 구성을 적용해요.
다음 표에는 사용 가능한 설정이 들어 있어요.
이름
BlockPublicAcls
이 옵션을 TRUE로 설정하면 다음 동작이 발생해요.
- 지정된 access control list(ACL)가 공개적이면
PutBucketAcl및PutObjectAcl호출이 실패해요. - 요청에 공개 ACL이 포함되면
PutObject호출이 실패해요. - 이 설정이 계정에 적용되면 요청에 공개 ACL이 포함될 때 PUT Bucket 호출이 실패해요.
이 설정을 TRUE로 설정하면 지정된 작업이 실패해요(REST API, AWS CLI, AWS SDK를 통한 경우 모두). 하지만 버킷과 객체의 기존 정책과 ACL은 수정되지 않아요. 이 설정을 사용하면 버킷과 객체의 기존 정책과 ACL을 감사하거나, 개선하거나, 다른 방식으로 변경하면서 공개 접근으로부터 보호할 수 있어요.
참고
액세스 포인트에는 연결된 ACL이 없어요. 이 설정을 액세스 포인트에 적용하면 기본 버킷에 대한 패스스루 역할을 해요. 액세스 포인트에서 이 설정을 활성화하면, 실제로 버킷에 이 설정이 활성화되어 있든 없든 액세스 포인트를 통한 요청은 기본 버킷에 이 설정이 활성화된 것처럼 동작해요.
이름
IgnorePublicAcls
이 옵션을 TRUE로 설정하면 Amazon S3가 버킷과 그 안의 객체에 대한 모든 공개 ACL을 무시해요. 이 설정을 사용하면 공개 ACL이 포함된 PutObject 호출을 계속 허용하면서(공개 ACL이 포함된 PutObject 호출을 거부하는 BlockPublicAcls와 반대) ACL로 부여된 공개 접근을 안전하게 차단할 수 있어요. 이 설정을 활성화해도 기존 ACL의 지속성에는 영향을 주지 않으며 새 공개 ACL이 설정되는 것도 막지 않아요.
참고
액세스 포인트에는 연결된 ACL이 없어요. 이 설정을 액세스 포인트에 적용하면 기본 버킷에 대한 패스스루 역할을 해요. 액세스 포인트에서 이 설정을 활성화하면, 실제로 버킷에 이 설정이 활성화되어 있든 없든 액세스 포인트를 통한 요청은 기본 버킷에 이 설정이 활성화된 것처럼 동작해요.
이름
BlockPublicPolicy
버킷에 대해 이 옵션을 TRUE로 설정하면 지정된 버킷 정책이 공개 접근을 허용할 때 Amazon S3가 PutBucketPolicy 호출을 거부해요. 버킷에 대해 이 옵션을 TRUE로 설정하면 지정된 정책이 공개 접근을 허용할 때 버킷의 모든 동일 계정 액세스 포인트에 대한 PutAccessPointPolicy 호출도 거부해요.
액세스 포인트에 대해 이 옵션을 TRUE로 설정하면 지정된 정책(액세스 포인트 또는 기본 버킷에 대한 것)이 공개 접근을 허용할 때 액세스 포인트를 통해 이루어지는 PutAccessPointPolicy 및 PutBucketPolicy 호출을 Amazon S3가 거부해요.
이 설정을 사용하면 사용자가 액세스 포인트와 버킷 정책을 관리하되 버킷이나 그 안의 객체를 공개적으로 공유하지 못하게 할 수 있어요. 이 설정을 활성화해도 기존 액세스 포인트나 버킷 정책에는 영향을 주지 않아요.
중요
이 설정을 효과적으로 사용하려면 계정 수준에서 적용하는 것을 권장해요. 버킷 정책은 사용자가 버킷의 block public access 설정을 변경하도록 허용할 수 있어요. 따라서 버킷 정책을 변경할 권한이 있는 사용자는 버킷의 block public access 설정을 비활성화하도록 허용하는 정책을 삽입할 수 있어요. 이 설정이 특정 버킷이 아니라 계정 전체에 활성화되어 있다면, 사용자가 버킷 정책을 변경해 이 설정을 비활성화하더라도 Amazon S3는 공개 정책을 차단해요.
이름
RestrictPublicBuckets
이 옵션을 TRUE로 설정하면 공개 정책이 있는 액세스 포인트나 버킷에 대한 접근을 AWS 서비스 보안 주체와 버킷 소유자 계정 및 액세스 포인트 소유자 계정 안의 승인된 사용자로만 제한해요. 이 설정은 액세스 포인트나 버킷에 대한 모든 크로스 계정 접근을 차단하고(AWS 서비스 보안 주체 제외), 계정 안의 사용자가 액세스 포인트나 버킷을 계속 관리할 수 있게 해 줘요.
이 설정을 활성화해도 기존 액세스 포인트나 버킷 정책에는 영향을 주지 않아요. 다만 Amazon S3는 공개 액세스 포인트나 버킷 정책에서 파생된 공개 및 크로스 계정 접근을 차단해요. 여기에는 특정 계정에 대한 비공개 위임도 포함돼요.
중요
GetBucketAcl과GetObjectAcl호출은 항상 지정된 버킷이나 객체에 적용되는 유효 권한을 반환해요. 예를 들어 버킷에 공개 접근을 부여하는 ACL이 있지만 버킷에IgnorePublicAcls설정도 활성화되어 있다고 가정해 보세요. 이 경우GetBucketAcl은 버킷과 연결된 실제 ACL이 아니라 Amazon S3가 적용하는 접근 권한을 반영한 ACL을 반환해요.
Block public access 설정은 기존 정책이나 ACL을 변경하지 않아요. 따라서 block public access 설정을 제거하면 공개 정책이나 ACL이 있는 버킷이나 객체가 다시 공개적으로 접근 가능해져요.
조직 수준 공개 접근 차단 관리
조직 수준 block public access는 AWS Organizations 정책을 사용해 조직 전체에서 S3 공개 접근 제어를 중앙에서 관리해요. 활성화하면 이 정책이 선택한 계정에 자동으로 적용되고 개별 계정 수준 설정을 재정의해요.
조직 수준 공개 접근 차단에 대한 추가 정보는 AWS Organizations 사용자 가이드의 S3 정책을 참고하세요.
액세스 포인트에서 block public access 작업 수행
액세스 포인트에서 block public access 작업을 수행하려면 s3control AWS CLI 서비스를 사용하세요.
중요
액세스 포인트를 만든 뒤에는 액세스 포인트의 block public access 설정을 변경할 수 없어요. 액세스 포인트에 대한 block public access 설정은 액세스 포인트를 만들 때만 지정할 수 있어요.
"public"의 의미
ACL
Amazon S3는 버킷이나 객체 ACL이 미리 정의된 AllUsers 또는 AuthenticatedUsers 그룹의 멤버에게 어떤 권한을 부여하면 그 ACL을 공개적인 것으로 간주해요. 미리 정의된 그룹에 대한 자세한 내용은 Amazon S3 사전 정의 그룹을 참고하세요.
버킷 정책
버킷 정책을 평가할 때 Amazon S3는 먼저 정책이 공개적이라고 가정해요. 그런 다음 정책을 평가해 비공개로 간주할 수 있는지 판단해요. 비공개로 간주되려면 버킷 정책이 다음 중 하나 이상에 대해 고정 값(와일드카드나 AWS Identity and Access Management 정책 변수를 포함하지 않는 값)에만 접근을 부여해야 해요.
- AWS 보안 주체, 사용자, 역할, 또는 서비스 보안 주체(예:
aws:PrincipalOrgID) aws:SourceIp를 사용하는 Classless Inter-Domain Routings(CIDR) 블록 집합. CIDR에 대한 자세한 내용은 RFC Editor 웹사이트의 RFC 4632를 참고하세요.
참고
aws:SourceIp조건 키로 조건부 접근을 부여하는데 매우 넓은 IP 범위(예:0.0.0.0/1)를 사용하는 버킷 정책은 "공개"로 평가돼요. 여기에는 IPv4의/8보다 넓고 IPv6의/32보다 넓은 값(RFC1918 프라이빗 범위 제외)이 포함돼요. block public access는 이런 "공개" 정책을 거부하고 이미 이런 "공개" 정책을 사용 중인 버킷에 대한 크로스 계정 접근을 방지해요.
aws:SourceArnaws:SourceVpcaws:SourceVpceaws:SourceOwneraws:SourceAccount"AROLEID:*"패턴 밖의aws:userids3:DataAccessPointArn
참고
버킷 정책에서 이 값을 사용하면 계정 ID가 고정되어 있는 한 액세스 포인트 이름에 와일드카드를 포함해도 정책이 공개적으로 되지 않아요. 예를 들어
arn:aws:s3:us-west-2:123456789012:accesspoint/*에 대한 접근을 허용하면 us-west-2 리전의 계정 123456789012와 연결된 액세스 포인트에 접근을 허용하면서도 버킷 정책을 공개적으로 만들지 않아요. 이 동작은 액세스 포인트 정책과는 다르게요. 자세한 내용은 액세스 포인트를 참고하세요.
s3:DataAccessPointAccount
버킷 정책에 대한 자세한 내용은 Amazon S3용 버킷 정책을 참고하세요.
참고
다중 값 컨텍스트 키를 사용할 때는
ForAllValues또는ForAnyValue집합 연산자를 사용해야 해요.
예제: 공개 버킷 정책
이 규칙에 따라 다음 예제 정책은 공개적인 것으로 간주돼요.
{
"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"이 소유한 버킷에 다음이 포함된 정책이 있다고 가정해 보세요.
- AWS CloudTrail(AWS 서비스 보안 주체)에 대한 접근을 부여하는 문
- 계정 "Account-2"에 대한 접근을 부여하는 문
- 예를 들어 제한 조건 없는
"Principal": "*"를 지정해 공개에 접근을 부여하는 문
이 정책은 세 번째 문 때문에 공개적인 것으로 간주돼요. 이 정책이 있고 RestrictPublicBuckets가 활성화되어 있으면 Amazon S3는 CloudTrail에 의한 접근만 허용해요. 문 2가 공개적이지 않더라도 Amazon S3는 "Account-2"에 의한 접근을 비활성화해요. 문 3이 전체 정책을 공개적으로 만들기 때문에 RestrictPublicBuckets가 적용되기 때문이에요. 결과적으로 정책이 특정 계정인 "Account-2"에 접근을 위임하더라도 Amazon S3는 크로스 계정 접근을 비활성화해요. 하지만 정책에서 문 3을 제거하면 정책이 공개적으로 간주되지 않아 RestrictPublicBuckets가 더 이상 적용되지 않아요. 따라서 RestrictPublicBuckets를 활성화한 채로 두어도 "Account-2"는 버킷 접근 권한을 되찾아요.
액세스 포인트
Amazon S3는 액세스 포인트에 대한 block public access 설정을 버킷과는 약간 다르게 평가해요. Amazon S3가 액세스 포인트 정책이 언제 공개적인지 판단하는 데 적용하는 규칙은 버킷과 대체로 같아요. 다만 다음 상황은 예외예요.
- VPC 네트워크 오리진이 있는 액세스 포인트는 액세스 포인트 정책의 내용과 관계없이 항상 비공개로 간주돼요.
s3:DataAccessPointArn을 사용해 액세스 포인트 집합에 접근을 부여하는 액세스 포인트 정책은 공개적인 것으로 간주돼요. 이 동작은 버킷 정책과 다르다는 점에 유의하세요. 예를 들어arn:aws:s3:us-west-2:123456789012:accesspoint/*와 일치하는s3:DataAccessPointArn값에 접근을 부여하는 버킷 정책은 공개적인 것으로 간주되지 않아요. 하지만 같은 문을 액세스 포인트 정책에 넣으면 액세스 포인트가 공개적으로 돼요.
IAM Access Analyzer for S3로 공개 버킷 검토
IAM Access Analyzer for S3를 사용해 공개 접근을 부여하는 버킷 ACL, 버킷 정책, 또는 액세스 포인트 정책이 있는 버킷을 검토할 수 있어요. IAM Access Analyzer for S3는 인터넷의 누구에게나 또는 다른 AWS 계정(내 조직 밖의 AWS 계정 포함)에 접근을 허용하도록 구성된 버킷에 대해 알려 줘요. 각 공개 또는 공유 버킷에 대해 공개 또는 공유 접근의 원본과 수준을 보고하는 findings를 받게 돼요.
IAM Access Analyzer for S3에서 한 번의 클릭으로 버킷에 대한 모든 공개 접근을 차단할 수 있어요. 또한 버킷 수준 권한 설정을 드릴다운해 세밀한 수준의 접근을 구성할 수도 있어요. 공개 또는 공유 접근이 필요한 특정되고 확인된 사용 사례의 경우, 해당 버킷의 findings를 보관(archive)해 버킷을 공개 또는 공유 상태로 유지하려는 의도를 인정하고 기록할 수 있어요.
드물게 IAM Access Analyzer for S3와 Amazon S3 block public access 평가가 버킷이 공개적인지에 대해 다를 수 있어요. 이는 Amazon S3 block public access가 공개 접근을 평가하는 것 외에도 작업의 존재 여부에 대한 검증을 수행하기 때문이에요. 버킷 정책에 Amazon S3가 지원하지 않는 작업(예: s3:NotASupportedAction)에 대한 공개 접근을 허용하는 Action 문이 포함되어 있다고 가정해 보세요. 이 경우 Amazon S3 block public access는 그런 문이 나중에 작업이 지원되면 버킷을 공개적으로 만들 수 있으므로 버킷을 공개적인 것으로 평가해요. Amazon S3 block public access와 IAM Access Analyzer for S3의 평가가 다른 경우 버킷 정책을 검토하고 지원되지 않는 작업을 제거할 것을 권장해요.
IAM Access Analyzer for S3에 대한 자세한 내용은 IAM Access Analyzer for S3로 버킷 접근 검토를 참고하세요.
권한
Amazon S3 Block Public Access 기능을 사용하려면 다음 권한이 있어야 해요.
| 작업 (Operation) | 필요한 권한 (Required permissions) |
|---|---|
| GET bucket policy status | s3:GetBucketPolicyStatus |
| GET bucket Block Public Access settings | s3:GetBucketPublicAccessBlock |
| PUT bucket Block Public Access settings | s3:PutBucketPublicAccessBlock |
| DELETE bucket Block Public Access settings | s3:PutBucketPublicAccessBlock |
| GET account Block Public Access settings | s3:GetAccountPublicAccessBlock |
| PUT account Block Public Access settings | s3:PutAccountPublicAccessBlock |
| DELETE account Block Public Access settings | s3:PutAccountPublicAccessBlock |
| PUT access point Block Public Access settings | s3:CreateAccessPoint |
참고
DELETE 작업은 PUT 작업과 동일한 권한을 요구해요. DELETE 작업에 대한 별도의 권한은 없어요.
공개 접근 차단 구성
내 AWS 계정, 내 Amazon S3 버킷, 내 액세스 포인트에 대한 공개 접근 차단 구성에 대한 자세한 내용은 다음 주제를 참고하세요.
출처: 문서
본문
Block public access settings (공개 접근 차단 설정)
4가지 설정(BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets)이 적용 방식과 상속 규칙을 설명했어요. 설정은 독립적이고 어떤 조합으로든 사용할 수 있으며, 조직·계정·버킷·액세스 포인트 수준에서 적용돼요.