AWS SDK Credential 설정
파일 업로드 기능을 AWS S3를 이용하여 구현하였다.
S3 연동을 위해서는 AWS Client를 생성하여 리소스에 Credential 정보를 설정해야한다.
application.yml 에 IAM의 access key와 secret key를 넣어놓고
AWS SDK의 AWSStaticCredentialsProvider를 통해 Credential을 생성하였다.
후에 프로젝트 피드백을 다음과 같이 받았다.
S3Config에서 AWSStaticCredentialsProvider보다는 DefaultCredentialProviderChain를 이용하는 것이 더 좋습니다. (체이닝 방식으로 IAM 권한을 순차적으로 확인하여 서비스 운영 환경이 여러 개여도 코드는 한줄로 대응이 가능합니다.) 예) 환경변수 -> {사용자 디렉토리}/.aws/credential -> ECS 등이라면, SES를 통해 얻은 임시 자격 증명 사용
요약하자면
서버 프로퍼티로 민감정보를 저장해서 만들지말고 SDK에서 체이닝하여 권한을 확인하는 `DefaultAWSCredentialsProviderChain` 을 이용하여 Credential 정보를 생성하자이다.
DefaultAWSCredentialsProviderChain
코드작성은 다음과 같다.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.build();
AWS SDK for Java 2.x 버전 기준으로 `DefaultAWSCredentialsProviderChain`는 다음과 같은 순서대로
Credential을 찾는다.
환경 변수
환경 변수에 설정된 AWS_ACCESS_KEY_ID 와 AWS_SECRET_ACCESS_KEY 의 값을 가져온다.
AWS SDK for Java에서 사용하려면, EnvironmentVariableCredentialsProvider 클래스를 사용하여 자격 증명을 로드한다.
자바 시스템 프로퍼티
Java 시스템 프로퍼티는 VM options 에서 설정되는 -D 옵션으로 설정되는 값을 의미한다.
java -jar application.jar -Dspring.active.profiles=??
자바 시스템 프로퍼티에 설정된 aws.accessKeyId 와 aws.secretKey
의 값을 가져온다.
AWS SDK for Java에서 사용하려면, SystemPropertiesCredentialsProvider 클래스를 사용하여 자격 증명을 로드한다.
기본 Credential 프로필 파일
- 일반적으로 ~/.aws/credentials (플랫폼마다 다를 수 있음)에 있으며 많은 AWS SDKs 및 AWS CLI에서 공유한다.
- AWS CLI에서 제공하는 aws configure 명령을 사용하여 자격 증명 파일을 생성하거나 텍스트 편집기에서
이 파일을 편집하여 새로 생성할 수 있음 - 아래와 같은 형태로 생성되어 관리됨
- AWS CLI에서 제공하는 aws configure 명령을 사용하여 자격 증명 파일을 생성하거나 텍스트 편집기에서
[default]
aws_access_key_id = ?
aws_secret_access_key = ?
AWS SDK for Java의 ProfileCredentialsProvider를 사용하여 자격 증명을 로드
Amazon ECS 컨테이너 크리덴셜
- 환경 변수 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 가 설정되면 Amazon ECS에서 로드
- AWS SDK for Java의 ContainerCredentialsProvider 를 사용하여 자격 증명을 로드
- 이 값에 대한 IP 주소를 지정할 수 있다.
인스턴스 프로파일 자격 증명
- 어플리케이션이 Amazon EC2 인스턴스에 실행되는 경우에만, 사용 가능하며 IAM과 연관된 메타데이터를 불러온다.
- AWS SDK for Java의 InstanceProfileCredentialsProvider 를 사용하여 이러한 자격 증명을 로드
'TIL' 카테고리의 다른 글
2023.01.02 TIL - DTO 역직렬화 문제 (no delegate- or property-based Creator) (1) | 2024.01.03 |
---|---|
2023.12.20 TIL - JPA - deleteAll() / deleteAllInBatch() (0) | 2023.12.20 |
2023.12.18 TIL (2) | 2023.12.18 |
2023.12.13 TIL (0) | 2023.12.13 |
2023.12.12 TIL - PostgreSQL 알아두면 좋은 명령어 (0) | 2023.12.12 |