Cadena de proveedores de credenciales predeterminada en el AWS SDK for Java 2.x - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cadena de proveedores de credenciales predeterminada en el AWS SDK for Java 2.x

La cadena de proveedores de credenciales predeterminada busca AWS SDK for Java 2.x automáticamente las AWS credenciales en una secuencia predefinida de ubicaciones, lo que permite a las aplicaciones autenticarse Servicios de AWS sin especificar explícitamente las fuentes de credenciales.

La clase implementa la cadena de proveedores de credenciales predeterminada. DefaultCredentialsProvider Delega secuencialmente a otros proveedores de credenciales las implementaciones que comprueban la configuración en varias ubicaciones. El primer proveedor de credenciales que puede encontrar todos los elementos de configuración necesarios hace que la cadena finalice.

Para usar la cadena de proveedores de credenciales predeterminada para proporcionar credenciales temporales, cree un generador de clientes de servicios, pero no especifique un proveedor de credenciales. El siguiente fragmento de código crea una DynamoDbClient que utiliza la cadena de proveedores de credenciales predeterminada para localizar y recuperar los ajustes de configuración.

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

Orden de recuperación de la configuración de credenciales

La cadena predeterminada de proveedores de credenciales del SDK para Java 2.x busca la configuración en su entorno mediante una secuencia predefinida.

  1. Propiedades del sistema Java

    • El SDK usa la SystemPropertyCredentialsProviderclase para cargar credenciales temporales desde las propiedades del sistema aws.accessKeyIdaws.secretAccessKey, y aws.sessionToken Java.

      nota

      Para obtener información sobre cómo configurar las propiedades del sistema Java, consulte el tutorial Propiedades del sistema en el sitio web oficial de tutoriales de Java.

  2. Variables de entorno

  3. Token de identidad web y ARN del rol de IAM

    • El SDK usa la WebIdentityTokenFileCredentialsProviderclase para cargar las credenciales asumiendo un rol mediante un token de identidad web.

    • El proveedor de credenciales busca las siguientes variables de entorno o propiedades del sistema JVM:

      • AWS_WEB_IDENTITY_TOKEN_FILE or aws.webIdentityTokenFile

      • AWS_ROLE_ARN o aws.roleArn

      • AWS_ROLE_SESSION_NAMEo aws.roleSessionName (opcional)

    • Una vez que el SDK adquiere los valores, llama al AWS Security Token Service (STS) y utiliza las credenciales temporales que devuelve para firmar las solicitudes.

    • Los entornos de ejecución, como Amazon Elastic Kubernetes Service (EKS), ponen automáticamente a disposición los tokens de identidad web, lo que permite AWS SDKs a las aplicaciones obtener credenciales temporales. AWS

  4. Los archivos compartidos credentials y config

    • El SDK los utiliza ProfileCredentialsProviderpara cargar la configuración de inicio de sesión único o las credenciales temporales del [default] perfil de IAM Identity Center en los archivos AND compartidos. credentials config

      La guía de referencia de AWS SDKs and Tools contiene información detallada sobre cómo funciona el SDK para Java con el token de inicio de sesión único del IAM Identity Center para obtener las credenciales temporales que el SDK utiliza para realizar llamadas. Servicios de AWS

      nota

      Los config archivos credentials y los comparten varias AWS SDKs herramientas. Para obtener más información, consulte The. aws/credentials and .aws/configarchivos en la Guía de referencia de AWS SDKs and Tools.

    • Como un perfil en los config archivos compartidos credentials puede contener muchos conjuntos diferentes de configuraciones, ProfileCredentialsProvider delega en una serie de otros proveedores la tarea de buscar configuraciones en el [default] perfil:

      • Credenciales básicas (claseStaticCredentialsProvider): cuando el perfil contiene aws_access_key_id yaws_secret_access_key.

      • Credenciales de sesión (claseStaticSessionCredentialsProvider): cuando el perfil contiene aws_access_key_idaws_secret_access_key, yaws_session_token.

      • Credenciales de proceso (claseProcessCredentialsProvider): cuando el perfil contienecredential_process.

      • Credenciales de SSO (claseSsoCredentialsProvider): cuando el perfil contiene propiedades relacionadas con el SSO, como,. sso_role_name sso_account_id

      • Credenciales de token de identidad web (claseWebIdentityTokenCredentialsProvider): cuando el perfil contiene y. role_arn web_identity_token_file

      • Credenciales basadas en roles con perfil de origen (claseStsAssumeRoleCredentialsProvider): cuando el perfil contiene role_arn y. source_profile

      • Credenciales basadas en roles con origen de credenciales (claseStsAssumeRoleWithSourceCredentialsProvider): cuando el perfil contiene y. role_arn credential_source

        • Cuándocredential_source = Environment: Utiliza una cadena de y SystemPropertyCredentialsProvider EnvironmentVariableCredentialsProvider

        • Cuándocredential_source = Ec2InstanceMetadata: Utiliza InstanceProfileCredentialsProvider

        • Cuándocredential_source = EcsContainer: Usa ContainerCredentialsProvider

  5. Amazon ECS credenciales de contenedor

    • El SDK usa la ContainerCredentialsProviderclase para cargar credenciales temporales mediante las siguientes variables de entorno:

      1. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI o AWS_CONTAINER_CREDENTIALS_FULL_URI

      2. AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE o AWS_CONTAINER_AUTHORIZATION_TOKEN

    El agente contenedor de ECS establece automáticamente la variable de AWS_CONTAINER_CREDENTIALS_RELATIVE_URI entorno, que apunta al punto final de las credenciales de ECS. Las demás variables de entorno suelen configurarse en escenarios específicos en los que no se utiliza el punto final de credenciales ECS estándar.

  6. Amazon EC2 credenciales proporcionadas por el rol de IAM de instancia

  7. Si el SDK no encuentra los ajustes de configuración necesarios siguiendo todos los pasos enumerados anteriormente, lanza una excepción con un resultado similar al siguiente:

    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 el código DefaultCredentialsProvider in

Puedes usar de forma explícita la cadena de proveedores de credenciales predeterminada en tu código. Esto equivale funcionalmente a no especificar ningún proveedor de credenciales, ya que el SDK lo usa de forma DefaultCredentialsProvider predeterminada. Sin embargo, su uso explícito puede hacer que el código sea más legible y autodocumentado. Muestra claramente su intención de utilizar la cadena de credenciales predeterminada.

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

Al crear el proveedor de credenciales predeterminado, puede proporcionar más configuraciones:

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

Este enfoque le brinda más control y, al mismo tiempo, le brinda la comodidad de la cadena de credenciales predeterminada.