2차 프로젝트에서 파일을 AWS S3 bucket에 등록해보는 경험을 했는데, 그 과정을 다 이해하고 있지는 못 하더라도 우선 잊고 싶지 않아서 기록을 한다.
- AWS에 로그인을 한 후 IAM 페이지로 가서, IAM Resources 메뉴의 Add user 버튼을 클릭하여 새로운 유저를 등록한다.(Programmatic Access는 체크하고 AWS management access console은 체크 하지 않았다.)
- Permission 설정 페이지에서 새로운 permission policy을 추가한다.
사실 permission을 검색하면 s3에 관한 다양한 정책이 나와있긴 하다. 만일 permission policy를 추가할 거라면 JSON형식으로 적어주면 된다. 나는 아래와 같이 적어주었다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::example-bucket-name/*",
"arn:aws:s3:::example-bucket-name"
]
}
]
}
버킷 이름이 들어가는 부분은 버킷생성후에 생성한 버깃의 이름을 적어주도록 한다.
정책 생성 후에는, 정책을 적용하여 다음 버튼을 누르면 유저 생성이 완료된다.
완료 된 후에 "Access Key ID", "Secret Access Key"가 담긴 csv 파일을 다운받을 수 있는 창이 나오는데 꼭 다운받아준다!!! 이 후 다시 다운받을 수 없으니 꼭꼭!
- s3페이지로 이동 후, Create bucket을 하고 '버킷 이름'과 '지역'을 설정해준다.
그 다음 페이지에서... Block all public access의 체크를 해제 해 주었다.
원래 'public access를 허용하지 않고, CloudFront를 붙여 CDN 기능을 구현하는것이 정석' 이라고 하는데... 아직 그게 뭔지 모른다. 버킷도 벅차... 미래의 나에게 부탁한다.
일단 그 정도 선택을 하면 버킷이 만들어지는데, 이제 버킷도 policy 설정을 해줘야 한다.
permission 탭에서 Bucket Policy를 누른 후 다음의 json을 입력해줬다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1507637373230",
"Effect": "Allow",
"Principal": {
"AWS": "{user_arn}"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::{bucket_name}/*"
},
{
"Sid": "Stmt1507637391106",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{bucket_name}/*"
}
]
}
위의 user_arn은 IAM user의 ARN인데, IAM 페이지의 user메뉴에서 해당 유저를 클릭하면 나오는 페이지에 가면 친절하게 복사도 할 수 있게 되어있다.
버킷 이름은 알쥬..?
이대로 save버튼을 누른다. 그 후!!! CORS configuration 버튼을 눌러 CORS 설정을 해준다.[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ “GET”, “PUT”, “POST”, “HEAD” ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "ETag" ], "MaxAgeSeconds": 3000 } ]
이런식으로....
이제 버킷과 IAM User는 설정이 완료 되었다.
이제 django에서 boto3을 사용하여 s3와 연결 및 파일을 업로드 해야하는데,
다음 글에서 이어서 이야기 하도록 하겠다!