버킷 정책 예제
Amazon S3 버킷 정책을 사용하면 적절한 권한을 가진 사용자만 객체에 액세스할 수 있도록 하여 버킷의 객체 액세스를 보호할 수 있습니다. 인증받은 사용자라도 적절한 권한이 없다면 Amazon S3 리소스에 액세스하지 못하게 할 수도 있습니다.
이 섹션에서는 버킷 정책의 일반적인 사용 사례에 대한 예제를 제시합니다. 이러한 샘플 정책은 리소스 값으로
를 사용합니다. 이러한 정책을 테스트하려면 DOC-EXAMPLE-BUCKET
를 (귀하의 버킷 이름 등) 자체 정보로 대체합니다.user input placeholders
객체 집합으로의 권한을 부여 또는 거부하려면 Amazon 리소스 이름(ARN) 및 기타 값에 와일드카드 문자(*
)를 사용하면 됩니다. 예를 들어, 공통 접두사로 시작하거나 .html
과 같은 지정된 확장자로 끝나는 객체 그룹에 대한 액세스를 제어할 수 있습니다.
버킷 정책에 대한 자세한 내용은 버킷 정책 사용 단원을 참조하세요. AWS Identity and Access Management(IAM) 정책 언어에 대한 자세한 내용은 Amazon S3의 정책 및 권한를 참조하세요.
Amazon S3 콘솔을 사용하여 권한을 테스트할 경우 콘솔이 요구하는 추가 권한 즉, s3:ListAllMyBuckets
, s3:GetBucketLocation
및 s3:ListBucket
을 부여해야 합니다. 콘솔을 사용하여 사용자에게 권한을 부여하고 해당 권한을 테스트하는 방법에 대한 예제는 사용자 정책을 사용하여 버킷에 대한 액세스 제어을 참조하세요.
주제
암호화 필요
버킷에 쓰는 모든 객체에 SSE-KMS 필요
다음 예제 정책에서는 버킷에 쓰는 모든 객체가 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS)로 암호화되어야 합니다. 객체가 SSE-KMS로 암호화되지 않은 경우, 요청이 거부됩니다.
{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "
DenyObjectsThatAreNotSSEKMS
", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "true" } } }] }
버킷에 쓰는 모든 객체에 특정 AWS KMS key를 사용하는 SSE-KMS 필요
다음 예제 정책에서는 객체가 특정 KMS 키 ID를 사용한 SSE-KMS로 암호화되지 않았다면 버킷에 써지지 않도록 거부합니다. 요청별 헤더 또는 버킷 기본 암호화를 사용하여 객체가 SSE-KMS로 암호화되었더라도 지정된 KMS 키로 암호화되지 않았다면 버킷에 쓸 수 없습니다. 이 예제에 사용된 KMS 키 ARN은 자체 KMS 키 ARN으로 대체하세요.
{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "
DenyObjectsThatAreNotSSEKMSWithSpecificKey
", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*", "Condition": { "ArnNotEqualsIfExists": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-2
:111122223333
:key/01234567-89ab-cdef-0123-456789abcdef
" } } }] }
준비된 ACL을 사용한 버킷 관리
여러 계정에 객체를 업로드하거나 객체 ACL을 공개 액세스 가능으로 설정할 수 있는 권한 부여
다음 정책 예제는 s3:PutObject
및 s3:PutObjectAcl
권한을 여러 AWS 계정에 부여하고, 이러한 작업에 대한 요청에 public-read
표준 액세스 제어 목록(ACL)을 반드시 포함하도록 요구합니다. 자세한 정보는 Amazon S3 작업 및 Amazon S3 조건 키 예 섹션을 참조하세요.
public-read
준비된 ACL을 사용하면 전 세계 누구나 버킷 내의 객체를 볼 수 있습니다. Amazon S3 버킷에 대한 익명 액세스 권한을 부여하거나 퍼블릭 액세스 차단 설정을 사용 중지할 때 주의하세요. 익명 액세스 권한을 부여하면 전 세계 누구나 버킷에 액세스할 수 있습니다. 정적 웹 사이트 호스팅용과 같이 특별히 필요한 경우가 아니면 Amazon S3 버킷에 익명 액세스 권한을 부여하지 않는 것이 좋습니다. 정적 웹 사이트 호스팅에 대한 퍼블릭 액세스 차단 설정을 활성화하려면 자습서: Amazon S3에서 정적 웹 사이트 구성을 참조하세요.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPublicReadCannedAcl", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
111122223333
:root", "arn:aws:iam::444455556666
:root" ] }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": [ "public-read" ] } } } ] }
버킷 소유자가 완벽하게 제어할 수 있도록 보증하면서 객체에 업로드하는 크로스 계정 권한 부여
다음 예에서는 업로드된 객체를 완전히 제어하면서 다른 AWS 계정이 버킷에 객체를 업로드하도록 허용하는 방법을 보여줍니다. 이 정책은 특정 AWS 계정(
)이 업로드 시 111122223333
bucket-owner-full-control
이라는 표준 ACL을 포함하고 있는 경우에만 객체를 업로드할 수 있는 권한을 부여합니다. 정책의 StringEquals
조건은 준비된 ACL 요구 사항을 표현하도록 s3:x-amz-acl
조건 키를 지정합니다. 자세한 내용은 Amazon S3 조건 키 예 섹션을 참조하세요.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"
111122223333
"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }
객체 태깅을 통한 객체 액세스 관리
사용자가 특정 태그 키 및 값이 있는 객체만 읽도록 허용
다음 권한 정책은 environment: production
태그 키 및 값이 있는 객체만 사용자가 읽을 수 있도록 제한합니다. 이 정책은 s3:ExistingObjectTag
조건 키를 사용하여 태그 키 및 값을 지정합니다.
{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::
111122223333
:role/JohnDoe
" "Effect": "Allow", "Action": ["s3:GetObject","s3:GetObjectVersion"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*", ] } "Condition": { "StringEquals": {"s3:ExistingObjectTag/environment": "production" } } } ] }
사용자가 추가할 수 있는 객체 태그 키 제한
다음 권한 정책은 s3:PutObjectTagging
작업을 수행할 수 있는 권한을 사용자에게 부여하여, 사용자가 기존 객체에 태그를 추가할 수 있게 합니다. 조건이 s3:RequestObjectTagKeys
조건 키를 사용하여 Owner
, CreationDate
등의 허용 태그 키 세트를 지정합니다. 자세한 내용은 IAM 사용 설명서의 다수의 키 또는 값을 사용하는 조건 생성을 참조하세요.
요청에 지정된 모든 태그 키가 인증된 태그 키임을 정책이 보장합니다. 지정된 값 중 최소 1개가 요청에 존재함을 조건 내의 ForAnyValue
한정자가 보장합니다.
{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::
111122223333
:role/JohnDoe
" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" ], "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }
사용자가 객체 태그를 추가할 수 있게 하려면 특정 태그 키 및 값 필요
다음 권한 정책은 s3:PutObjectTagging
작업을 수행할 수 있는 권한을 사용자에게 부여하여, 사용자가 기존 객체에 태그를 추가할 수 있게 합니다. 이 조건은 값이
로 설정된 (X
등의) 특정 태그 키를 포함하도록 사용자에게 요구합니다.Project
{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::
111122223333
:user/JohnDoe
" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" ], "Condition": {"StringEquals": {"s3:RequestObjectTag/Project
": "X
" } } } ] }
사용자가 특정 객체 태그 키 및 값이 있는 객체만 추가하도록 허용
다음 예제 정책은 s3:PutObject
작업을 수행할 권한을 사용자에게 부여하여, 객체를 버킷에 추가할 수 있게 합니다. 하지만 Condition
문은 업로드된 객체에 허용된 태그 키와 값만 사용할 수 있도록 제한합니다. 이 예제에서는 값이
로 설정된 특정 태그 키(Finance
)가 있는 객체만 사용자가 버킷에 추가할 수 있습니다.Department
{ "Version": "2012-10-17", "Statement": [{ "Principal":{ "AWS":[ "arn:aws:iam::
111122223333
:user/JohnDoe
" ] }, "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Department
": "Finance
" } } }] }
전역 조건 키를 사용한 객체 액세스 관리
전역 조건 키는 aws
접두사가 있는 조건 키입니다. AWS 서비스는 전역 조건 키나, 서비스 접두사가 포함된 서비스별 키를 지원할 수 있습니다. JSON 정책의 Condition
요소를 사용하면 요청 컨텍스트의 키를 정책에서 지정한 키 값과 비교할 수 있습니다.
Amazon S3 서버 액세스 로그 전달로 액세스 제한
다음 예제 버킷 정책에서는 aws:SourceArn 전역 조건 키를 사용하여, 서비스 대 서비스 요청을 하는 리소스의 Amazon 리소스 이름(ARN)을 정책 내에 지정된 ARN과 비교합니다. aws:SourceArn
전역 조건 키는 서비스 간 트랜잭션 중에 Amazon S3 서비스가 혼동된 대리자로 사용되는 것을 방지하는 용도로 사용됩니다. Amazon S3 서비스만 Amazon S3 버킷에 객체를 추가할 수 있습니다.
이 예제 버킷 정책은 로깅 서비스 보안 주체(logging.s3.amazonaws.com
)에만 s3:PutObject
권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "
AllowPutObjectS3ServerAccessLogsPolicy
", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs
/*", "Condition": { "StringEquals": { "aws:SourceAccount": "111111111111
" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::EXAMPLE-SOURCE-BUCKET
" } } }, { "Sid": "RestrictToS3ServerAccessLogs
", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs
/*", "Condition": { "ForAllValues:StringNotEquals": { "aws:PrincipalServiceNamesList": "logging.s3.amazonaws.com" } } } ] }
내가 속한 조직에만 액세스 허용
리소스에 액세스하는 모든 IAM 보안 주체가 귀하가 속한 조직 내 AWS 계정(AWS Organizations 관리 계정 포함)에 속하도록 요구하려면 aws:PrincipalOrgID
전역 조건 키를 사용하면 됩니다.
이 유형의 액세스를 부여하거나 제한하려면 aws:PrincipalOrgID
조건을 정의하고 버킷 정책에서 해당 값을 귀하의 조직 ID로 설정합니다. 조직 ID는 버킷에 대한 액세스를 제어하는 데 사용됩니다. aws:PrincipalOrgID
조건을 사용하면, 조직에 새로 추가된 모든 계정에도 버킷 정책에서 설정된 권한이 적용됩니다.
다음은 귀하의 조직 내 특정 IAM 보안 주체에게 버킷의 직접 액세스를 부여하는 데 사용할 수 있는 리소스 기반 버킷 정책의 예제입니다. 버킷 정책에 aws:PrincipalOrgID
글로벌 조건 키를 추가하면, 보안 주체 계정이 귀하의 조직에 속해야만 리소스에 액세스할 수 있습니다. 액세스 권한을 부여할 때 실수로 잘못된 계정을 지정하더라도 aws:PrincipalOrgID 글로벌 조건 키가 추가 보호 장치 역할을 합니다. 이 글로벌 키가 정책 내에 사용되면 지정된 조직 외부의 보안 주체는 누구든 Amazon S3 버킷에 액세스할 수 없습니다. 목록에 있는 조직에 속한 계정의 보안 주체만 리소스에 액세스할 수 있습니다.
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowGetObject", "Principal": { "AWS": "*" }, "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": ["o-aa111bb222
"] } } }] }
특정 IP 주소 기반 액세스 관리
액세스를 특정 IP 주소로 제한
다음 예제에서는 지정된 IP 주소 범위에서 요청된 것이 아닌 한, 어떤 사용자도 지정된 버킷 내의 객체에 Amazon S3 작업을 수행하지 못하도록 거부합니다.
이 정책의 Condition
문은
주소가 IPv4(인터넷 프로토콜 버전 4) IP 주소 허용 범위에 속하는지 식별합니다.192.0.2.0/24
Condition
블록은 AWS 전체 조건 키인 NotIpAddress
및 aws:SourceIp
조건 키를 사용합니다. aws:SourceIp
조건 키는 퍼블릭 IP 주소 범위에만 사용할 수 있습니다. 이러한 조건 키에 대한 자세한 내용은 Amazon S3 조건 키 예을 참조하십시오. aws:SourceIp
IPv4 값은 표준 CIDR 표기법을 사용합니다. 자세한 내용은 IAM 사용 설명서의 IAM JSON 정책 요소 참조를 참조하십시오.
이 정책을 사용하기 전에 이 예제의
IP 주소 범위를 사용 사례에 적합한 값으로 바꿉니다. 그렇지 않으면 버킷에 액세스할 수 없습니다.192.0.2.0/24
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1
/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "192.0.2.0/24
" } } } ] }
IPv4 및 IPv6 주소 모두 허용
IPv6 주소를 사용하고자 할 때는 기존 IPv4 범위 외에도 IPv6 주소 범위를 포함하도록 조직의 모든 정책을 업데이트하는 것이 좋습니다. 이렇게 하면 IPv6으로 전환하는 중에도 정책이 계속 기능합니다.
다음 버킷 정책 예제에서는 IPv4 및 IPv6 주소 범위를 혼합하여 조직의 유효 IP 주소를 모두 표현하는 방법을 보여 줍니다. 이 정책 예에서는 IP 주소 예제
및 192.0.2.1
에 대한 액세스를 허용하며, 주소 2001:DB8:1234:5678::1
및 203.0.113.1
에 대한 액세스는 거부합니다.2001:DB8:1234:5678:ABCD::1
aws:SourceIp
조건 키는 퍼블릭 IP 주소 범위에만 사용할 수 있습니다. aws:SourceIp
에 대한 IPv6 값은 표준 CIDR 형식이어야 합니다. IPv6의 경우 0의 범위를 나타내기 위해 ::
을 사용할 수 있습니다(예: 2001:DB8:1234:5678::/64
). 자세한 내용은 IAM 사용 설명서의 IP 주소 조건 연산자를 참조하십시오.
이 정책을 사용하기 전에 이 예제의 IP 주소 범위를 사용 사례에 적합한 값으로 바꾸세요. 그렇지 않으면 버킷에 액세스할 수 없습니다.
{ "Id": "PolicyId2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIPmix", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1
/*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24
", "2001:DB8:1234:5678::/64
" ] }, "NotIpAddress": { "aws:SourceIp": [ "203.0.113.0/24
", "2001:DB8:1234:5678:ABCD::/80
" ] } } } ] }
HTTP 또는 HTTPS 요청 기반 액세스 관리
HTTPS 요청으로만 액세스 제한
잠재적인 공격자가 네트워크 트래픽을 조작하지 못하도록 하려면, HTTPS(TLS)를 사용하여 암호화된 연결만 허용하고 HTTP 요청은 버킷에 액세스하지 못하도록 제한하면 됩니다. 요청이 HTTP인지 HTTPS인지 확인하려면 S3 버킷 정책에서 aws:SecureTransport 글로벌 조건 키를 사용합니다. aws:SecureTransport
조건 키는 요청이 HTTP를 사용하여 전송되었는지 여부를 확인합니다.
요청이 true
로 반환되면 HTTP를 통해 전송된 요청입니다. 요청이 false
로 반환되면 HTTPS를 통해 전송된 요청입니다. 그러면 원하는 요청 체계에 기반하여 버킷에 액세스를 허용하거나 거부하면 됩니다.
다음 예제에서는 HTTP 요청에 버킷 정책이 액세스를 명시적으로 거부합니다.
{ "Version": "2012-10-17", "Statement": [{ "Sid": "RestrictToTLSRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1
/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } }, "Principal": "*" }] }
특정 HTTP 리퍼러로 액세스 제한
도메인 이름이
또는 www.example.com
인 웹 사이트에, 이름이 example.com
인 버킷에 저장된 사진과 동영상 링크가 포함되어 있다고 가정합니다. 기본적으로 모든 Amazon S3 리소스는 비공개이므로 리소스를 만든 AWS 계정만 이 리소스에 액세스할 수 있습니다.DOC-EXAMPLE-BUCKET
웹 사이트에서 이들 객체에 대한 읽기 권한을 허용하려면, GET
요청이 특정 웹 페이지에서 출발한 경우에 한해 s3:GetObject
권한을 허용하는 버킷 정책을 추가하면 됩니다. 다음 정책은 StringLike
조건과 aws:Referer
조건 키를 사용하여 요청을 제한합니다.
{ "Version":"2012-10-17", "Id":"HTTP referer policy example", "Statement":[ { "Sid":"Allow only GET requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*
","http://example.com/*
"]} } } ] }
사용하는 브라우저에는 요청의 HTTP referer
헤더가 포함되어야 합니다.
aws:Referer
조건 키를 사용할 때 주의하는 것이 좋습니다. 공개적으로 알려진 HTTP 참조자 헤더 값을 포함하는 것은 위험합니다. 권한이 없는 사용자가 수정된 브라우저나 사용자 지정 브라우저를 사용하여 원하는 aws:Referer
값을 제공할 수 있습니다. 따라서 승인되지 않은 당사자가 직접 AWS 요청을 하지 못하도록 aws:Referer
를 사용하지 마세요.
aws:Referer
조건 키는 고객이 Amazon S3에 저장된 콘텐츠 등의 디지털 콘텐츠를 권한이 없는 서드 파티 사이트에서 참조하지 못하도록 보호하기 위해서만 제공됩니다. 자세한 내용은 IAM 사용 설명서에서 aws:Referer 섹션을 참조하세요.
특정 폴더에 대한 사용자 액세스 관리
사용자에게 특정 폴더 액세스 부여
사용자에게 특정 폴더에 대한 액세스 권한을 부여하려고 한다고 가정합니다. IAM 사용자와 S3 버킷이 동일한 AWS 계정에 속한 경우, IAM 정책을 사용하여 사용자에게 특정 버킷 폴더에 대한 액세스 권한을 부여할 수 있습니다. 이 접근법을 사용하면 액세스 권한을 부여하기 위해 버킷 정책을 업데이트하지 않아도 됩니다. 여러 사용자가 전환할 수 있는 IAM 역할에 IAM 정책을 추가할 수 있습니다.
IAM ID와 S3 버킷이 다른 AWS 계정에 속해 있다면 IAM 정책과 버킷 정책 모두에 크로스 계정 액세스를 부여해야 합니다. 크로스 계정 액세스 부여에 대한 자세한 내용은 버킷 소유자가 크로스 계정 버킷 권한 부여를 참조하세요.
다음 예제 버킷 정책은
콘솔 전체 액세스 권한을 자신의 폴더(JohnDoe
home/
)에만 부여합니다. JohnDoe
/home
폴더를 만들고 사용자에게 적절한 권한을 부여하면, 여러 명의 사용자가 하나의 버킷을 공유하도록 할 수 있습니다. 이 정책은 다음 세 가지 Allow
문으로 구성됩니다.
-
: 사용자(AllowRootAndHomeListingOfCompanyBucket
)가JohnDoe
버킷의 루트 수준 및DOC-EXAMPLE-BUCKET
home
폴더에 있는 객체를 나열할 수 있도록 허용합니다. 이 문은 사용자가 콘솔을 사용하여 접두사home/
를 검색할 수 있게 하기도 합니다. -
: 사용자(AllowListingOfUserFolder
)가JohnDoe
home/
폴더와 그 모든 하위 폴더에 있는 모든 객체를 나열할 수 있도록 허용합니다.JohnDoe
/ -
:AllowAllS3ActionsInUserFolder
Read
,Write
,Delete
권한을 부여하여 사용자가 모든 Amazon S3 작업을 수행할 수 있도록 허용합니다. 권한은 버킷 소유자의 홈 폴더로 제한됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "
AllowRootAndHomeListingOfCompanyBucket
", "Principal": { "AWS": [ "arn:aws:iam::111122223333
:user/JohnDoe
" ] }, "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET
"], "Condition": { "StringEquals": { "s3:prefix": ["", "home/", "home/JohnDoe
"], "s3:delimiter": ["/"] } } }, { "Sid": "AllowListingOfUserFolder
", "Principal": { "AWS": [ "arn:aws:iam::111122223333
:user/JohnDoe
" ] }, "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET
"], "Condition": { "StringLike": { "s3:prefix": ["home/JohnDoe
/*"] } } }, { "Sid": "AllowAllS3ActionsInUserFolder
", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333
:user/JohnDoe
" ] }, "Action": ["s3:*"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET
/home/JohnDoe
/*"] } ] }
액세스 로그에 액세스 관리
액세스 로그를 활성화할 수 있도록 Application Load Balancer 액세스 권한 부여
Application Load Balancer에 액세스 로그를 활성화할 때는 로드 밸런서가 로그를 저장할 S3 버킷의 이름을 지정해야 합니다. 버킷에 액세스 로그를 쓸 수 있으려면 Elastic Load Balancing 권한을 부여하는 연결된 정책이 버킷에 있어야 합니다.
다음 예제에서는 버킷 정책이 Elastic Load Balancing(ELB) 권한을 부여하여 액세스 로그를 버킷에 쓸 수 있도록 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::
elb-account-id
:root" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1
/prefix
/AWSLogs/111122223333
/*" } ] }
는 귀하의 AWS 리전에 해당하는 Elastic Load Balancing용 AWS 계정 ID로 대체합니다. Elastic Load Balancing 리전 목록은 Elastic Load Balancing 사용 설명서의 Attach a policy to your Amazon S3 bucket(정책을 Amazon S3 버킷에 연결)을 참조하세요.elb-account-id
귀하의 AWS 리전이 지원되는 Elastic Load Balancing 리전 목록에 보이지 않으면, 지정된 로그 전달 서비스에 권한을 부여하는 다음 정책을 사용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3::
DOC-EXAMPLE-BUCKET
/prefix
/AWSLogs/111122223333
/*" } ] }
그런 다음, Elastic Load Balancing 액세스 로그를 활성화하여 구성합니다. 테스트 파일을 생성하면 버킷 권한을 확인할 수 있습니다.
Amazon CloudFront OAI에 대한 액세스 관리
Amazon CloudFront OAI에 대한 권한 부여
다음 예제 버킷 정책은 CloudFront 오리진 액세스 ID(OAI) 권한을 부여하여 S3 버킷에서 모든 객체를 가져옵니다(읽습니다). CloudFront OAI를 사용하면 사용자가 Amazon S3이 아니라 CloudFront를 통해 버킷의 객체에 액세스하도록 허용할 수 있습니다. 자세한 내용은 Amazon CloudFront 개발자 안내서의 Amazon S3 오리진에 대한 액세스 제한을 참조하세요.
다음 정책은 OAI의 ID를 정책의 Principal
로 사용합니다. S3 버킷 정책을 사용하여 CloudFront OAI에 대한 액세스 권한을 부여하는 방법에 대한 자세한 내용은 Amazon CloudFront 개발자 안내서의 오리진 액세스 ID(OAI)에서 오리진 액세스 제어(OAC)로 마이그레이션을 참조하세요.
이 예제 사용
-
를 OAI의 ID로 대체합니다. OAI의 ID를 찾으려면 CloudFront 콘솔에서 Origin Access Identity pageEH1HDMB1FH2TC
(오리진 액세스 ID 페이지)를 확인하거나 CloudFront API에서 ListCloudFrontOriginAccessIdentities를 사용합니다. -
을 버킷의 이름으로 바꿉니다.DOC-EXAMPLE-BUCKET
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity
EH1HDMB1FH2TC
" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" } ] }
Amazon S3 스토리지 렌즈 액세스 관리
Amazon S3 스토리지 렌즈 권한 부여
S3 스토리지 렌즈는 지표를 집계하고 Amazon S3 콘솔 버킷 페이지의 계정 스냅샷 섹션에 이 정보를 표시합니다. S3 스토리지 렌즈는 또한 인사이트와 추세를 시각화하고, 이상치에 플래그를 지정하고, 스토리지 비용 최적화와 데이터 보호 모범 사례 적용을 위한 권장 사항을 수신하는 데 사용할 수 있는 대화형 대시보드를 제공합니다. 대시보드에 있는 드릴다운 옵션을 통해 조직, 계정, 버킷, 객체 또는 접두사 수준에서 인사이트를 생성할 수 있습니다. 또한 하루에 한 번 지표를 CSV 또는 Parquet 형식으로 내보내서 S3 버킷으로 전송할 수 있습니다.
S3 스토리지 렌즈에서 집계된 스토리지 사용량 지표를 Amazon S3 버킷으로 내보내면 추가로 분석할 수 있습니다. S3 Storage Lens가 지표 내보내기를 배치하는 버킷을 대상 버킷이라고 합니다. S3 Storage Lens 지표 내보내기를 설정할 때 대상 버킷에 대한 버킷 정책이 있어야 합니다. 자세한 내용은 Amazon S3 Storage Lens를 사용하여 스토리지 활동 및 사용량 평가 섹션을 참조하세요.
다음 예시 버킷 정책은 대상 버킷에 객체(PUT
요청)를 쓸 수 있는 권한을 Amazon S3에 부여합니다. S3 Storage Lens 지표 내보내기를 설정할 때는 대상 버킷에 이와 같은 버킷 정책을 사용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3StorageLensExamplePolicy", "Effect": "Allow", "Principal": { "Service": "storage-lens.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
destination-bucket
/destination-prefix
/StorageLens/111122223333
/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "111122223333
", "aws:SourceArn": "arn:aws:s3:region-code
:111122223333
:storage-lens/storage-lens-dashboard-configuration-id
" } } } ] }
S3 스토리지 렌즈 조직 수준 지표 내보내기를 설정할 때, 이전 버킷 정책의 Resource
문을 다음과 같이 수정합니다.
"Resource": "arn:aws:s3:::
destination-bucket
/destination-prefix
/StorageLens/your-organization-id
/*",
S3 인벤토리, S3 분석 및 S3 인벤토리 보고서 권한 관리
S3 인벤토리 및 S3 분석 권한 부여
S3 인벤토리는 버킷 내에 객체 목록을 생성하고, S3 분석 스토리지 클래스 분석 내보내기는 분석에서 사용되는 데이터의 출력 파일을 생성합니다. 인벤토리가 객체를 열거하는 버킷을 원본 버킷이라고 합니다. 인벤토리 파일 또는 분석 내보내기 파일이 작성되는 버킷을 대상 버킷이라고 합니다. 인벤토리 또는 분석 내보내기를 설정할 때는 대상 버킷의 버킷 정책을 생성해야 합니다. 자세한 내용은 Amazon S3 인벤토리 및 Amazon S3 분석 - 스토리지 클래스 분석 섹션을 참조하세요.
다음 버킷 정책 예는 원본 버킷의 계정에서 대상 버킷에 객체를 쓸 수 있는 Amazon S3 권한(PUT
요청)을 부여합니다. S3 인벤토리와 S3 분석 내보내기를 설정할 때는 대상 버킷에서 이와 같은 버킷 정책을 사용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "InventoryAndAnalyticsExamplePolicy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
DOC-EXAMPLE-DESTINATION-BUCKET
/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET
" }, "StringEquals": { "aws:SourceAccount": "111122223333
", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
인벤토리 보고서에 대한 액세스 제한
Amazon S3 인벤토리는 S3 버킷 내 객체들의 목록과 각 객체의 메타데이터를 생성합니다. s3:PutInventoryConfiguration
권한을 통해 사용자는 사용 가능한 모든 객체 메타데이터 필드를 포함하는 인벤토리 보고서를 생성하고 인벤토리를 저장할 대상 버킷을 지정할 수 있습니다. 대상 버킷의 객체에 대한 읽기 권한이 있는 사용자는 인벤토리 보고서에서 사용할 수 있는 모든 객체 메타데이터 필드에 액세스할 수 있습니다. S3 인벤토리에서 사용 가능한 메타데이터 필드에 대한 자세한 내용은 Amazon S3 인벤토리 목록 섹션을 참조하세요.
사용자가 사용 가능한 모든 객체 메타데이터에 대한 S3 인벤토리 보고서를 구성하지 못하도록 제한하려면 해당 사용자의 s3:PutInventoryConfiguration
권한을 제거하세요.
사용자가 대상 버킷의 S3 인벤토리 보고서에 액세스하지 못하도록 제한하려면 대상 버킷에서 다음 예와 같은 버킷 정책을 추가합니다. 이 예제 버킷 정책은 사용자
를 제외한 모든 보안 주체가 대상 버킷 Ana
내 인벤토리 보고서DOC-EXAMPLE-DESTINATION-BUCKET
에 액세스하지 못하도록 거부합니다.DOC-EXAMPLE-DESTINATION-BUCKET-INVENTORY
{ "Id": "GetObjectPolicy", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowListBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::
DOC-EXAMPLE-DESTINATION-BUCKET
", "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET
/*" ], "Principal": { "AWS": [ "arn:aws:iam::111122223333
:user/Ana
" ] } }, { "Sid": "AllowACertainUserToReadObject", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/DOC-EXAMPLE-DESTINATION-BUCKET-INVENTORY
/*", "Principal": { "AWS": [ "arn:aws:iam::111122223333
:user/Ana
" ] } }, { "Sid": "DenyAllTheOtherUsersToReadObject", "Action": [ "s3:GetObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/DOC-EXAMPLE-DESTINATION-BUCKET-INVENTORY
/*", "Principal": { "AWS": "*" }, "Condition": { "ArnNotEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333
:user/Ana
" } } } ] }
MFA 필요
Amazon S3은 Amazon S3 리소스에 액세스하기 위해 멀티 팩터 인증(MFA)을 적용할 수 있는 기능인 MFA 보호 API 액세스를 지원합니다. 멀티 팩터 인증은 AWS 환경에 적용할 수 있는 추가 보안 레벨을 제공합니다. MFA는 사용자가 유효한 MFA 코드를 제공하여 MFA 디바이스를 물리적으로 가지고 있음을 증명하게 하는 보안 기능입니다. 자세한 내용은 AWS 멀티 팩터 인증
MFA가 필요하도록 강제하려면 버킷 정책 내에 aws:MultiFactorAuthAge
조건 키를 사용합니다. IAM 사용자는 AWS Security Token Service(AWS STS)에서 발급한 임시 보안 인증을 사용하여 Amazon S3 리소스에 액세스할 수 있습니다. AWS STS 요청 시 MFA 코드를 제공합니다.
멀티 팩터 인증을 사용한 요청을 Amazon S3가 수신하면 얼마나 오래 전(초 단위)에 임시 보안 인증이 생성되었는지를 aws:MultiFactorAuthAge
조건 키가 숫자 값으로 제공합니다. 요청 시 제공된 임시 자격 증명이 MFA 디바이스를 사용하여 만들어진 경우 이 키 값은 null(없음)입니다. 버킷 정책에서는 다음 예시에서 나온 것처럼 이 값을 확인할 수 있는 조건을 추가할 수 있습니다.
이 예에서 MFA를 사용하여 요청이 인증되지 않으면 정책은
버킷의 /taxdocuments
폴더에서 모든 Amazon S3 작업을 거부합니다. MFA에 대한 자세한 내용은 IAM 사용 설명서의 AWS에서 멀티 팩터 인증(MFA) 사용을 참조하세요.DOC-EXAMPLE-BUCKET
{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/taxdocuments
/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }
Condition
블록의 Null
조건이 true
로 평가되려면 aws:MultiFactorAuthAge
조건 키 값이 null이 되어 요청 시 임시 보안 인증이 MFA 디바이스 없이 만들어졌음을 나타내야 합니다.
다음 버킷 정책은 이전 버킷 정책을 확장한 것입니다. 이 버킷 정책에는 두 가지 정책 명령문이 포함됩니다. 하나의 문은 모든 사용자에게 버킷(
)에 대한 DOC-EXAMPLE-BUCKET
s3:GetObject
권한을 허용합니다. 다른 문은 버킷의
폴더에 액세스할 때 MFA를 요구함으로써 액세스를 제한합니다.DOC-EXAMPLE-BUCKET
/taxdocuments
{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/taxdocuments
/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" } ] }
aws:MultiFactorAuthAge
키가 유효한 기간을 제한하는 숫자 조건을 사용해도 됩니다. aws:MultiFactorAuthAge
키로 지정된 기간은 요청을 인증하는 데 사용되는 임시 보안 인증의 수명 주기와 무관합니다.
예를 들어, 다음 버킷 정책은 MFA 인증 요구 이외에도 임시 세션이 얼마 전에 생성되었는지도 확인합니다. aws:MultiFactorAuthAge
키 값이 임시 세션이 1시간(3,600초) 전에 생성되었음을 나타낼 경우 해당 정책은 모든 작업을 거부합니다.
{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/taxdocuments
/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/taxdocuments
/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" } ] }