Este es el caso de garantizar a una aplicación el acceso a ciertos recursos se usa normalmente la idea del ROL de las Instancias, es buena idea pero entrando a inspeccionar la instancia no encontraba ningún lugar de donde la aplicación pudiera obtenerlas, así que me dispuse a entrar en las entrañas de la biblioteca en búsqueda de algo que me dijera qué estaba pasando?
Lo que hace es buscar en el siguiente orden:
1. Buscar en los System Properties de Java las clavess aws.accessKeyId y aws.secretKey.
2. Buscar las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY.
3. Buscar en el archivo de credenciales predeterminado para el usuario actual, normalmente ~/.aws/credentials
4. Buscar en una url que se expone la variable de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
5. Buscar en la metadata que tiene la instancia, esta url se puede armar mediante otras variables de entorno pero normalmente es http://169.254.169.254/latest/meta-data/iam/security-credentials/ecsInstanceRole
Esta última es la que logré encontrar y contiene la respuesta del accesskey y secretaccesskey que necesita la aplicación para conectar.
{ "Code" : "Success", "LastUpdated" : "2020-01-23T22:38:07Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ABC1234", "SecretAccessKey" : "KEY/AWS", "Token" : "TOKEN==", "Expiration" : "2020-01-24T05:06:30Z" }
REFERENCIAS:
- https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html
- https://rclayton.silvrback.com/using-the-instance-role-manually-on-an-ec2-instance