AWS SDK for Java 2.x의 기본 자격 증명 공급자 체인 - AWS SDK for Java 2.x

AWS SDK for Java 2.x의 기본 자격 증명 공급자 체인

AWS SDK for Java 2.x의 기본 자격 증명 공급자 체인은 미리 정의된 위치 시퀀스에서 AWS 자격 증명을 자동으로 검색하므로 애플리케이션이 자격 증명 소스를 명시적으로 지정하지 않고 AWS 서비스로 인증할 수 있습니다.

기본 자격 증명 공급자 체인은 DefaultCredentialsProvider 클래스에 의해 구현됩니다. 다양한 위치에서 구성을 확인하는 다른 자격 증명 공급자 구현에 순차적으로 위임합니다. 모든 필수 구성 요소를 찾을 수 있는 첫 번째 자격 증명 공급자가 체인을 종료합니다.

기본 자격 증명 공급자 체인을 사용하여 임시 자격 증명을 제공하려면 서비스 클라이언트 빌더를 만들되 자격 증명 공급자는 지정하지 않습니다. 다음 코드 조각은 기본 자격 증명 공급자 체인을 사용하여 구성 설정을 찾고 검색하는 DynamoDbClient를 만듭니다.

// Any external Region configuration is overridden. // The SDK uses the default credentials provider chain because no specific credentials provider is specified. Region region = Region.US_WEST_2; DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build();

자격 증명 설정 검색 순서

Java 2.x용 SDK의 기본 자격 증명 공급자 체인은 사전 정의된 시퀀스를 사용하여 사용자 환경의 구성을 검색합니다.

  1. Java 시스템 속성

    • SDK는 SystemPropertyCredentialsProvider 클래스를 사용하여, aws.accessKeyId, aws.secretAccessKey, 및 aws.sessionToken Java 시스템 속성에서 임시 자격 증명을 로드합니다.

      참고

      Java 시스템 속성을 설정하는 방법에 대한 자세한 내용은 공식 Java Tutorials 웹 사이트의 시스템 속성 자습서를 참조하세요.

  2. 환경 변수

    • SDK는 EnvironmentVariableCredentialsProvider 클래스를 사용하여 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN 환경 변수에서 임시 자격 증명을 로드합니다.

  3. 웹 ID 토큰 및 IAM 역할 ARN

    • SDK는 WebIdentityTokenFileCredentialsProvider 클래스를 사용하여 웹 ID 토큰으로 역할을 수임해 자격 증명을 로드합니다.

    • 자격 증명 공급자는 다음 환경 변수 또는 JVM 시스템 속성을 찾습니다.

      • AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile

      • AWS_ROLE_ARN‘or’aws.roleArn

      • AWS_ROLE_SESSION_NAME 또는 aws.roleSessionName(선택 사항)

    • SDK는 값을 획득하면 AWS Security Token Service(STS)를 호출하고 반환되는 임시 자격 증명을 사용하여 요청에 서명합니다.

    • Amazon Elastic Kubernetes Service(EKS)와 같은 런타임 환경은 AWS SDK에 웹 ID 토큰을 자동으로 제공하여 애플리케이션이 임시 AWS 자격 증명을 얻을 수 있도록 합니다.

  4. 공유 credentialsconfig 파일

    • SDK는 ProfileCredentialsProvider를 사용하여 IAM Identity Center 싱글 사인온 설정 또는 [default] 프로필의 임시 자격 증명을 공유 credentialsconfig 파일에 로드합니다.

      AWS SDK 및 도구 참조 안내서에는 Java용 SDK가 IAM Identity Center 싱글 사인온 토큰을 사용하여 SDK가 AWS 서비스을 호출하는 데 사용하는 임시 자격 증명을 가져오는 방법에 대한 자세한 정보 가있습니다.

      참고

      credentialsconfig 파일은 다양한 AWS SDK 및 도구에서 공유됩니다. 자세한 정보는 AWS SDK 및 도구 참조 가이드의 .aws/credentials 및 .aws/config 파일을 참조하세요.

    • 공유 credentialsconfig 파일의 프로파일에는 많은 다양한 설정 세트가 포함될 수 있으므로 ProfileCredentialsProvider는 일련의 다른 공급자에 위임하여 [default] 프로파일에서 설정을 찾습니다.

      • 기본 자격 증명(StaticCredentialsProvider 클래스): 프로파일에 aws_access_key_idaws_secret_access_key가 포함된 경우

      • 세션 자격 증명(StaticSessionCredentialsProvider 클래스): 프로파일에 aws_access_key_id, aws_secret_access_key, aws_session_token이 포함된 경우

      • 프로세스 자격 증명(ProcessCredentialsProvider 클래스): 프로파일에 credential_process가 포함된 경우

      • SSO 자격 증명(SsoCredentialsProvider 클래스): 프로파일에 sso_role_name, sso_account_id와 같은 SSO 관련 속성이 포함된 경우

      • 웹 ID 토큰 자격 증명(WebIdentityTokenCredentialsProvider 클래스): 프로파일에 role_arn, web_identity_token_file이 포함된 경우

      • 소스 프로파일이 있는 역할 기반 자격 증명(StsAssumeRoleCredentialsProvider 클래스): 프로파일에 role_arn, source_profile이 포함된 경우

      • 자격 증명 소스가 있는 역할 기반 자격 증명(StsAssumeRoleWithSourceCredentialsProvider 클래스): 프로파일에 role_arn, credential_source가 포함된 경우

        • credential_source = Environment인 경우: SystemPropertyCredentialsProvider, EnvironmentVariableCredentialsProvider의 체인 사용

        • credential_source = Ec2InstanceMetadata인 경우: InstanceProfileCredentialsProvider 사용

        • credential_source = EcsContainer인 경우: ContainerCredentialsProvider 사용

  5. Amazon ECS 컨테이너 자격 증명

    • SDK는 ContainerCredentialsProvider 클래스를 사용하여 다음 환경 변수로 임시 자격 증명을 로드합니다.

      1. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 또는 AWS_CONTAINER_CREDENTIALS_FULL_URI

      2. AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE‘or’AWS_CONTAINER_AUTHORIZATION_TOKEN

    ECS 컨테이너 에이전트는 ECS 자격 증명 엔드포인트를 가리키는 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 환경 변수를 자동으로 설정합니다. 일반적으로 다른 환경 변수는 표준 ECS 자격 증명 엔드포인트가 사용되지 않는 특정 시나리오에서 설정됩니다.

  6. Amazon EC2 인스턴스 IAM 역할 제공 자격 증명

  7. SDK가 위에 나열된 모든 단계를 통해 필요한 구성 설정을 찾을 수 없는 경우 다음과 비슷한 출력이 포함된 예외가 발생합니다.

    software.amazon.awssdk.core.exception.SdkClientException: Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()])

코드에서 DefaultCredentialsProvider 사용

코드에서 기본 자격 증명 공급자 체인을 명시적으로 사용할 수 있습니다. 이는 SDK가 기본적으로 DefaultCredentialsProvider를 사용하기 때문에 자격 증명 공급자를 전혀 지정하지 않는 것과 기능적으로 동일합니다. 그러나 명시적으로 사용하면 코드를 더 읽기 쉽고 자체적으로 문서화할 수 있습니다. 기본 자격 증명 체인을 사용하려는 의도를 명확하게 보여줍니다.

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; public class ExplicitDefaultCredentialsExample { public static void main(String[] args) { // Explicitly create the DefaultCredentialsProvider. DefaultCredentialsProvider defaultCredentialsProvider = DefaultCredentialsProvider .builder().build(); // Use it with any service client. S3Client s3Client = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(defaultCredentialsProvider) .build(); // Now you can use the client with the default credentials chain. s3Client.listBuckets(); } }

기본 자격 증명 공급자를 구축할 때 추가 구성을 제공할 수 있습니다.

DefaultCredentialsProvider customizedProvider = DefaultCredentialsProvider.builder() .profileName("custom-profile") // Use a specific profile if the chain gets to the `ProfileCredentialsProvider` stage. .asyncCredentialUpdateEnabled(true) // Enable async credential updates. .build();

이 접근 방식을 사용하면 기본 자격 증명 체인의 편의성을 유지하면서 더 많은 제어 권한을 얻을 수 있습니다.