¡Hola a todos!

Código: (entrypoint.sh)

printenv
CREDENTIALS=$(curl -s "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI")

ACCESS_KEY_ID=$(echo "$CREDENTIALS" | jq .AccessKeyId)
SECRET_ACCESS_KEY=$(echo "$CREDENTIALS" | jq .SecretAccessKey)
TOKEN=$(echo "$CREDENTIALS" | jq .Token)

export AWS_ACCESS_KEY_ID=$ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$SECRET_ACCESS_KEY
export AWS_SESSION_TOKEN=$TOKEN

aws s3 cp s3://BUCKET/file.txt /PATH/file.txt

Problema:

Estoy tratando de recuperar archivos de AWS S3 en ECS inspirado en: Documentación de AWS (Pero obtengo de S3 directamente, no a través del punto de enlace de VPC)
He configurado la política del depósito y la política de roles (que se pasa en taskDefinition como taskRoleArn y executionRoleArn)
Localmente, cuando obtengo con aws cli y paso credenciales temporales (que inicié sesión en ECS con el comando printenv en el script de punto de entrada), todo funciona bien. Puedo guardar archivos en mi PC.
En ECS tengo un error:

fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

¿Dónde puedo encontrar una solución? ¿Alguien tuvo un problema similar?

0
milunas 21 oct. 2019 a las 14:54

1 respuesta

La mejor respuesta

Primero, si está trabajando dentro de AWS, se recomienda encarecidamente utilizar AWS Función de servicio de ECS o función de tarea de ECS < / a> o rol EC2. necesita obtener las credenciales de los metadatos.

Pero parece que el rol actual tiene permiso para s3 o el punto de entrada no exporta correctamente la variable de entorno.

Si su instancia de contenedor ya tiene un rol de asignación, entonces no necesita exportar la clave de acceso, simplemente llame a aws s3 cp s3://BUCKET/file.txt /PATH/file.txt y debería funcionar.

Funciones de IAM para tareas

Con los roles de IAM para las tareas de Amazon ECS, puede especificar un rol de IAM que los contenedores pueden usar en una tarea. Las aplicaciones deben firmar sus solicitudes de API de AWS con credenciales de AWS, y esta función proporciona una estrategia para administrar las credenciales para que las utilicen sus aplicaciones, similar a la forma en que los perfiles de instancias de Amazon EC2 brindan credenciales a las instancias de EC2. En lugar de crear y distribuir sus credenciales de AWS a los contenedores o utilizar el rol de la instancia EC2, puede asociar un rol de IAM con una definición de tarea de ECS o una operación de API RunTask.

Entonces, cuando asigne un rol a la tarea ECS o al servicio ECS, su punto de entrada será así de simple.

printenv
aws s3 cp s3://BUCKET/file.txt /PATH/file.txt

Además, su exportación no funcionará como esperaba, la mejor manera de pasar ENV al formulario de contenedor definición de tarea, exportación no se realizará en este caso .

Sugeriré asignar un rol a la tarea de ECS y debería funcionar como espera.

0
Adiii 21 oct. 2019 a las 12:35