[AWS] S3 사용자 제한

2023. 12. 1. 17:54AWS/AWS_Service

반응형

안녕하세요, 달콤한달팽이입니다.🐌🫡


오늘은 특정 사용자만 사용이 가능하도록 S3를 설정하는 방법에 대하여 알아보겠습니다.


S3 사용자 제한

S3를 사용하다보면 A 버킷은 user1부터 user10까지만, B 버킷은 user5부터 user15까지만 사용 가능하도록 설정해야할 때가 있습니다.

 

이럴 때 총 두 가지의 방식으로 이를 설정할 수 있습니다.

 

첫 번째, S3 버킷의 정책 수정하는 방법입니다.

이 경우 해당 버킷은 정책에 등록된 User만 사용 가능하도록 허용하므로,

한 버킷에 여러 User에 대한 사용 허가가 필요할 때 유용합니다.

 

두 번째, IAM User의 정책 수정하는 방법입니다.

이 경우 해당 User는 정책에 등록된 버킷만 사용이 가능하므로,

한 User가 여러 제한된 버킷 사용이 필요할 때 유용합니다.

 

이제 위 두 가지 방식을 모두 실습해보도록 하겠습니다!


[S3 버킷 정책을 통한 제한]

S3 버킷은 처음 만들었을 때 아무런 정책이 들어가있지 않습니다.

때문에 IAM User에만 권한이 있다면 모든 사용이 가능합니다.

 

이번에는 이를 제어하여 특정 User만 사용가능하도록 설정해보겠습니다.

 

버킷 정책에 아래와 같이 등록해주세요!

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId",
    "Statement": [
        {
            "Sid": "userDeny",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::{어카운트 ID}:user/{유저명}"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::{버킷명}",
                "arn:aws:s3:::{버킷명}/*"
            ]
        }
    ]
}

 

위 정책은 아래와 같이 설정을 진행했습니다.
  (1) 해당 버킷에 대해, Get, Put 권한을 {유저명}을 제외한 나머지 유저에 대해 거부

 

정책에 등록한 User를 제외한 타 User가 버킷에 대한 모든 권한을 부여하고 해당 버킷을 확인했을 때,

모든 버킷에 대한 리스트는 확인이 가능합니다.

 

하지만 해당 버킷의 객체를 다운로드 받을 경우 아래와 같이 권한 에러가 발생하는 것을 확인할 수 있습니다!

 

[IAM User 정책을 통한 제한]

IAM User에는 AWS에서 제공하는 관리형 정책을 넣거나, 사용자가 직접 제작하는 인라인 정책을 넣는 방식이 존재합니다.

 

관리형 정책은 특정 리소스에 대한 제한 사항은 적용되지 않기 때문에,

리소스를 특정짓기 위해선 인라인 정책을 사용하는 것이 일반적이라는 점 기억해주세요!

 

인라인 정책에는 아래와 같이 등록해주세요!

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:List*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::{버킷명}",
                "arn:aws:s3:::{버킷명}/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::{버킷명}",
                "arn:aws:s3:::{버킷명}/*"
            ]
        }
    ]
}

 

위 정책은 크게 두 파트로 분류되어 있으며 각 파트는 아래와 같이 설정을 진행했습니다.
  (1) 모든 버킷 리스트 확인

  (2) testbucket에 대해 Put, Get 가능 

  (3) testbucket 이외에 대해 Put, Get 불가능

 

때문에 해당 User로 콘솔을 접속했을 때, 모든 버킷에 대한 리스트는 확인이 가능합니다.

하지만 아까와 달리 엑세스 권한이 부족하다고 뜨네요!

(이러한 부분은 IAM User의 정책에 권한을 추가해주어 수정이 가능합니다!)

 

하지만 타 버킷의 객체를 다운로드할 경우 권한 부족이 뜨게 됩니다.

 


지금까지 IAM User 또는 S3 버킷의 정책을 수정함으로써,

버킷에 접근하는 사용자를 제한하는 방법애 대해 알아보았습니다.

 

하나의 계정을 개인이 사용하는 것이 아닌,

팀이나 기업 단위로 사용할 경우 더욱 빛을 발휘하는 방법이라고 생각합니다.

 

지금까지 긴 글 읽어주셔서 감사합니다! 

반응형