AWS SDK 사용 시 Credential 로드 정책에 관하여

wwlee94·2022년 11월 2일
0
post-thumbnail

2021년도에 정리했던 내용을 포스팅함.

AWS SDK Credential

AWS SDK의 다양한 서비스 (S3, KMS 등등)를 이용하려면, AWS Client를 생성하여 리소스에 Credential 정보가 반드시 필요함 !

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                       .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
                       .build();

별도의 인수를 제공하지 않고 기본값으로 새 서비스 클라이언트를 초기화하기 위해서는 AWS SDK for Java에서는 기본적으로 DefaultAWSCredentialsProviderChain 클래스의 기본 자격 증명 공급자 체인을 사용하여 AWS 자격 증명을 찾을 수 있다.

기본 자격 증명 공급자를 사용하면, 내부적으로 지정된 우선순위대로 찾게되고 조건을 만족하면 해당 값으로 자격증명을 로드한다.

Credential 로드 순서

AWS SDK for Java 2.x 버전 기준으로 DefaultAWSCredentialsProviderChain 는 다음과 같은 순서대로 Credential를 찾는다.

  1. 환경 변수

    • 환경 변수에 설정된 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 의 값을 가져온다.
    • AWS SDK for Java에서 사용하려면, EnvironmentVariableCredentialsProvider 클래스를 사용하여 자격 증명을 로드한다.
  2. 자바 시스템 프로퍼티

    • Java 시스템 프로퍼티는 VM options 에서 설정되는 -D 옵션으로 설정되는 값을 의미한다.
      java -jar application.jar -Dspring.active.profiles=??
      자바 시스템 프로퍼티에 설정된 aws.accessKeyIdaws.secretKey
      의 값을 가져온다.
    • AWS SDK for Java에서 사용하려면, SystemPropertiesCredentialsProvider 클래스를 사용하여 자격 증명을 로드한다.
  3. 기본 크리덴셜 프로필 파일

    • 일반적으로 ~/.aws/credentials (플랫폼마다 다를 수 있음)에 있으며 많은 AWS SDKs 및 AWS CLI에서 공유
      • AWS CLI에서 제공하는 aws configure 명령을 사용하여 자격 증명 파일을 생성하거나 텍스트 편집기에서 이 파일을 편집하여 새로 생성할 수 있음
      • 아래와 같은 형태로 생성되어 관리됨
        [default]
         aws_access_key_id = ?
         aws_secret_access_key = ?
    • AWS SDK for Java의 ProfileCredentialsProvider를 사용하여 자격 증명을 로드
  4. Amazon ECS 컨테이너 크리덴셜

    • 환경 변수 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 가 설정되면 Amazon ECS에서 로드
    • AWS SDK for Java의 ContainerCredentialsProvider 를 사용하여 자격 증명을 로드
      • 이 값에 대한 IP 주소를 지정할 수 있다.
  5. 인스턴스 프로파일 자격 증명 

    • 어플리케이션이 Amazon EC2 인스턴스에 실행되는 경우에만, 사용 가능하며 IAM과 연관된 메타데이터를 불러온다.
    • AWS SDK for Java의 InstanceProfileCredentialsProvider 를 사용하여 이러한 자격 증명을 로드
profile
우엉이의 개발 블로그 📝

0개의 댓글