Proveedores de credenciales - AWS SDK para Kotlin

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.

Proveedores de credenciales

El orden en el que la cadena de proveedores de credenciales predeterminada resuelve las credenciales modificadas con la versión 1.4.0 Para obtener más información, consulte la nota siguiente.

Cuando envíe solicitudes a Amazon Web Services mediante el AWS SDK para Kotlin, las solicitudes deben estar firmadas criptográficamente con las credenciales emitidas por AWS. El SDK de Kotlin firma la solicitud automáticamente. Para adquirir las credenciales, el SDK puede usar los ajustes de configuración que se encuentran en varios lugares, por ejemplo, las propiedades del sistema JVM, las variables de entorno, los credentials archivos AWS config y anuncios compartidos y los metadatos de las EC2 instancias de Amazon.

El SDK utiliza la abstracción del proveedor de credenciales para simplificar el proceso de recuperación de credenciales de diversas fuentes. El SDK contiene varias implementaciones de proveedores de credenciales.

Por ejemplo, si la configuración recuperada incluye la configuración de acceso de inicio de sesión único al Centro de identidades de IAM desde el config archivo compartido, el SDK trabaja con el Centro de identidades de IAM para recuperar las credenciales temporales que utiliza para realizar solicitudes. Servicios de AWS Con este enfoque de adquisición de credenciales, el SDK utiliza el proveedor del Centro de Identidad de IAM (también conocido como proveedor de credenciales de SSO). En la sección de configuración de esta guía se describe esta configuración.

Para usar un proveedor de credenciales específico, puede especificar uno al crear un cliente de servicio. Como alternativa, puede utilizar la cadena de proveedores de credenciales predeterminada para buscar automáticamente los ajustes de configuración.

La cadena de proveedores de credenciales predeterminada

Si no se especifica de forma explícita en la construcción del cliente, el SDK para Kotlin utiliza un proveedor de credenciales que comprueba secuencialmente todos los lugares en los que puedes introducir las credenciales. Este proveedor de credenciales predeterminado se implementa como una cadena de proveedores de credenciales.

Para usar la cadena predeterminada para proporcionar credenciales a su aplicación, cree un cliente de servicio sin proporcionar una credentialsProvider propiedad de forma explícita.

val ddb = DynamoDbClient { region = "us-east-2" }

Para obtener más información sobre la creación de clientes de servicio, consulte crear y configurar un cliente.

Más información sobre la cadena de proveedores de credenciales predeterminada

La cadena de proveedores de credenciales predeterminada busca la configuración de las credenciales mediante la siguiente secuencia predefinida. Cuando los parámetros configurados proporcionan credenciales válidas, la cadena se detiene.

1. AWS claves de acceso (propiedades del sistema JVM)

El SDK busca las propiedades del sistema aws.accessKeyIdaws.secretAccessKey, y aws.sessionToken JVM.

2. AWS claves de acceso (variables de entorno)

El SDK intenta cargar las credenciales de las AWS_ACCESS_KEY_ID variables AWS_SECRET_ACCESS_KEY de AWS_SESSION_TOKEN entorno and y.

3. Token de identidad web

El SDK busca las variables AWS_WEB_IDENTITY_TOKEN_FILE de entorno AWS_ROLE_ARN (o las propiedades del sistema JVM aws.webIdentityTokenFile yaws.roleArn). En función de la información del token y de la función, el SDK adquiere credenciales temporales.

4. Un perfil en un archivo de configuración

En este paso, el SDK usa la configuración asociada a un perfil. De forma predeterminada, el SDK usa los credentials archivos AWS config y compartidos, pero si se establece la variable de AWS_CONFIG_FILE entorno, el SDK usa ese valor. Si la variable de AWS_PROFILE entorno (o la propiedad del sistema aws.profile JVM) no está configurada, el SDK busca el perfil «predeterminado»; de lo contrario, busca el perfil que coincida con el AWS_PROFILE’s valor.

El SDK busca el perfil en función de la configuración descrita en el párrafo anterior y utiliza los ajustes allí definidos. Si la configuración que encuentra el SDK contiene una combinación de configuraciones para diferentes enfoques de proveedores de credenciales, el SDK usa el siguiente orden:

  1. AWS claves de acceso (archivo de configuración): el SDK usa la configuración de aws_access_key_idaws_access_key_id, y. aws_session_token

  2. Asumir la configuración del rol: si el SDK encuentra role_arn una credential_source configuración source_profile o configuración, intenta asumir un rol. Si el SDK encuentra la source_profile configuración, obtiene las credenciales de otro perfil para recibir las credenciales temporales para el rol especificado porrole_arn. Si el SDK encuentra la credential_source configuración, obtiene las credenciales de un contenedor de Amazon ECS, de una EC2 instancia de Amazon o de variables de entorno en función del valor de la credential_source configuración. A continuación, utiliza esas credenciales para adquirir credenciales temporales para el rol.

    Un perfil debe contener la source_profile configuración o la credential_source configuración, pero no ambas.

  3. Configuración del token de identidad web: si el SDK encuentra role_arn una web_identity_token_file configuración, adquiere credenciales temporales para acceder a AWS los recursos en función del token role_arn y del token.

  4. Configuración del token de inicio de sesión único: si el SDK encuentra sso_session una sso_role_name configuración (junto con una sso-session sección complementaria en los archivos de configuración), el SDK recupera las credenciales temporales del servicio del Centro de identidad de IAM. sso_account_id

  5. Configuración de SSO antigua: si el SDK encuentra sso_start_url, y sso_role_name ajustes sso_regionsso_account_id, el SDK recupera las credenciales temporales del servicio del Centro de Identidad de IAM.

  6. Configuración del proceso: si el SDK encuentra una credential_process configuración, utiliza el valor de la ruta para invocar un proceso y adquirir credenciales temporales.

5. Credenciales de contenedor

El SDK busca variables de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI o AWS_CONTAINER_CREDENTIALS_FULL_URI AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE oAWS_CONTAINER_AUTHORIZATION_TOKEN. Utiliza estos valores para cargar las credenciales desde el punto final HTTP especificado mediante una solicitud GET.

6. Credenciales de IMDS

El SDK intenta obtener las credenciales del servicio de metadatos de la instancia en el punto final HTTP predeterminado o configurado. El SDK solo es compatible IMDSv2.

Si las credenciales siguen sin resolverse en este momento, se produce un error en la creación del cliente, con una excepción.

Nota: Cambio en el orden de resolución de las credenciales

La resolución sobre el orden de las credenciales descrita anteriormente es la vigente para la 1.4.x+ versión del SDK para Kotlin. Antes del 1.4.0 lanzamiento, los elementos número 3 y 4 se cambiaban y el elemento 4a actual siguió al elemento 4f actual.

Especifique un proveedor de credenciales

Puede especificar un proveedor de credenciales en lugar de utilizar la cadena de proveedores predeterminada. Este enfoque te proporciona un control directo sobre las credenciales que utiliza el SDK.

Por ejemplo, para usar las credenciales de una función de IAM asumida, especifique una StsAssumeRoleCredentialsProvider al crear el cliente:

val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = StsAssumeRoleCredentialsProvider() }

También puede crear una cadena personalizada (CredentialsProviderChain) que combine varios proveedores en el orden que prefiera.

Guarde las credenciales en caché con un proveedor independiente

importante

La cadena predeterminada almacena en caché las credenciales automáticamente. Los proveedores independientes no almacenan en caché las credenciales. Para evitar tener que buscar credenciales en cada llamada a la API, incluye a tu proveedor con un. CachedCredentialsProvider El proveedor almacenado en caché obtiene las nuevas credenciales solo cuando caducan las actuales.

Para almacenar en caché las credenciales con un proveedor independiente, usa la clase: CachedCredentialsProvider

val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = CachedCredentialsProvider(StsAssumeRoleCredentialsProvider()) }

Como alternativa, utilice la función de cached() extensión para obtener un código más conciso:

val ddb = DynamoDbClient { region = "us-east-1" credentialsProvider = StsAssumeRoleCredentialsProvider().cached() }