Catena di fornitori di credenziali predefinita in AWS SDK for Java 2.x - AWS SDK for Java 2.x

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Catena di fornitori di credenziali predefinita in AWS SDK for Java 2.x

La catena di provider di credenziali predefinita cerca AWS SDK for Java 2.x automaticamente le AWS credenziali in una sequenza di posizioni predefinita, consentendo alle applicazioni di autenticarsi senza specificare esplicitamente Servizi AWS le fonti delle credenziali.

La catena di provider di credenziali predefinita è implementata dalla classe. DefaultCredentialsProvider Delega in sequenza ad altri provider di credenziali le implementazioni che controllano la configurazione in varie posizioni. Il primo provider di credenziali in grado di trovare tutti gli elementi di configurazione necessari causa la fine della catena.

Per utilizzare la catena di fornitori di credenziali predefinita per fornire credenziali temporanee, create un service client builder ma non specificate un provider di credenziali. Il seguente frammento di codice crea una catena DynamoDbClient che utilizza la catena di provider di credenziali predefinita per individuare e recuperare le impostazioni di configurazione.

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

Ordine di recupero delle impostazioni delle credenziali

La catena di provider di credenziali predefinita di SDK for Java 2.x cerca la configurazione nell'ambiente utilizzando una sequenza predefinita.

  1. Proprietà del sistema Java

    • L'SDK utilizza la SystemPropertyCredentialsProviderclasse per caricare credenziali temporanee dalle proprietà di sistema aws.accessKeyIdaws.secretAccessKey, e aws.sessionToken Java.

      Nota

      Per informazioni su come impostare le proprietà del sistema Java, consultate il tutorial System Properties sul sito Web ufficiale di Java Tutorials.

  2. Variabili di ambiente

  3. Token di identità Web e ARN del ruolo IAM

    • L'SDK utilizza la WebIdentityTokenFileCredentialsProviderclasse per caricare le credenziali assumendo un ruolo utilizzando un token di identità web.

    • Il provider di credenziali cerca le seguenti variabili di ambiente o proprietà del sistema JVM:

      • AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile

      • AWS_ROLE_ARN o aws.roleArn

      • AWS_ROLE_SESSION_NAMEo aws.roleSessionName (opzionale)

    • Dopo aver acquisito i valori, l'SDK chiama AWS Security Token Service (STS) e utilizza le credenziali temporanee restituite per firmare le richieste.

    • Gli ambienti di runtime come Amazon Elastic Kubernetes Service (EKS) rendono automaticamente disponibili i token di identità Web, consentendo AWS SDKs alle applicazioni di ottenere credenziali temporanee. AWS

  4. configI file condivisi e credentials

    • L'SDK li utilizza ProfileCredentialsProviderper caricare le impostazioni Single Sign-on o le credenziali temporanee di IAM Identity Center dal [default] profilo nei file condivisi e nei file. credentials config

      La AWS SDKs and Tools Reference Guide contiene informazioni dettagliate su come l'SDK for Java funziona con il token single sign-on IAM Identity Center per ottenere le credenziali temporanee che l'SDK utilizza per chiamare. Servizi AWS

      Nota

      I config file credentials e sono condivisi da vari e Tools. AWS SDKs Per ulteriori informazioni, vedere The. aws/credentials and .aws/configfile nella AWS SDKs and Tools Reference Guide.

    • Poiché un profilo condiviso credentials e config i file possono contenere molti set diversi di impostazioni, i membri ProfileCredentialsProvider delegano a una serie di altri provider il compito di cercare le impostazioni all'interno del [default] profilo:

      • Credenziali di base (classeStaticCredentialsProvider): quando il profilo contiene aws_access_key_id e. aws_secret_access_key

      • Credenziali di sessione (classeStaticSessionCredentialsProvider): quando il profilo contiene aws_access_key_idaws_secret_access_key, e. aws_session_token

      • Credenziali di processo (classeProcessCredentialsProvider): quando il profilo contiene. credential_process

      • Credenziali SSO (classeSsoCredentialsProvider): quando il profilo contiene proprietà relative all'SSO come,. sso_role_name sso_account_id

      • Credenziali del token di identità Web (classeWebIdentityTokenCredentialsProvider): quando il profilo contiene e. role_arn web_identity_token_file

      • Credenziali basate sui ruoli con profilo di origine (classeStsAssumeRoleCredentialsProvider): quando il profilo contiene e. role_arn source_profile

      • Credenziali basate sui ruoli con origine delle credenziali (classeStsAssumeRoleWithSourceCredentialsProvider): quando il profilo contiene e. role_arn credential_source

        • Quandocredential_source = Environment: utilizza una catena di e SystemPropertyCredentialsProvider EnvironmentVariableCredentialsProvider

        • Quandocredential_source = Ec2InstanceMetadata: utilizza InstanceProfileCredentialsProvider

        • Quandocredential_source = EcsContainer: utilizza ContainerCredentialsProvider

  5. Amazon ECS credenziali del contenitore

    • L'SDK utilizza la ContainerCredentialsProviderclasse per caricare credenziali temporanee utilizzando le seguenti variabili di ambiente:

      1. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI o AWS_CONTAINER_CREDENTIALS_FULL_URI

      2. AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE o AWS_CONTAINER_AUTHORIZATION_TOKEN

    L'agente contenitore ECS imposta automaticamente la variabile di AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ambiente, che punta all'endpoint delle credenziali ECS. Le altre variabili di ambiente sono in genere impostate in scenari specifici in cui non viene utilizzato l'endpoint di credenziali ECS standard.

  6. Amazon EC2 istanza: credenziali fornite dal ruolo IAM

  7. Se l'SDK non riesce a trovare le impostazioni di configurazione necessarie attraverso tutti i passaggi sopra elencati, genera un'eccezione con un output simile al seguente:

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

Usa il codice in DefaultCredentialsProvider

Puoi utilizzare in modo esplicito la catena di fornitori di credenziali predefinita nel tuo codice. Dal punto di vista funzionale, ciò equivale a non specificare affatto un provider di credenziali, poiché l'SDK lo utilizza per impostazione predefinita. DefaultCredentialsProvider Tuttavia, utilizzarlo in modo esplicito può rendere il codice più leggibile e autodocumentante. Mostra chiaramente l'intenzione di utilizzare la catena di credenziali predefinita.

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

Quando crei il provider di credenziali predefinito puoi fornire ulteriori configurazioni:

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

Questo approccio offre un maggiore controllo pur garantendo la comodità della catena di credenziali predefinita.