요즘 개인 프로젝트로 인해서 거의 6개월 가까이 AWS를 사용중이다.
그러다가 프로젝트 개수가 늘어나고 다수의 S3 버킷 관리해야 할 일이 생겼다.
원래는 AWS 에서 제공하는 최고 권한의 API Key를 이용하여 ec2 인스턴스도 만들고 S3 버킷에 업로드도 하고 했지만 슬슬 진행하는 프로젝트 개수가 늘어나면서 각 S3 버킷별로 접근 권한을 분리해야 하는 상황이 생겼다.
물론 개인 프로젝트라 크게 신경을 써도 되지 않아도 될 수 있는 부분이긴 하나 Github Actions등의 CI/CD 및 외부 서버에 최고 권한을 가진 키를 두고 쓰다보니 보안을 신경쓰게 되었다.
만약 한곳에서라도 IAM root key 가 유출된다면 개인의 경우 모네로 채굴기가 돌아서 월 1천만원의 청구서를 구경하거나 회사라면 정보 유출로 이어질 수 있는 위험이 있을 것이다.
이러한 이유로.. 개인이든 회사든 키 관리를 잘 해야 하고 권한 분리도 잘 해놔야 할 것이다.
각설하고 개인적으로 메모도 해둘겸, 흔적을 남길겸 적어보려고 한다.
먼저 S3 bucket 을 만들었다는 가정 하에 진행해보려고 한다.
외부에서 S3를 접근하려면 AWS 웹 콘솔
과 AWS CLI
로 접근을 하는 방법이 있다. 이때 AWS CLI
로 접근할 때는 Access Key 가 필요한데 이때 특정 버킷에 대해서만 읽고 쓸 수 있는 권한을 가진 Access Key 를 만들어보려고 한다.
우선 우리가 설정해야 할 것은 아래와 같다.
즉 위 2가지만 설정하면 쉽게 특정 정책이 적용된 Access Key 를 생성할 수 있다.
우선 새로운 유저를 만들기 위해서는 AWS 웹 콘솔에서
상단의 본인 닉네임
클릭My Security Credentials
클릭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 가 생성된다!
이걸로 이제 맘껏 사용하면된다. 끝!