Mi caso de uso es el siguiente:

Necesito enviar algunos datos a la cola de AWS SQS mediante el SDK de JAVA y con la ayuda del rol de IAM (sin utilizar la implementación del proveedor de credenciales).

¿Hay alguna forma de hacerlo?

Gracias por la ayuda de antemano.

10
Lovey 16 ago. 2016 a las 23:04

2 respuestas

La mejor respuesta

Puede utilizar la autenticación basada en roles solo en instancias EC2, contenedores ECS y funciones Lambda. No es posible utilizarlos localmente o en servidores locales.

DefaultAWSCredentialsProviderChain seleccionará automáticamente la instancia EC2 Función si no puede encontrar las credenciales a través de otros métodos. También puede crear una AWSCredentialsProviderChain personalizada. objeto con solo inyectar una instancia de InstanceProfileCredentialsProvider a eso como aquí

AWSCredentialsProviderChain myCustomChain = new AWSCredentialsProviderChain(new InstanceProfileCredentialsProvider());

Para obtener más información: https: // docs .aws.amazon.com / java-sdk / latest / developer-guide / java-dg-roles.html

5
Çağatay Gürtürk 17 ago. 2016 a las 07:19

Ha pasado un tiempo, pero este no es el caso actualmente, ahora es posible usar la función de asumir con el SDK de Java con un usuario. Puede configurar las credenciales en su archivo .aws/credentials de la siguiente manera:

[useraccount]
aws_access_key_id=<key>
aws_secret_access_key=<secret>

[somerole]
role_arn=<the ARN of the role you want to assume>
source_profile=useraccount

Luego, cuando inicie, configure una variable de entorno: AWS_PROFILE=somerole

El SDK utilizará las credenciales definidas en useraccount para llamar a assumeRole con el role_arn que proporcionaste. Por supuesto, deberá asegurarse de que el usuario con esas credenciales tenga los permisos para asumir ese rol.

Tenga en cuenta que si no incluye el SDK de Java completo en su proyecto (es decir, solo incluye las bibliotecas para los servicios que necesita), también debe incluir la biblioteca aws-java-sdk-sts en su ruta de clases para que esto funcione .

También es posible hacer todo esto mediante programación usando STSAssumeRoleSessionCredentialsProvider, pero esto requeriría que configure directamente todos los servicios, por lo que podría no ser tan conveniente como el enfoque de perfil, que debería funcionar para todos los servicios.

6
Jon Nichols 14 oct. 2018 a las 18:15