Rantai penyedia kredensi default di AWS SDK for Java 2.x - AWS SDK for Java 2.x

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

Rantai penyedia kredensi default dalam pencarian AWS kredensional 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 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 kredensial default untuk menyediakan kredensional 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

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 SystemPropertyCredentialsProviderkelas untuk memuat kredensi sementara dari properti sistemaws.accessKeyId,aws.secretAccessKey, dan aws.sessionToken Java.

      catatan

      Untuk informasi tentang cara mengatur properti sistem Java, lihat tutorial System Properties di situs web resmi Java Tutorial.

  2. Variabel-variabel lingkungan

  3. Token identitas web dan peran IAM ARN

    • SDK menggunakan WebIdentityTokenFileCredentialsProviderkelas 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_NAMEatau 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

  4. Yang dibagikan credentials dan config file

    • SDK menggunakan pengaturan masuk tunggal IAM Identity Center atau kredensional sementara dari [default] profil di file bersama dan file. ProfileCredentialsProvidercredentialsconfig

      Panduan Referensi AWS SDKs and Tools memiliki informasi terperinci 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

      configFile credentials dan dibagikan oleh berbagai AWS SDKs dan Alat. Untuk informasi lebih lanjut, lihat The. aws/credentials and .aws/configfile 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:

      • Kredensi dasar (kelasStaticCredentialsProvider): Ketika profil berisi aws_access_key_id dan. aws_secret_access_key

      • Kredensial sesi (kelasStaticSessionCredentialsProvider): Ketika profil berisiaws_access_key_id,aws_secret_access_key, dan. aws_session_token

      • Kredensi proses (kelasProcessCredentialsProvider): Ketika profil berisi. credential_process

      • Kredensial SSO (kelasSsoCredentialsProvider): Ketika profil berisi properti terkait SSO seperti,. sso_role_name sso_account_id

      • Kredensial token identitas web (kelasWebIdentityTokenCredentialsProvider): Ketika profil berisi role_arn dan. web_identity_token_file

      • Kredensial berbasis peran dengan profil sumber (kelasStsAssumeRoleCredentialsProvider): Ketika profil berisi dan. role_arn source_profile

      • Kredensial berbasis peran dengan sumber kredensi (kelasStsAssumeRoleWithSourceCredentialsProvider): Saat profil berisi dan. role_arn credential_source

        • Kapancredential_source = Environment: Menggunakan rantai SystemPropertyCredentialsProvider dan EnvironmentVariableCredentialsProvider

        • Kapancredential_source = Ec2InstanceMetadata: Ini menggunakan InstanceProfileCredentialsProvider

        • Kapancredential_source = EcsContainer: Ini menggunakan ContainerCredentialsProvider

  5. Amazon ECS kredensi kontainer

    • SDK menggunakan ContainerCredentialsProviderkelas untuk memuat kredenal sementara menggunakan variabel lingkungan berikut:

      1. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI atau AWS_CONTAINER_CREDENTIALS_FULL_URI

      2. 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.

  6. Amazon EC2 kredensi yang disediakan peran IAM misalnya

  7. 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

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 kredensil 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 memberikan konfigurasi lebih lanjut:

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.