이전 포스팅을 읽지 않으신 분들은 반드시 이전 포스팅의 내용을 숙지하고 아래의 내용을 읽어주세요.
>> 이전 포스팅
S3를 스프링 부트에서 사용하려면 AWS 계정의 액세스 키와 비밀 키를 사용하여 인증해야 한다. 이러한 액세스 키와 비밀 키는 AWS IAM(Identity and Access Management)을 통해 발급받을 수 있다.
① AWS에 접속한 후 IAM 서비스로 들어간다.
② IAM의 좌측 메뉴 > 사용자를 클릭하고 사용자 추가를 눌러준다.
③ 아래와 같이 입력하고 다음을 눌러준다.
④ 직접 정책 연결을 선택한다.
⑤ 권한 정책에서 S3를 검색한 후 AmazonS3FullAccess를 체크한다.
⑥ 선택사항은 모두 건너뛰고 사용자 생성을 눌러주면 된다.
⑦ 방금 생성한 사용자를 클릭한 후 보안 자격 증명 메뉴로 들어간다. 스크롤을 조금만 내려 액세스 키 만들기를 눌러준다.
⑧ 본인의 필요에 맞게 선택한다. 여기서는 일단 AWS 외부에서 실행되는 애플리케이션을 선택하기로 한다.
⑨ 설명 태그는 선택사항이니 넘어가주도록 한다.
⑩ .csv파일을 다운로드 받는다. 이 때가 아니면 다시는 볼 수 없으니 다운을 받거나 복사해두어야 한다.
이로써 Access Key와 Secret Key의 발급이 모두 완료된다.
S3의 secret key의 경우 절대로 외부에 노출되어선 안된다. 블로그에 올린다거나 깜빡하고 github에 yml파일을 같이 올릴 경우, 해커의 공격대상이 될 수 있다. 주로 해당 아이디로 비트코인을 채굴한다고 하는데, 해당 아이디의 주인은 요금 폭탄을 맞을 수 있는만큼 주의해야 할 부분이다. 비단 S3의 secret key 뿐 아니라, EC2의 프라이빗 IP, RDS의 엔드포인트 및 비밀번호 등도 외부에 유출되지 않도록 주의해야 한다.
.yml은 아래와 같이 작성되어야 한다. 아래에 {AccessKey}와 {SecretKey}라고 되어있는 부분에 ⑩번에서 생성한 access-key와 secret-key 값을 넣어주어야 한다.(중괄호는 넣지 않는다. 구분을 위해 작성된 것이다.)
spring:
servlet:
multipart:
max-request-size: 30MB
max-file-size: 30MB
datasource:
url: jdbc:mysql://{RDS엔드포인트}:3306/{초기데이터베이스 이름}?userSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=True
username : root
password : {비밀번호}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
generate-ddl: true
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
cloud:
aws:
s3:
bucket: {버킷이름}
region:
static: ap-northeast-2
stack:
auto: false
credentials:
access-key: {AccessKey}
secret-key: {SecretKey}
① @Value
② @Bean
※ @Configuration
이 어노테이션이 클래스에 적용되면, 해당 클래스는 스프링의 설정 파일 역할을 수행한다. 스프링은 @Configuration 어노테이션이 적용된 클래스를 스캔하여 컨테이너에 등록되는 빈(Bean) 설정 정보로 사용한다.
③ AmazonS3
④ AWSCredentials 객체
⑤ AmazonS3ClientBuilder
이번 시간에는 S3관련 설정에 대해서 다루어 보았다. 다음시간에는 S3에 대한 Service와 Repository, Controller에 대한 코드를 배워보기로 하자.