CoNet 프로젝트 백엔드 파트 기록
AWS S3 (Simple Storage Service)
OverView
- AWS S3 bucket 설정
- AWS IAM user 생성
- Spring Project Setting
- 이미지 업로드 및 url 가져오기 (여기부터 다음 포스트)
- 이미지 삭제
- API Test
AWS
1. S3 Bucket 생성
1) 버킷 이름 & AWS 리전 설정
이름: 사용자 정의
리전: 아시아 태평양(서울) ap-northeast-2
2) 퍼블릭 액세스 허용 (차단 해제)
3) 객체 소유권 - ACL 활성화됨 선택
‘ACL이 복원된다는 것을 확인합니다.’
까지 선택
Trouble Shooting
- 비활성화하면 프로젝트에서 버킷에 업로드한 객체 접근이 안 됨
4) 버킷 정책
버킷에 저장된 객체에 대한 액세스 권한을 제공하는 정책
- json으로 작성됨
객체를 가져오고 업로드 하는 것에 대한 권한을 열어줌
{
"Version": "2012-10-17",
"Id": "<임의의 ID>",
"Statement": [
{
"Sid": "<임의의 Sid>",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::<버킷 이름>/*"
}
]
}
2. AWS IAM 계정 생성
1) IAM > 사용자 > 사용자 추가
2) 사용자 세부 정보 지정
사용자 이름만 입력한 후 ‘다음’
3) 권한 설정
직접 정책 연결 → AmazonS3FullAccess
선택
4) IAM access key, secret key
외부 접근 허용을 위한 key 발급
IAM > 사용자 > 생성한 사용자 > 보안 자격 증명 > 액세스 키 > 액세스 키 만들기
- ‘액세스 키 모범 사례 및 대안’은 사례를 보여주는 파트로 아무거나 선택해도 된다.
- access key, secret key 저장
- 꼭 저장해 둘 것
Spring Project Setting
1. build.gradle
// for AWS S3
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
2. application.yml
spring:
servlet:
multipart:
max-file-size: 50MB
max-request-size: 50MB
cloud:
aws:
s3:
bucket: <버킷 이름>
stack.auto: false
region:
static: ap-northeast-2
auto: false
credentials:
accessKey: <발급받은 accessKey>
secretKey: <발급받은 secretKey>
3. StorageConfig.java
@Configuration
public class StorageConfig {
@Value("${cloud.aws.credentials.accessKey}")
private String accessKey;
@Value("${cloud.aws.credentials.secretKey}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
@Bean
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client)AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
}
}
이렇게 하면 프로젝트에서 S3에 파일을 업로드하고 사용할 준비는 끝났다.
다음 포스트: 이미지 업로드 및 삭제