[AWS] s3에 파일 업로드 하기(1)

김은지·2022년 3월 21일
0

학습 내용 정리

목록 보기
12/25

2차 프로젝트에서 파일을 AWS S3 bucket에 등록해보는 경험을 했는데, 그 과정을 다 이해하고 있지는 못 하더라도 우선 잊고 싶지 않아서 기록을 한다.

파일 업로드 순서

  1. AWS IAM user 셋업
    IAM user는 AWS계정에 포함되어있는 '제한된 접근 권한'을 가진 유저인데,
    다음의 과정을 통해 등록한다.
    1. AWS에 로그인을 한 후 IAM 페이지로 가서, IAM Resources 메뉴의 Add user 버튼을 클릭하여 새로운 유저를 등록한다.(Programmatic Access는 체크하고 AWS management access console은 체크 하지 않았다.)
    2. 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 파일을 다운받을 수 있는 창이 나오는데 꼭 다운받아준다!!! 이 후 다시 다운받을 수 없으니 꼭꼭!


  1. S3 버킷 생성
    아까 IAM페이지를 검색했던 것 처럼 AWS페이지에서 S3를 검색하면 아주 쉽게 s3페이지로 갈 수 있다.
    1. 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와 연결 및 파일을 업로드 해야하는데,
다음 글에서 이어서 이야기 하도록 하겠다!

0개의 댓글