

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Rantai penyedia kredensi default di AWS SDK for Java 2.x
<a name="credentials-chain"></a>

Rantai penyedia kredensi default dalam pencarian AWS kredensil AWS SDK for Java 2.x secara otomatis dalam urutan lokasi yang telah ditentukan sebelumnya, memungkinkan aplikasi untuk mengautentikasi dengan tanpa secara eksplisit menentukan sumber kredensi. Layanan AWS 

Rantai penyedia kredensi default diimplementasikan oleh kelas. [DefaultCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html) Ini secara berurutan mendelegasikan ke implementasi penyedia kredensional lain yang memeriksa konfigurasi di berbagai lokasi. Penyedia kredensi pertama yang dapat menemukan semua elemen konfigurasi yang diperlukan menyebabkan rantai berakhir.

Untuk menggunakan rantai penyedia kredensi default untuk menyediakan kredensil sementara, buat pembuat klien layanan tetapi jangan tentukan penyedia kredensional. Cuplikan kode berikut membuat `DynamoDbClient` yang menggunakan rantai penyedia kredensial default untuk mencari dan mengambil pengaturan konfigurasi.

```
// 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();
```

## Urutan pengambilan setelan kredensialnya
<a name="credentials-default"></a>

Rantai penyedia kredensial default SDK for Java 2.x mencari konfigurasi di lingkungan Anda menggunakan urutan yang telah ditentukan sebelumnya.

1. Properti sistem Java
   + SDK menggunakan [SystemPropertyCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/SystemPropertyCredentialsProvider.html)kelas untuk memuat kredensi sementara dari properti sistem`aws.accessKeyId`,`aws.secretAccessKey`, dan `aws.sessionToken` Java.
**catatan**  
Untuk informasi tentang cara mengatur properti sistem Java, lihat tutorial [System Properties](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html) di situs web resmi *Java Tutorial*.

1. Variabel-variabel lingkungan
   + SDK menggunakan [EnvironmentVariableCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/EnvironmentVariableCredentialsProvider.html)kelas untuk memuat kredenal sementara dari variabel`AWS_ACCESS_KEY_ID`,`AWS_SECRET_ACCESS_KEY`, dan `AWS_SESSION_TOKEN` lingkungan.

1. Token identitas web dan peran IAM ARN
   + SDK menggunakan [WebIdentityTokenFileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/WebIdentityTokenFileCredentialsProvider.html)kelas untuk memuat kredensil dengan mengasumsikan peran menggunakan token identitas web.
   + Penyedia kredensial mencari variabel lingkungan berikut atau properti sistem JVM:
     + `AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile`
     + `AWS_ROLE_ARN` atau `aws.roleArn`
     + `AWS_ROLE_SESSION_NAME`atau `aws.roleSessionName` (opsional)
   + Setelah SDK memperoleh nilai, ia memanggil AWS Security Token Service (STS) dan menggunakan kredensil sementara yang dikembalikan untuk menandatangani permintaan.
   + Lingkungan runtime seperti Amazon Elastic Kubernetes Service (EKS) secara otomatis membuat token identitas web AWS SDKs tersedia, memungkinkan aplikasi memperoleh kredensi sementara. AWS 

1. Yang dibagikan `credentials` dan `config` file
   + SDK menggunakan pengaturan masuk tunggal IAM Identity Center atau kredensil sementara dari `[default]` profil di file bersama dan file. [ProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.html)`credentials``config` 

     Panduan Referensi AWS SDKs and Tools memiliki [informasi terperinci](https://docs.aws.amazon.com/sdkref/latest/guide/understanding-sso.html#idccredres) tentang cara kerja SDK for Java dengan token masuk tunggal IAM Identity Center untuk mendapatkan kredenal sementara yang digunakan SDK untuk memanggil. Layanan AWS
**catatan**  
`config`File `credentials` dan dibagikan oleh berbagai AWS SDKs dan Alat. Untuk informasi lebih lanjut, lihat [The. aws/credentials and .aws/config](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)file di Panduan Referensi Alat AWS SDKs dan.
   + Karena profil di berbagi `credentials` dan `config` file dapat berisi banyak set pengaturan yang berbeda, `ProfileCredentialsProvider` delegasi ke serangkaian penyedia lain untuk mencari pengaturan di bawah `[default]` profil:
     + **Kredensial token identitas web** (kelas`WebIdentityTokenCredentialsProvider`): Ketika profil berisi `role_arn` dan. `web_identity_token_file`
     + **Kredensial SSO** (kelas`SsoCredentialsProvider`): Ketika profil berisi properti terkait SSO seperti,. `sso_role_name` `sso_account_id`
     + **Kredensial berbasis peran dengan profil sumber** (kelas`StsAssumeRoleCredentialsProvider`): Ketika profil berisi dan. `role_arn` `source_profile`
     + **Kredensial berbasis peran dengan sumber kredensi** (kelas`StsAssumeRoleWithSourceCredentialsProvider`): Saat profil berisi dan. `role_arn` `credential_source` 
       + Kapan`credential_source = Environment`: Menggunakan rantai `SystemPropertyCredentialsProvider` dan `EnvironmentVariableCredentialsProvider`
       + Kapan`credential_source = Ec2InstanceMetadata`: Ini menggunakan `InstanceProfileCredentialsProvider`
       + Kapan`credential_source = EcsContainer`: Ini menggunakan `ContainerCredentialsProvider`
     + **Kredensial login konsol** (kelas`LoginCredentialsProvider`): Saat profil berisi `login_session` 
     + **Kredensi proses** (kelas`ProcessCredentialsProvider`): Ketika profil berisi. `credential_process`
     + **Kredensial sesi** (kelas`StaticSessionCredentialsProvider`): Ketika profil berisi`aws_access_key_id`,`aws_secret_access_key`, dan. `aws_session_token`
     + **Kredensi dasar** (kelas`StaticCredentialsProvider`): Ketika profil berisi `aws_access_key_id` dan. `aws_secret_access_key`

1.  Amazon ECS kredensi kontainer
   + SDK menggunakan [ContainerCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ContainerCredentialsProvider.html)kelas untuk memuat kredenal sementara menggunakan variabel lingkungan berikut:

     1. `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` atau `AWS_CONTAINER_CREDENTIALS_FULL_URI`

     1. `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` atau `AWS_CONTAINER_AUTHORIZATION_TOKEN`

   Agen kontainer ECS secara otomatis menetapkan variabel `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` lingkungan, yang menunjuk ke titik akhir kredensi ECS. Variabel lingkungan lainnya biasanya diatur dalam skenario tertentu di mana titik akhir kredensi ECS standar tidak digunakan.

1.  Amazon EC2 kredensi yang disediakan peran IAM misalnya
   + SDK menggunakan [InstanceProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/InstanceProfileCredentialsProvider.html)kelas untuk memuat kredensil sementara dari layanan metadata. Amazon EC2 

1. Jika SDK tidak dapat menemukan pengaturan konfigurasi yang diperlukan melalui semua langkah yang tercantum di atas, SDK akan menampilkan pengecualian dengan output yang mirip dengan berikut ini:

   ```
   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()])
   ```

## Gunakan kode `DefaultCredentialsProvider` dalam
<a name="default-credentials-provider-in-code"></a>

Anda dapat secara eksplisit menggunakan rantai penyedia kredensi default dalam kode Anda. Ini secara fungsional setara dengan Anda yang tidak menentukan penyedia kredensional sama sekali, karena SDK digunakan secara default. `DefaultCredentialsProvider` Namun, menggunakannya secara eksplisit dapat membuat kode Anda lebih mudah dibaca dan didokumentasikan sendiri. Ini jelas menunjukkan niat Anda untuk menggunakan rantai kredensional default.

```
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();
    }
}
```

Saat Anda membangun penyedia kredensi default, Anda dapat menyediakan lebih banyak konfigurasi:

```
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();
```

Pendekatan ini memberi Anda lebih banyak kontrol sambil tetap memberikan kenyamanan rantai kredensil default.