참고사이트
[Django] AWS S3 Storage Connect(장고 S3 연결 이미지 업로드)


처음에 들어가면 모든 퍼블릭 액세스 차단이 체크가 되어있는데 다시 클릭해서 차단을 다 풀고 맨 밑에만 체크해줍니다.

나머지는 기본값으로(건드지리 않음)으로 설정하고, 버킷 만들기 클릭

1) 사용자 이름과 AWS 액세스 유형을 액세스 키로 선택 후 다음

2) 그룹 생성 클릭

3) 그룹 이름을 적고 정책 필터에 s3 를 적어서 AmazonS3FullAccess 를 체크 한후 그룹 생성 클릭

4) 그룹이 잘 생성되었으면 다음 클릭

4) 태그는 입력 없이 다음 클릭

5) 사용자 만들기 클릭

6) 액세스 키는 다시 확인할 방법이 없으므로 csv를 다운로드 받아 잘 보관해둡니다.

1) boto3와 storages 설치
pip install boto3
pip install django-storages
2) settings.py에 코드 추가
INSTALLED_APPS = [
.......
.......
'storages',
]
AWS_ACCESS_KEY_ID = '[액세스 키]'
AWS_SECRET_ACCESS_KEY = '[액세스 시크릿 키]'
AWS_REGION = 'ap-northeast-2'
AWS_S3_SIGNATURE_VERSION = "s3v4"
AWS_STORAGE_BUCKET_NAME = '버킷 이름'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME,AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_ROOT = os.path.join(BASE_DIR, 'path/to/store/my/files/')
3) Github에 커밋 및 푸시 후 Postman이나 RESTframework에 직접 들어가 이미지를 올리면 해당 버킷에 이미지 파일이 잘 올라가 있는지 확인할 수 있습니다.

이미지 파일을 직접 클릭했는데 이러한 오류가 뜰 수 있습니다. (AccessDenied)

1) 해당 버킷에 들어가 버킷정책 편집 클릭

2) 버킷 정책 편집에 아래 코드를 넣어줍니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Mannual",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[버킷 이름]/*",
"arn:aws:s3:::[버킷 이름]"
]
}
]
}

변경 사항 저장을 클릭하고 다시 이미지 확인을 해보면 정상적으로 나올겁니다.