오늘도 개발
[2차 프로젝트 내일의 집] AWS s3로 글쓰기 api 구현하기 - 1. AWS 세팅(IAM 설정, S3 설정) 본문
[2차 프로젝트 내일의 집] AWS s3로 글쓰기 api 구현하기 - 1. AWS 세팅(IAM 설정, S3 설정)
Sueeeeeee 2022. 8. 8. 17:230. API 핵심 기능
유저가 글, 사진을 작성하고 '글 올리기' 버튼을 누른다.
프론트에서 엔드포인트 posts/write로 POST 요청을 보낸다.
POST 바디에는 user id, 이미지 파일, 각 이미지에 대한 설명글, 태그 등이 들어있다.
글쓰기 api는 요청을 받으면
1) POST 바디로 받은 이미지 파일을 s3에 업로드한다.
2) 업로드한 사진의 url을 가져온다.
3) POST 바디로 받은 다른 데이터(ex. user_id, 설명 등)와 사진 url을 DB에 저장한다.
s3는 아마존에서 제공하는 클라우드 서비스이다.
이 포스트에서는 이미지 파일을 s3 업로드하기 위한 AWS 설정 방법을 다룰 것이다.
1. IAM(Identity and Access Management) 유저 생성하기
AWS에서는 한 계정을 여러 사용자가 사용할 수 있다.
IAM은 각 사용자에게 AWS 서비스의 접근 권한을 주는 작업이다.
예를 들어 a라는 계정을 사용하는 1번 사용자에게는 RDS 권한만, 2번 사용자에게는 S3의 권한만 주는 식으로 설정할 수 있다.
최초로 AWS 계정을 만들면 루트 사용자가 되는데,
루트 사용자는 IAM으로 사용자를 추가할 수 있다.
여기서 루트 사용자인 나는 IAM으로 사용자 a를 추가하고,
a로 로그인하여 a사용자로 AWS를 사용할 것이다.
1) 루트 사용자로 로그인 후 IAM 콘솔로 이동
2) 액세스 관리 > 사용자 > 사용자 추가 선택
3) 비밀번호 설정 (사용 편의를 위해 액세스 키, 암호 둘 다 선택)
4) 그룹에 사용자 추가
가장 위의 그룹을 선택한다.
나는 a 사용자에게 모든 기능에 대한 접근 권한을 주고 싶기 때문이다.

5) 사용자 추가 완료
6) 완료 시 뜨는 창에서 사용자의 키 등 중요한 정보가 들어있는 csv 다운로드(재다운로드 안 됨)
7) 링크 클릭해서 로그인
2. IAM 정책 생성하기
1) 액세스 관리 > 정책 > 정책 생성 클릭
2) JSON 클릭 > s3 관련 권한 부여하기

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3statement",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::{버킷이름}/*",
"arn:aws:s3:::{버킷이름}"
]
}
]
}
3) 정책 생성 클릭
3. IAM 사용자에게 정책 부여하기
1) 액세스 관리 > 정책 클릭
2) 라디오 버튼으로 정책 선택 > 작업 클릭 > 연결 클릭
3) 연결할 사용자 선택하기
4. S3 세팅하기
1) S3 > 버킷 만들기 클릭 > 버킷 생성
버킷이란? 데이터를 저장할 곳. 오브젝트로 사용함.
2) 생성한 버킷 클릭 > 권한 > 액세스 > 모든 퍼블릭 액세스 차단 해지
3) 생성한 버킷 클릭 > 권한 > 버킷 정책 > 편집 > 정책 추가
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StatementSid1",
"Effect": "Allow",
"Principal": {
/* IAM 대시보드로 가서 유저 클릭, 사용자 ARN 복사 */
"AWS": "{user의 arn}"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::{버킷명}/*"
},
{
"Sid": "StatementSid2",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{버킷명}/*"
}
]
}
4) 생성한 버킷 클릭 > 권한 > CORS 편집 클릭
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"ETag"
],
"MaxAgeSeconds": 3000
}
]
'TIL & 프로젝트 회고' 카테고리의 다른 글
| [2차 프로젝트 내일의 집] AWS s3로 글쓰기 api 구현하기 - 3. 리팩토링 (0) | 2022.08.09 |
|---|---|
| [2차 프로젝트 내일의 집] AWS s3로 글쓰기 api 구현하기 - 2. Django 세팅(boto3)과 코드 작성 (0) | 2022.08.08 |
| [2차 프로젝트 내일의 집] 상품 상세 api - Django ORM 최적화하기 심화 (0) | 2022.08.08 |
| [2차 프로젝트 내일의 집] 포스트 목록 api - Django ORM 최적화하기 (0) | 2022.08.07 |
| [2차 프로젝트 내일의 집] SNS 로그인/회원가입 api에 Unit Test 해보기 (0) | 2022.08.05 |