본문 바로가기

회고록(TIL&WIL)

TIL 2022.07.18 AWS S3파일 업로드, IAM 생성

import boto3
import my_settings # 상수값이 담겨있는 .py

# project/upload/
class UploadS3(APIView):
    # S3에 이미지 업로드 후 URL 리턴
    def post(self, request):
        file = request.data["file"]
        print(file)
        s3 = boto3.client('s3',
                          # 각 상수에 IAM 으로 생성한 KEY들을 저장해두면
                          # aws configure를 따로 설정해주지 않아도 업로드가 된다.
                          aws_access_key_id = my_settings.AWS_ACCESS_KEY,
                          aws_secret_access_key = my_settings.AWS_SECRET_KEY,
                          region_name = my_settings.REGION_NAME,
                          )
        
        file_name = str(file).split('.')[0]
        file_extension = str(file).split('.')[1]
        
        s3.put_object(
        ACL="public-read",
        Bucket="toastuitestbucket",
        Body=file,
        Key=file_name,
        ContentType=file.content_type)
        url =  "https://toastuitestbucket.s3.ap-northeast-2.amazonaws.com/"+ file_name + '.' + file_extension
        return Response({"success":"업로드 성공!", "url": url})

S3에 파일 업로드하려는데 발생한 오류 Access Denied인걸로 봐서 S3의 문제인가 했다. 하지만 S3 버킷을 전부 public 으로 열었음에도 계속해서 denied 되어서 이유가 뭔지 팀원들과 얘기하고 보니 iam 접속을 해줘야하는 것이 생각이 났다.

 

IAM 생성

사용자 이름 설정하고, 단순히 백엔드단에서 업로드할 때 사용할 IAM 계정이므로 액세스키만 체크

다른 팀원들에게 같은 EC2나 ,S3 에 접속할 수 있게 해주려면 암호를 체크해서 발급되는 CSV를 주고 AWS 로그인 시 그에 맞게 아이디와 패스워드 로그인하면 EC2 인스턴스나 S3 버킷에 접속해서 확인해볼 수 있다.

권한 정책 설정은 해당 IAM에 부여할 기능들을 필터로 검색해서 지정해주면 된다

S3에 대한 권한을 줄거기 때문에 S3 검색해서 권한 부여

추가로 태그에 대한 설정이랑, 검토하는 부분이 있다만 크게 문제 없고 생성하면 끝

생성 시 .csv 파일을 다운로드해서 엑세스키 ID와 PASSWORD 정보를 저장해서 사용하면된다.

그리고 백엔드 터미널로 돌아와서 해당 IAM으로 접속을 해주어야한다!(단 그전에 AWS SDK가 설치되어있어야만함) 아래 명령어를 이용하여 발급받은 IAM으로 접속을 해준 뒤 S3 파일 업로드를 진행하면!

aws configure