사이드 프로젝트를 진행하면서 이미지 파일 관리를 위해 AWS S3를 사용하면서 알게 된 정보를 정리해 보았다.
S3(Simple Storage Service)란?
쉽게 말해 AWS(Amazon Web Service)에서 제공하는 클라우드 파일 저장소이다.
S3를 사용하는 이유?
서버(EC2, ELB)만을 사용해서 파일을 저장을 하게 되면 성능 및 여러 다른 문제들이 생길 수 있는데 S3 파일 저장소를 별도로 따로 두어 관리하면 서버에 의존하지 않아 나중에 확장, 축소를 하기도 쉽고 DB 관리하는 것에도 속도를 유지하는 상태에서 저장소가 무제한이다.
S3는 AWS에서 스스로 서버를 증설하고 성능을 관리하고 보안 및 안전성 등 비용 측면에서도 장점이 많다.
아래와 같은 그림으로 이미지를 관리하게 된다.
AWS S3 버킷 생성
버킷은 S3에 저장되는 데이터 컨테이너다.
aws 콘솔 로그인 후 검색창에 s3를 검색한다.
버킷 만들기를 클릭한다.
버킷 이름을 적고 리전은 서울을 선택한다.
프로젝트에서 외부에 공개할 이미지이기 때문에
모든 퍼블릭 액세스 차단
체크박스를 풀어준다. (만약 공개되면 안 되는 파일이라면 체크!!)이렇게 버킷을 생성하고 버킷에 들어오면
업로드
를 통해 일반 구글 클라우드처럼 파일을 저장할 수 있다.모든 퍼블릭 액세스 차단
이 비활성화이지만이미지를 업로드 후 url을 확인이면 조회가 되지 않는다.
AWS S3 버킷 정책
이를 해결하기 위해 버킷 정책
편집
을 클릭한다정책 생성기 클릭
이미지 조회만 퍼블릭으로 설정할 거기 때문에
GetObject
만 선택한다.버킷 정책 편집에 ARN을 복사한다.
버킷(ARN)에 images 폴더에 모든 파일만 퍼블릭으로 설정한다.
- 위에 복사한
<YOUR ARN>
을 붙여 넣고/images/*
를 추가한다. - ex)
<YOUR ARN>/images/*
입력
- 위에 복사한
-Add Statement
, Generate Policy
를 클릭한다
아래와 같은 화면이 나오는데 전체를 복사한다.
복사한 json 문서를 아까 버킷 정책 편집 부분에 붙여넣기 후 저장한다.
버킷에
폴더 만들기
로images
폴더를 만들면 버킷/images 폴더 안에 업로드된 파일들은 퍼블릭으로 조회할 수 있다.
이미지 저장 또는 삭제는 백엔드를 거쳐서 진행되기 때문에 실수를 방지하기 위해 파일 저장 및 삭제를 할 때 권한을 추가로 설정한다.
AWS IAM 정책
사용자 정책을 만들기 위해 콘솔 검색창에
IAM
을 검색한다.IAM > 정책 > 정책 생성
에서 서비스는 S3를 선택 후 이미지 생성 및 삭제 부분에만 권한을 추가할 거라DeleteObject
,PutObject
를 선택한다.리소스에서
특정
을 선택 후 아까 만들어둔 S3 ARN을 추가한다.- 계속
다음
으로 진행 후 정책 이름을 적고 정책을 생성한다. aws에 기본 정책들이 많아 정책을 찾기 쉽게 예시처럼 작성했다.- ex)
<s3 버킷 이름>-s3-management
- ex)
IAM > 사용자 > 사용자 추가
에서사용자 이름
을 추가하고프로그래밍 방식
을 체크 후 다음으로 넘어간다.권한 설정
에서기존 정책 연결
을 선택 후 이전에 만든(<s3 버킷 이름>-s3-management
) 정책을 선택 후 다음으로 넘긴 후 사용자 만들기를 한다.- 사용자가 만들어지면
액세스 키 ID
와비밀 액세스 키
를 확인할 수 있다.액세스 키 ID
와비밀 액세스 키
를 사용하여 이미지 생성 및 삭제에 권한을 준다.