aws s3 미디어 서버 설정 & django 설정

eunji hwang·2020년 6월 3일
7

BACKEND-PYTHON-DJANGO

목록 보기
21/28
post-custom-banner

참고 : 배프의 오지랍 파이썬 웹 프로그래밍

aws s3 설정

미디어, 정적파일을 공유할 수 있도록 아마존 S3(simple storage service)를 설정해봅시다~! s3는 버킷이란 단위를 사용한다! (RDS=인스턴스)

aws 서비스 선택에서 s3를 찾아 클릭하면 버킷만들기 버튼을 찾아 버킷 만들기를 진행한다.

버킷만들기

1. 이름 및 지역

  • 버킷 이름 : id 같은 것, 타인과 같은 이름 사용 불가능!
  • 리전 : 리전은 내가 위치한 곳과 가까울수록 빠르다.

버킷이름만 설정하고 다음 진행

2. 옵션 구성

특별히 설정 할 것 없음! 다음 진행

3. 권한 설정

일반적으로 모든 퍼블릭 엑세스 차단 사용.
버킷을 통해 static파일에 대한 호스팅을 진행하는 경우에는 모든 퍼블릭 엑세스 차단 말고 다른 옵션을 선택해야 한다.

4. 검토

내용 훓어보기 후 버킷만들기 진행

IAM 설정하기

생성한 버킷을 장고에서 사용하기 위해 IAM에서 사용자 추가권한설정을 해야한다...

[서비스] - [보안, 자격 증명 및 규정 준수] - [IAM] 선택

사용자

사이드 메뉴에서 [사용자] - [사용자 추가] 를 선택

1. 사용자 세부정보 설정

  • 사용자이름 : 원하는 이름!
  • aws 액세스 유형 선택 : 엑세스 유형 - [x] 프로그래밍 방식 액세스

2. 권한

  • 그룹생성 버튼클릭
  • 그룹 이름 : 원하는 이름
  • 's3' 검색 - [AmazonS3FoullAccess]선택
  • 그룹 생성

3. 태그

  • 선택사항이기에 PASS!

4. 검토

  • 훓어보기 후 사용자만들기 버튼 클릭

완료

  • 사용자 : 내가 입력한 이름
  • 액세스 키 ID : 영문+숫자
  • 비밀 액세스 키 : *********

사용자 추가를 완료하면 .csv를 다운로드 버튼이 있다. 다음 사용을 위해 나는 받아 두겠다.

django 정적파일 관련 설정

모듈 설치

pip install boto3
pip install django-storages

장고에서 s3를 사용하기 위한 모듈 2개를 설치해 주자.

  • boto3 : s3를 사용하기 위한 모듈
  • django-storages : 다양한 저장소를 사용하기 위한 모듈

django-storages를 통해 boto3를 사용한다.

settings.py

S3 설정을 위한 변수를 작성한다. boto3 모듈을 사용할때 필요한 변수!

# S3 설정을 위한 변수
# AWS_xxx 의 변수들은 aws-S3, boto3 모듈을 위한 변수들이다.

# 엑세스 키와 시크릿 키는 다른 파일로 작성, 임포트하여 사용
AWS_ACCESS_KEY_ID = MY_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY = MY_AWS_SECRET_ACCESS_KEY

AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'beap-test-shop'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (
    AWS_STORAGE_BUCKET_NAME, AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = 'public-read'
AWS_LOCATION = 'static'
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

정적파일 S3로 업로드

python manage.py collectstatic 명령어를 통해 정적파일 모으기 작업 진행

미디어 파일 설정

settings.py 추가

# config/settings.py

# 미디어 파일을 위한 스토리지 설정
DEFAULT_FILE_STORAGE = 'config.asset_storage.MediaStorage' 

# INSTALLED_APPS에 starages 앱 추가
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'storages',  # s3 업로드를 위해 storages를 apps 에 추가!
]

asset_starage.py 생성

# config/asset_starage.py

from storages.backends.s3boto3 import S3Boto3Storage

class MediaStorage(S3Boto3Storage):
    location = 'media'
    file_overwrite = False

여기까지 진행했다면, 업로드 하는 파일은 모드 s3로!


번외 : s3 버킷정책

Public access

모두에게 액세스 권할을 오픈할것인지, 임의 사용자에게는 접근 권한을 제한할 것인지 설정
위 이미지를 통해 보듯 총 5가지 옵션이 있다.

액세스 제어 목록(ACL: access control list) 버킷이나 객체에 대해 요청자의 권한 허용 범위를 어디까지 할것인지 설정.
여기서 요청자는 일반 퍼블릭한 사용자가 될수 있으며, 계정의 owner, resource group, 특정 사용자가 될 수 있다.
모든 퍼블릭 액세스 차단 을 선택했다면 액세스 제어 목록 설정 한다해도 소용없음!

  • 모든 퍼블릭 액세스 차단
  • 새 액세스 제어 목록을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
  • 임의 액세스 제어 목록을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
  • 새 퍼블릭 버킷 또는 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
  • 임의 퍼블릭 버킷, 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 및 교차 계정 액세스 차단

[s3 권할 설정] - [버킷 정책] - [정책 생성기]

1. select policy type

  • select type of policy : s3 bucket policy

2. add Statements

  • effect : allow
  • principal : *
  • aws service : 기본 설정(amazon s3)
  • actions : get object(읽기);put object(쓰기) 등등~ 어떤거 쓰게 할지 지정
  • ARN : arn:aws:s3:::beap-test-shop/ *
    arn:aws:s3:::<bucket_name>/<key_name> 규칙에 따라 작성! 버킷이름과 키넴 넣기!

  • Generate Policy 클릭하여 json 파일 복사하기
profile
TIL 기록 블로그 :: 문제가 있는 글엔 댓글 부탁드려요!
post-custom-banner

0개의 댓글