Cadena predeterminada de proveedores de credenciales en AWS SDK for Java 2.x
La cadena de proveedores de credenciales predeterminados de AWS SDK for Java 2.x busca automáticamente las credenciales de AWS en una secuencia predefinida de ubicaciones, lo que permite a las aplicaciones autenticarse con Servicios de AWS sin especificar explícitamente las fuentes de credenciales.
La cadena predeterminada de proveedores de credenciales se implementa mediante la clase DefaultCredentialsProvider
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.
-
Propiedades del sistema Java
-
El SDK usa la clase SystemPropertyCredentialsProvider
para cargar credenciales temporales desde las propiedades del sistema Java aws.accessKeyId,aws.secretAccessKeyyaws.sessionToken.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
.
-
-
Variables de entorno
-
El SDK usa la clase EnvironmentVariableCredentialsProvider
para cargar credenciales temporales de las variables de entorno AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYyAWS_SESSION_TOKEN.
-
-
Token de identidad web y ARN del rol de IAM
-
El SDK usa la clase WebIdentityTokenFileCredentialsProvider
para cargar las credenciales asumiendo un rol que utiliza 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 oraws.webIdentityTokenFile -
AWS_ROLE_ARNoraws.roleArn -
AWS_ROLE_SESSION_NAMEoaws.roleSessionName(opcional)
-
-
Una vez que el SDK adquiere los valores, llama a AWS Security Token Service (STS) y utiliza las credenciales temporales que devuelve para firmar solicitudes.
-
Los entornos de tiempo de ejecución, como Amazon Elastic Kubernetes Service (EKS), ponen automáticamente los tokens de identidad web a disposición de los AWS SDK, lo que permite a las aplicaciones obtener credenciales temporales de AWS.
-
-
Los archivos compartidos
credentialsyconfig-
El SDK utiliza ProfilecredentialsProvider
para cargar la configuración de inicio de sesión único de IAM Identity Center o las credenciales temporales desde el perfil [default]en los archivos AND compartidoscredentialsyconfig.La guía de referencia de herramientas y SDK de AWS 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 llamar a Servicios de AWS.
nota
Los archivos
credentialsyconfigson compartidos por varios SDK y herramientas de AWS. Para obtener más información, consulte Archivos .aws/credentials y .aws/config en la Guía de referencia de SDK y herramientas de AWS. -
Dado que un perfil de los archivos compartidos
credentialsyconfigpuede contener muchos conjuntos distintos de ajustes, elProfileCredentialsProviderdelega en otros proveedores la tarea de buscar los ajustes en el perfil de[default]:-
Credenciales básicas (clase
StaticCredentialsProvider): cuando el perfil contieneaws_access_key_idyaws_secret_access_key. -
Credenciales de sesión (clase
StaticSessionCredentialsProvider): cuando el perfil contieneaws_access_key_id,aws_secret_access_keyyaws_session_token. -
Credenciales de proceso (clase
ProcessCredentialsProvider): cuando el perfil contienecredential_process. -
Credenciales de SSO (clase
SsoCredentialsProvider): cuando el perfil contiene propiedades relacionadas con SSO, comosso_role_name,sso_account_id. -
Credenciales de token de identidad web (clase
WebIdentityTokenCredentialsProvider): cuando el perfil contienerole_arnyweb_identity_token_file. -
Credenciales basadas en roles con perfil de origen (clase
StsAssumeRoleCredentialsProvider): cuando el perfil contienerole_arnysource_profile. -
Credenciales basadas en roles con origen de credenciales (clase
StsAssumeRoleWithSourceCredentialsProvider): cuando el perfil contienerole_arnycredential_source.-
Cuando
credential_source = Environment: utiliza una cadena deSystemPropertyCredentialsProvideryEnvironmentVariableCredentialsProvider -
Cuando
credential_source = Ec2InstanceMetadata: utilizaInstanceProfileCredentialsProvider -
Cuando
credential_source = EcsContainer: utilizaContainerCredentialsProvider
-
-
-
-
Credenciales de contenedor de Amazon ECS
-
El SDK usa la clase ContainerCredentialsProvider
para cargar credenciales temporales desde las variables de entorno del sistema: -
AWS_CONTAINER_CREDENTIALS_RELATIVE_URIoAWS_CONTAINER_CREDENTIALS_FULL_URI -
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEoAWS_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. -
-
Credenciales proporcionadas por el rol de IAM de instancia de Amazon EC2
-
El SDK usa la clase InstanceProfileCredentialsProvider
para cargar credenciales temporales desde el servicio de metadatos Amazon EC2.
-
-
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()])
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.