

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 의 기본 자격 증명 공급자 체인 AWS SDK for Java 2.x
<a name="credentials-chain"></a>

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

기본 자격 증명 공급자 체인은 [DefaultCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html) 클래스에 의해 구현됩니다. 다양한 위치에서 구성을 확인하는 다른 자격 증명 공급자 구현에 순차적으로 위임합니다. 모든 필수 구성 요소를 찾을 수 있는 첫 번째 자격 증명 공급자가 체인을 종료합니다.

기본 자격 증명 공급자 체인을 사용하여 임시 자격 증명을 제공하려면 서비스 클라이언트 빌더를 만들되 자격 증명 공급자는 지정하지 않습니다. 다음 코드 조각은 기본 자격 증명 공급자 체인을 사용하여 구성 설정을 찾고 검색하는 `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();
```

## 자격 증명 설정 검색 순서
<a name="credentials-default"></a>

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

1. Java 시스템 속성
   + SDK는 [SystemPropertyCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.html) 클래스를 사용하여, `aws.accessKeyId`, `aws.secretAccessKey`, 및 `aws.sessionToken` Java 시스템 속성에서 임시 자격 증명을 로드합니다.
**참고**  
Java 시스템 속성을 설정하는 방법에 대한 자세한 내용은 공식 *Java Tutorials* 웹 사이트의 [시스템 속성](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html) 자습서를 참조하세요.

1. 환경 변수
   + SDK는 [EnvironmentVariableCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/EnvironmentVariableCredentialsProvider.html) 클래스를 사용하여 `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` 및 `AWS_SESSION_TOKEN` 환경 변수에서 임시 자격 증명을 로드합니다.

1. 웹 ID 토큰 및 IAM 역할 ARN
   + SDK는 [WebIdentityTokenFileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/WebIdentityTokenFileCredentialsProvider.html) 클래스를 사용하여 웹 ID 토큰으로 역할을 수임해 자격 증명을 로드합니다.
   + 자격 증명 공급자는 다음 환경 변수 또는 JVM 시스템 속성을 찾습니다.
     + `AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile`
     + `AWS_ROLE_ARN` 또는 `aws.roleArn`
     + `AWS_ROLE_SESSION_NAME` 또는 `aws.roleSessionName`(선택 사항)
   + SDK는 값을 획득하면 AWS Security Token Service (STS)를 호출하고 반환되는 임시 자격 증명을 사용하여 요청에 서명합니다.
   + Amazon Elastic Kubernetes Service(EKS)와 같은 런타임 환경은 웹 자격 증명 토큰을 AWS SDKs에 자동으로 제공하여 애플리케이션이 임시 AWS 자격 증명을 얻을 수 있도록 합니다.

1. 공유 `credentials` 및 `config` 파일
   + SDK는 [ProfileCredentialsProvider를](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.html) 사용하여 IAM Identity Center 싱글 사인온 설정 또는 `[default]` 프로필의 임시 자격 증명을 공유 `credentials` 및 `config` 파일에 로드합니다.

      AWS SDKs 및 도구 참조 안내서에는 SDK for Java가 IAM Identity Center Single Sign-On 토큰과 함께 작동하여 SDK가 호출하는 데 사용하는 임시 자격 증명을 가져오는 방법에 대한 [자세한 정보가](https://docs.aws.amazon.com/sdkref/latest/guide/understanding-sso.html#idccredres) 나와 있습니다 AWS 서비스.
**참고**  
`credentials` 및 `config` 파일은 AWS SDKs 및 도구에서 공유됩니다. 자세한 정보는 AWS SDK 및 도구 참조 가이드의 [.aws/credentials 및 .aws/config 파일](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)을 참조하세요.
   + 공유 `credentials` 및 `config` 파일의 프로파일에는 많은 다양한 설정 세트가 포함될 수 있으므로 `ProfileCredentialsProvider`는 일련의 다른 공급자에 위임하여 `[default]` 프로파일에서 설정을 찾습니다.
     + **웹 ID 토큰 자격 증명**(`WebIdentityTokenCredentialsProvider` 클래스): 프로파일에 `role_arn`, `web_identity_token_file`이 포함된 경우
     + **SSO 자격 증명**(`SsoCredentialsProvider` 클래스): 프로파일에 `sso_role_name`, `sso_account_id`와 같은 SSO 관련 속성이 포함된 경우
     + **소스 프로파일이 있는 역할 기반 자격 증명**(`StsAssumeRoleCredentialsProvider` 클래스): 프로파일에 `role_arn`, `source_profile`이 포함된 경우
     + **자격 증명 소스가 있는 역할 기반 자격 증명**(`StsAssumeRoleWithSourceCredentialsProvider` 클래스): 프로파일에 `role_arn`, `credential_source`가 포함된 경우 
       + `credential_source = Environment`인 경우: `SystemPropertyCredentialsProvider`, `EnvironmentVariableCredentialsProvider`의 체인 사용
       + `credential_source = Ec2InstanceMetadata`인 경우: `InstanceProfileCredentialsProvider` 사용
       + `credential_source = EcsContainer`인 경우: `ContainerCredentialsProvider` 사용
     + **콘솔 로그인 자격 증명**(클래스 `LoginCredentialsProvider`): 프로파일에가 포함된 경우 `login_session` 
     + **프로세스 자격 증명**(`ProcessCredentialsProvider` 클래스): 프로파일에 `credential_process`가 포함된 경우
     + **세션 자격 증명**(`StaticSessionCredentialsProvider` 클래스): 프로파일에 `aws_access_key_id`, `aws_secret_access_key`, `aws_session_token`이 포함된 경우
     + **기본 자격 증명**(`StaticCredentialsProvider` 클래스): 프로파일에 `aws_access_key_id` 및 `aws_secret_access_key`가 포함된 경우

1.  Amazon ECS 컨테이너 자격 증명
   + SDK는 [ContainerCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ContainerCredentialsProvider.html) 클래스를 사용하여 다음 환경 변수로 임시 자격 증명을 로드합니다.

     1. `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` 또는 `AWS_CONTAINER_CREDENTIALS_FULL_URI`

     1. `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` 또는 `AWS_CONTAINER_AUTHORIZATION_TOKEN`

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

1.  Amazon EC2 인스턴스 IAM 역할 제공 자격 증명
   + SDK는 [InstanceProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/InstanceProfileCredentialsProvider.html) 클래스를 사용하여 Amazon EC2 메타데이터 서비스에서 임시 자격 증명을 로드합니다.

1. 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` 사용
<a name="default-credentials-provider-in-code"></a>

코드에서 기본 자격 증명 공급자 체인을 명시적으로 사용할 수 있습니다. 이는 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();
```

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