AWS S3 버킷 권한 분리 (유저별 s3 버킷 권한 설정)

달달칩·2020년 10월 22일
2

요즘 개인 프로젝트로 인해서 거의 6개월 가까이 AWS를 사용중이다.

그러다가 프로젝트 개수가 늘어나고 다수의 S3 버킷 관리해야 할 일이 생겼다.

권한 분리의 중요성

원래는 AWS 에서 제공하는 최고 권한의 API Key를 이용하여 ec2 인스턴스도 만들고 S3 버킷에 업로드도 하고 했지만 슬슬 진행하는 프로젝트 개수가 늘어나면서 각 S3 버킷별로 접근 권한을 분리해야 하는 상황이 생겼다.

물론 개인 프로젝트라 크게 신경을 써도 되지 않아도 될 수 있는 부분이긴 하나 Github Actions등의 CI/CD 및 외부 서버에 최고 권한을 가진 키를 두고 쓰다보니 보안을 신경쓰게 되었다.

만약 한곳에서라도 IAM root key 가 유출된다면 개인의 경우 모네로 채굴기가 돌아서 월 1천만원의 청구서를 구경하거나 회사라면 정보 유출로 이어질 수 있는 위험이 있을 것이다.

이러한 이유로.. 개인이든 회사든 키 관리를 잘 해야 하고 권한 분리도 잘 해놔야 할 것이다.

각설하고 개인적으로 메모도 해둘겸, 흔적을 남길겸 적어보려고 한다.

IAM 유저별 권한 분리

먼저 S3 bucket 을 만들었다는 가정 하에 진행해보려고 한다.

외부에서 S3를 접근하려면 AWS 웹 콘솔AWS CLI 로 접근을 하는 방법이 있다. 이때 AWS CLI 로 접근할 때는 Access Key 가 필요한데 이때 특정 버킷에 대해서만 읽고 쓸 수 있는 권한을 가진 Access Key 를 만들어보려고 한다.

우선 우리가 설정해야 할 것은 아래와 같다.

  • 새로운 유저 생성 : 해당 유저에 대해 Access Key를 설정할 수 있다.
  • 새로운 Policy(정책) 생성 : AWS에서 제공하는 특정 서비스에 접근할 수 있는 정책을 생성한다.

즉 위 2가지만 설정하면 쉽게 특정 정책이 적용된 Access Key 를 생성할 수 있다.

새로운 User 및 policy 생성

우선 새로운 유저를 만들기 위해서는 AWS 웹 콘솔에서

  1. 상단의 본인 닉네임 클릭
  2. My Security Credentials 클릭
  3. Identity and Access Management (IAM)에서 Users 클릭

순으로 설정 페이지에 들어간다.

그 후 Add user 를 눌러서 User 생성 페이지로 가보자

User name 에 User 이름을, Access Type 에는 Programmatic access 를 선택해서 Next 로 이동한다.

그후 Attach existing policies directly 를 눌러서 유저 에 대한 policy 를 직접 설정해주도록 하자.

그런데 아직 우리는 policy가 없으므로 아래 Create policy를 눌러주자.

그러면 새로운 창이 뜨면서 Create policy 설정이 나올 것인데, 아래 json 을 잘 수정해서 붙여주자

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::BUCKETNAME"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::BUCKETNAME/*"
        }
    ]
}
  • BUCKETNAME 을 본인이 생성한 Bucket name 으로 설정하자.

위 설정을 간단하게 말로 풀어 쓰면

  • BUCKETNAME 버킷에 대해서 파일 리스트 조회(ListBucket), 업로드(PutObject), 다운로드(GetObject) 를 허용한다.

로 정의할 수 있겠다.

그후 Review Policy 를 눌러서 생성해주자

확인후 Create policy 로 생성한다.

그리고 아까 페이지로 돌아와서 새로고침 버튼을 눌러서 Policy 리스트를 다시 받아오고 방금 만든 policy 를 적용한다.

그러면 새로운 Access Key 가 생성된다!

이걸로 이제 맘껏 사용하면된다. 끝!

profile
보안과 개발을 둘다 잘 하고 싶은 사람입니다.

0개의 댓글