안녕하세요.
오늘은 관리자가 아닌, 일반 사용자(Dev, DBA...)들을 위한 하나의 Bucket에서
사용자들의 전용 디렉터리를 구성해보겠습니다.
예를들어 my-test-bucket 이라는 Bucket 안에 home 디렉터리가 있고,
일반 사용자들은 홍길동, 장발장, 김아무개 가 있다고 가정하겠습니다.
이 때 S3 Bcuket의 경로를 절대경로와 같이 나타내면 아래와 같습니다.
/my-test-bucket/home/홍길동
/my-test-bucket/home/장발장
/my-test-bucket/home/김아무개
이처럼, 홍길동이라는 사용자는 장발장, 김아무개 디렉터리의 내부를 볼 수 없도록,
나머지 장발장, 김아무개도 마찬가지로 타인의 디렉터리를 볼 수 없도록
IAM Policy를 구성하여 일반사용자들의 Group에 Attach 하겠습니다.
- 먼저, AWS Web Console에서 IAM 서비스의 Policies로 이동하여 Create policy를 합니다.
- 다음으로 Json 탭에서 아래의 코드를 입력합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-test-bucket"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"home/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-test-bucket"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"home/${aws:username}/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::my-test-bucket/home/${aws:username}/*"
]
}
]
}
이렇게 구성하면, ${aws:username} 이라는 변수는, 현재 로그인 된 IAM User의 Name정보를 가져오고,
그 Name 정보를 디렉터리에 맵핑 시킴으로써 해당 정보로 Access를 Allow 할 지, Deny 할 지
결정하게 됩니다.
- 이후 해당 정책을 Name과 Description을 작성하여 생성합니다.
- 만들어진 정책을 적용할 Groups에 Attach 합니다.
- 마지막으로, 테스트를 위해 해당 Group에 속해있는 IAM User의 계정정보로 my-test-bucket/home/ 하위에
디렉터리를 생성하여 테스트합니다.
- 아래의 사진은 위에서 생성한 정책(Policy)가 적용된 사용자로 로그인 후, S3에 들어온 모습인데요.
아래처럼 모두 Unknown Error이 발생되지만, 실제 my-test-bucket/home/${aws:username} 으로 된
디렉터리로 접근하면 리소스 확인 및 업로드 다운로드가 가능하고, 타인의 디렉터리로는 접근 불가능한거
확인 하실 수 있습니다.
위 처럼 일반 사용자들의 전용 디렉터리를 구성하여 관리 할 수 있습니다.