본문 바로가기

AWS/S3

[AWS] S3 하나의 Bucket에서 사용자 전용 디렉터리 구성

안녕하세요.

오늘은 관리자가 아닌, 일반 사용자(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를 합니다.

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 합니다.

IAM - Groups - Attach Policy

 

  • 마지막으로, 테스트를 위해 해당 Group에 속해있는 IAM User의 계정정보로 my-test-bucket/home/ 하위에
    디렉터리를 생성하여 테스트합니다.

 

  • 아래의 사진은 위에서 생성한 정책(Policy)가 적용된 사용자로 로그인 후, S3에 들어온 모습인데요.
    아래처럼 모두 Unknown Error이 발생되지만, 실제 my-test-bucket/home/${aws:username} 으로 된
    디렉터리로 접근하면 리소스 확인 및 업로드 다운로드가 가능하고, 타인의 디렉터리로는 접근 불가능한거
    확인 하실 수 있습니다.

 

S3 - Bucket들에 대해서는 Unknown Error

 

/home/testuser 의 디렉터리는 정상 동작

 

/home/dbauser 디렉터리는 Permission Deny

 

위 처럼 일반 사용자들의 전용 디렉터리를 구성하여 관리 할 수 있습니다.