

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

# Penyedia kredensyal
<a name="credential-providers"></a>

****  
**Urutan di mana rantai penyedia kredensyal default menyelesaikan kredensyal diubah dengan versi 1.4.0 Untuk detailnya, lihat catatan di bawah ini.**

Saat Anda mengirim permintaan ke Amazon Web Services menggunakan AWS SDK untuk Kotlin, permintaan harus ditandatangani secara kriptografis dengan kredensyal yang dikeluarkan oleh. AWS Kotlin SDK menandatangani permintaan secara otomatis untuk Anda. Untuk memperoleh kredensialnya, SDK dapat menggunakan pengaturan konfigurasi yang terletak di beberapa tempat, misalnya properti sistem JVM, variabel lingkungan, file bersama AWS `config` dan file, `credentials` dan metadata instans Amazon EC2.

SDK menggunakan abstraksi *penyedia kredensyal* untuk menyederhanakan proses pengambilan kredensyal dari berbagai sumber. SDK berisi [beberapa implementasi penyedia kredensional.](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/aws-config/aws.sdk.kotlin.runtime.auth.credentials/index.html)

Misalnya, Jika konfigurasi yang diambil menyertakan setelan akses masuk tunggal Pusat Identitas IAM dari `config` file bersama, SDK bekerja dengan Pusat Identitas IAM untuk mengambil kredenal sementara yang digunakan untuk membuat permintaan. Layanan AWS Dengan pendekatan ini untuk memperoleh kredensyal, SDK menggunakan penyedia IAM Identity Center (juga dikenal sebagai penyedia kredensyal SSO). [Bagian penyiapan](setup-basic-onetime-setup.md#setup-sso-access) panduan ini menjelaskan konfigurasi ini.

Untuk menggunakan penyedia kredensyal tertentu, Anda dapat menentukannya saat membuat klien layanan. Atau, Anda dapat menggunakan rantai penyedia kredensyal default untuk mencari pengaturan konfigurasi secara otomatis.

## Rantai penyedia kredensyal default
<a name="default-credential-provider-chain"></a>

Jika tidak ditentukan secara eksplisit pada konstruksi klien, SDK untuk Kotlin menggunakan penyedia kredensyal yang secara berurutan memeriksa setiap tempat di mana Anda dapat menyediakan kredensyal. Penyedia kredensyal default ini diimplementasikan sebagai rantai penyedia kredensyal.

Untuk menggunakan rantai default untuk menyediakan kredensyal dalam aplikasi Anda, buat klien layanan tanpa menyediakan properti secara eksplisit. `credentialsProvider`

```
val ddb = DynamoDbClient {
    region = "us-east-2"
}
```

Untuk informasi selengkapnya tentang pembuatan klien layanan, lihat [membangun dan mengonfigurasi klien](creating-clients.md).

### Pelajari tentang rantai penyedia kredensial default
<a name="default-credentials-retrieval-order"></a>

Rantai penyedia kredensyal default mencari konfigurasi kredensyal menggunakan urutan yang telah ditentukan berikut. Ketika pengaturan yang dikonfigurasi memberikan kredensyal yang valid, rantai berhenti.

**1. [AWS kunci akses (properti sistem JVM)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
SDK mencari properti sistem`aws.accessKeyId`,`aws.secretAccessKey`, dan `aws.sessionToken` JVM.

**2. [AWS kunci akses (variabel lingkungan)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)**  
SDK mencoba memuat kredensyal dari variabel `AWS_ACCESS_KEY_ID` dan`AWS_SECRET_ACCESS_KEY`, dan `AWS_SESSION_TOKEN` lingkungan.

**3. [Token identitas web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html)**  
SDK mencari variabel lingkungan `AWS_WEB_IDENTITY_TOKEN_FILE` dan `AWS_ROLE_ARN` (atau properti `aws.webIdentityTokenFile` sistem JVM dan). `aws.roleArn` Berdasarkan informasi token dan perannya, SDK memperoleh kredensyal sementara.

**4. [Profil dalam file konfigurasi](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)**  
Pada langkah ini, SDK menggunakan pengaturan yang terkait dengan profil. Secara default, SDK menggunakan `credentials` file bersama AWS `config` dan, tetapi jika variabel `AWS_CONFIG_FILE` lingkungan disetel, SDK menggunakan nilai itu. Jika variabel `AWS_PROFILE` lingkungan (atau properti sistem `aws.profile` JVM) *tidak* disetel, SDK mencari profil “default”, jika tidak maka akan mencari profil yang cocok dengan nilai. `AWS_PROFILE’s`   
SDK mencari profil berdasarkan konfigurasi yang dijelaskan dalam paragraf sebelumnya dan menggunakan pengaturan yang ditentukan di sana. Jika setelan yang ditemukan oleh SDK berisi campuran setelan untuk pendekatan penyedia kredensyal yang berbeda, SDK menggunakan urutan berikut:  

1. [AWS tombol akses (file konfigurasi)](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html) - SDK menggunakan pengaturan untuk`aws_access_key_id`,`aws_access_key_id`, dan`aws_session_token`.

1. [Asumsikan konfigurasi peran](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role.html) - Jika SDK menemukan `role_arn` dan `source_profile` atau `credential_source` pengaturan, SDK mencoba untuk mengambil peran. Jika SDK menemukan `source_profile` setelan, SDK akan mendapatkan kredensyal dari profil lain untuk menerima kredensyal sementara untuk peran yang ditentukan oleh. `role_arn` Jika SDK menemukan `credential_source` setelan, SDK akan mendapatkan kredensyal dari wadah Amazon ECS, instans Amazon EC2, atau dari variabel lingkungan tergantung pada nilai setelan. `credential_source` Kemudian menggunakan kredensil tersebut untuk memperoleh kredensil sementara untuk peran tersebut.

   Profil harus berisi `source_profile` pengaturan atau `credential_source` pengaturan, tetapi tidak keduanya.

1. [Konfigurasi token identitas web](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role-web.html) - Jika SDK menemukan `role_arn` dan `web_identity_token_file` mengatur, ia memperoleh kredensyal sementara untuk mengakses AWS sumber daya berdasarkan dan token. `role_arn`

1. [Konfigurasi token SSO](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) - Jika SDK menemukan`sso_session`,`sso_account_id`, `sso_role_name` pengaturan (bersama dengan `sso-session` bagian pendamping dalam file konfigurasi), SDK mengambil kredensi sementara dari layanan Pusat Identitas IAM.

1. [Konfigurasi SSO lama](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) - Jika SDK menemukan` sso_start_url`,,, dan `sso_role_name` pengaturan `sso_region``sso_account_id`, SDK mengambil kredensyal sementara dari layanan Pusat Identitas IAM.

1. [Konfigurasi login](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-legacy) - Jika SDK menemukan `login_session` setelan, SDK menggunakan kredensyal sementara dari sesi login, atau mencoba untuk menyegarkannya jika kedaluwarsa dalam waktu kurang dari 5 menit. Untuk mempelajari cara memulai sesi login, lihat panduan [pengguna AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html).

1. [Konfigurasi proses](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html) - Jika SDK menemukan `credential_process` setelan, SDK menggunakan nilai jalur untuk memanggil proses dan memperoleh kredensyal sementara.

**5. [Kredensyal kontainer](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)**  
SDK mencari variabel lingkungan `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` atau `AWS_CONTAINER_CREDENTIALS_FULL_URI` dan `AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE` atau`AWS_CONTAINER_AUTHORIZATION_TOKEN`. Ini menggunakan nilai-nilai ini untuk memuat kredensyal dari titik akhir HTTP yang ditentukan melalui permintaan GET. 

**6. [Kredensyal IMDS](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html)**  
SDK mencoba mengambil kredensyal dari [Layanan Metadata Instance di titik akhir HTTP default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) atau yang dikonfigurasi. SDK hanya mendukung [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html).

Jika kredensyal masih belum diselesaikan pada saat ini, pembuatan klien gagal dengan pengecualian.

**Catatan: Ubah urutan resolusi kredensil**  
Urutan resolusi kredensyal yang dijelaskan di atas adalah terkini untuk `1.4.x+` rilis SDK untuk Kotlin. Sebelum `1.4.0` rilis, item nomor 3 dan 4 diaktifkan dan item 4a saat ini mengikuti item 4g saat ini.

## Tentukan penyedia kredensyal
<a name="explicit-credential-provider"></a>

Anda dapat menentukan penyedia kredensyal alih-alih menggunakan rantai penyedia default. Pendekatan ini memberi Anda kontrol langsung atas kredensi mana yang digunakan SDK.

Misalnya, untuk menggunakan kredensyal untuk peran IAM yang diasumsikan, tentukan `StsAssumeRoleCredentialsProvider` kapan Anda membuat klien:

```
val ddb = DynamoDbClient {
    region = "us-east-1"
    credentialsProvider = StsAssumeRoleCredentialsProvider()
}
```

Anda juga dapat membuat rantai kustom (`CredentialsProviderChain`) yang menggabungkan beberapa penyedia dalam pesanan pilihan Anda.

### Cache kredensyal dengan penyedia mandiri
<a name="credentials-caching"></a>

**penting**  
Rantai default menyimpan kredensil secara otomatis. Penyedia mandiri tidak menyimpan kredensyal cache. Untuk menghindari pengambilan kredensyal pada setiap panggilan API, bungkus penyedia Anda dengan file. `CachedCredentialsProvider` Penyedia yang di-cache mengambil kredensil baru hanya ketika kredensi saat ini kedaluwarsa.

Untuk menyimpan kredensi cache dengan penyedia mandiri, gunakan kelas: `CachedCredentialsProvider`

```
val ddb = DynamoDbClient {
     region = "us-east-1"
     credentialsProvider = CachedCredentialsProvider(StsAssumeRoleCredentialsProvider())
 }
```

 Atau, gunakan fungsi `cached()` ekstensi untuk kode yang lebih ringkas:

```
val ddb = DynamoDbClient {
      region = "us-east-1"
      credentialsProvider = StsAssumeRoleCredentialsProvider().cached()
 }
```