본문 바로가기
Django/Django Vanila

22. Django Amazon s3 설정하기

by S.T.Lee 2022. 7. 29.

IAM

우선 사용자 추가이다.

여기서 햇갈리지 말하야 할건 '사용자' == '실제 Amazon 가입 맴버'가 아니라 내가 지정하는 그룹의 사용자이다.

즉, 같이 s3를 활용할 팀원들 밑 자기 자신을 작성하는 것이다. 

사용자 추가
그룹 생성
AmazonS3FullAccess를 선택해준다.
무시하고 넘어가도 된다.
마지막 정보이다.
액세스 키랑 비밀 엑세스키는 중요하다. 무조건 csv로 다운 받아놓는걸 추천한다.

 

S3

default 상태로 생성

액세스키 생성

이 부분은 필자가 햇갈린 부분인데 아래의 보안 자격 증명은 사용되지 않는다.

위에 사용자 추가에서 자신의 비밀 엑세스키와 엑세스 키 ID를 만드는 것이 맞다.

 

Django에 설정하기

#settings.py

#AWS S3
import json
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

with open(os.path.join(BASE_DIR, 'aws.json')) as f:
    secrets = json.loads(f.read())

AWS_S3_REGION_NAME = 'ap-northeast-2'
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_ACCESS_KEY_ID = secrets['AWS']['ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = secrets['AWS']['SECRET_ACCESS_KEY']
AWS_STORAGE_BUCKET_NAME = secrets['AWS']['STORAGE_BUCKET_NAME']
AWS_DEFAULT_ACL = 'public-read' # 올린 파일을 누구나 읽을 수 있게 지정합니다!
AWS_S3_ADDRESSING_STYLE = "virtual"

INSTALLED_APPS = [
    'storages'
]
//aws.json

{
    "AWS": {
        "ACCESS_KEY_ID": "엑세스 키 ID",
        "SECRET_ACCESS_KEY": "비밀 엑세스 키",
        "STORAGE_BUCKET_NAME": "프로젝트 이름"
    }
}

이렇게  settings.py에 설정해주면 사용하기 위한 준비는 끝났다.

 

 

버킷 정책 설정

이제 가장 중요한 부분이다.

위에서 만든 IAM과 S3를 이제 프로젝트에 맞게 설정할 것이다.

위와 같이 권한 개요에 퍼블릭이 나오게 할것이다.

우선 퍼블릭 액세스 차단 에서 모든 항목을 해제 해준다.

다음 버킷 정책이다.

편집을 눌러서 새로운걸 만든다. 정책 생성기를 누르면 하단의 그림이 나온다.

그림과 같이 작성하면 아래와 같이 나온다.

{
  "Id": "Policy1659108501613",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1659108456389",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "프로젝트 이름", <--- 버킷 정책에 있는 버킷 ARN
      "Principal": "*"
    }
  ]
}

이를 복사해서 버킷 정책으로 돌아와 정책에 작성한다.

 

사실 저보다는 하단의 코드를 추천한다.

{
	"Version": "2012-10-17",
	"Id": "Policy1659078686572",
	"Statement": [
		{
			"Sid": "Stmt1659078683361",
			"Effect": "Allow",
			"Principal": {
				"AWS": [
					"사용자1",
					"사용자2",
					"사용자3",
					"사용자4"
				]
			},
			"Action": "s3:*",
			"Resource": [
				"프로젝트 ARN",
				"프로젝트 ARN/*"
			]
		}
	]
}

후에 변경 사항 저장을 누른다.

 

다음 ACL(액세스 제어 목록)을 편집할 것이다.

처음에는 편집이 활성화 되지 않을탠데 이를 위해서 보안 설정을 풀어야하는데 객체 소유권 편집에서 ACL 활성화를 눌러줘야한다.

활성화를 눌러줘야한다.

그러면 편집 기능이 활성화 된다. 이후 아래와 같이 설정해준다.

 

'Django > Django Vanila' 카테고리의 다른 글

22. Django annotate  (0) 2022.06.15
21. Django Queryset 활용(select_related, prefetch_related)  (0) 2022.06.15
20. Django authenticate 수정  (0) 2022.06.09
19. Django admin 편집  (0) 2022.06.06
18. Django MySQL 연동(연결)  (0) 2022.06.06