IAM 사용자 정책을 사용하여 Amazon Simple Storage Service(Amazon S3) 버킷 내 특정 폴더에 대한 액세스를 제한하려고 합니다.
간략한 설명
AWS Identity and Access Management(IAM) 사용자 정책을 사용하여 Amazon S3 버킷의 특정 폴더에 대한 액세스 권한을 가진 사용자를 제어할 수 있습니다.
해결 방법
단일 사용자 정책 - 이 예제 정책을 사용하면 특정 IAM 사용자가 버킷의 첫 번째 수준에서 특정 폴더를 확인한 다음, 원하는 폴더 및 하위 폴더의 객체에 대해 작업을 수행할 수 있습니다. 이 예제에서는 David라는 IAM 사용자와 다음의 구조를 지닌 my-company라는 버킷을 사용합니다.
/home/Adele/ /home/Bob/ /home/David/ /restricted/ /root-file.txt
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::my-company/home/David/*"]
}
]
}
Amazon S3 콘솔은 특수 문자로 슬래시(/)를 사용하여 폴더의 객체를 나타냅니다. 접두사(s3:prefix)와 구분 기호 (s3:delimiter)는 폴더의 객체를 구성하고 찾아볼 때 유용합니다.
다중 사용자 정책 - 일부 경우, 정책을 작성할 때 리소스의 정확한 이름을 알지 못할 수도 있습니다. 예를 들어, 이전 예제처럼 모든 사용자가 Amazon S3 버킷에 자체 객체를 가지도록 할 수 있습니다. 그러나 각 사용자에 대해 리소스의 일부로 사용자 이름을 지정하는 별도의 정책을 만드는 대신, 해당 그룹의 모든 사용자에 대해 작동하는 단일 그룹 정책을 만들 수 있습니다.
정책 변수를 사용하여 이 작업을 수행하면, 정책에서 자리 표시자를 지정할 수 있습니다. 정책이 평가될 때 정책 변수는 요청 자체에서 발생하는 값으로 대체됩니다.
이 예제는 정책 변수 **${aws:username}**을 사용하는 Amazon S3 버킷에 대한 정책을 보여줍니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-company"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"home/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-company"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"home/${aws:username}/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::my-company/home/${aws:username}/*"
]
}
]
}
참고: StringLike만 별표(*)를 와일드카드로 인식합니다. StringEquals는 해당되지 않습니다. 자세한 내용은 문자열 조건 연산자를 참조하십시오.
관련 정보
사용자 정책을 사용하여 버킷에 대한 액세스 제어
Amazon S3 조건 키 예
버킷 정책 예