Cadena predeterminada de proveedores de credenciales en 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 predeterminada de proveedores de credenciales en 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 en 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 predeterminados para proporcionar las credenciales temporales, cree un compilador de clientes de servicio, pero no especifique un proveedor de credenciales. El siguiente fragmento de código crea una DynamoDbClient que utiliza la cadena de proveedores de credenciales predeterminados para localizar y recuperar los valores 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_NAME o 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.

    • Dado que un perfil de los archivos compartidos credentials y config puede contener muchos conjuntos distintos de ajustes, el ProfileCredentialsProvider delega en otros proveedores la tarea de buscar los ajustes en el perfil de [default]:

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

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

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

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

        • Cuando credential_source = Environment: utiliza una cadena de SystemPropertyCredentialsProvider y EnvironmentVariableCredentialsProvider

        • Cuando credential_source = Ec2InstanceMetadata: utiliza InstanceProfileCredentialsProvider

        • Cuando credential_source = EcsContainer: utiliza ContainerCredentialsProvider

      • Credenciales de inicio de sesión en la consola (claseLoginCredentialsProvider): cuando el perfil contiene login_session

      • Credenciales de proceso (clase ProcessCredentialsProvider): cuando el perfil contiene credential_process.

      • Credenciales de sesión (clase StaticSessionCredentialsProvider): cuando el perfil contiene aws_access_key_id, aws_secret_access_key y aws_session_token.

      • Credenciales básicas (clase StaticCredentialsProvider): cuando el perfil contiene aws_access_key_id y aws_secret_access_key.

  5. Amazon ECS credenciales del 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 entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI, que apunta al punto de conexión de credenciales de ECS. Las demás variables de entorno suelen configurarse en escenarios específicos en los que no se utiliza el punto de conexión de credenciales de 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 una salida similar a la 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()])

Uso del DefaultCredentialsProvider in código

Puede utilizar explícitamente la cadena de proveedores de credenciales predeterminados en el código. Esto equivale funcionalmente a no especificar ningún proveedor de credenciales, ya que el SDK usa DefaultCredentialsProvider de forma 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 predeterminadas.

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 método le brinda más control y, al mismo tiempo, le brinda la comodidad de la cadena de credenciales predeterminadas.