3 votos

Actualización de las credenciales temporales de AWS

Utilizamos un proceso de autenticación para AWS por el que te autentificas, haces un paso de MFA y luego se te conceden credenciales que son válidas durante una hora. Por lo general, estas se ponen en ~/.aws/credentials . Sin embargo, cuando se realizan operaciones awscli de larga duración, como la copia de un archivo grande a través de aws s3 cp ... Las credenciales expiran y el comando no se completa con éxito.

Hemos probado a volver a ejecutar el comando para volver a autentificar y así repoblar ~/.aws/credentials Sin embargo, el comando en curso no "ve" esto y sigue fallando cuando las credenciales originales expiran.

¿Cómo se supone que se maneja esto?

4voto

MLu Puntos 439

Tienes un par de opciones...


Mayor duración de la sesión

Puede establecer la duración máxima de la sesión en hasta 12 horas - que puede ser suficiente para sus tareas de larga duración.

credentials validity

No estoy seguro de cómo está obteniendo sus credenciales temporales, es posible que tenga que establecer la duración de la sesión allí a 12 horas, así como algunas herramientas solicitan tokens válidos para a 1 hora por defecto.

Consulte también get-credentials script que pueden facilitar su flujo de trabajo. Tal vez, no sé qué es exactamente lo que estás haciendo ahora, sin embargo escribir creds temporales a ~/.aws/credentials no suele ser la mejor práctica.


Copiar a EC2 primero

Si no puedes aumentar el ajuste de la duración máxima, es posible que puedas sortear la limitación:

  1. primero copiando los datos a una instancia EC2 Por ejemplo, utilizando rsync .

  2. entonces de la carga de EC2 a S3 Aprovechando la instancia Rol de Instancia EC2 que se renueva automáticamente. Además de copiar de EC2 a S3 puede ser más rápido.


Utilizar las credenciales de EC2 localmente

También puedes "robar" las credenciales del rol de EC2 y usarlo localmente. Mira esto get-instance-credentials script.

[ec2-user@ip-... ~] ./get-instance-credentials
export AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"
export AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"
export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEKf....PUtXw=="

Estas credenciales suelen ser bueno para 6 horas .

Ahora copie y pegue esas líneas en su máquina local que no sea EC2.

user@server ~ $ export AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"
user@server ~ $ export AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"
user@server ~ $ export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEKf....PUtXw=="

Y verificar que las credenciales funcionan:

user@server ~ $ aws sts get-caller-identity
{
    "UserId": "AROAIA...DNG:i-abcde123456",
    "Account": "987654321098",
    "Arn": "arn:aws:sts::987654321098:assumed-role/EC2-Role/i-abcde123456"
}

Como puede ver, su servidor local no EC2 tiene ahora los mismos privilegios que la instancia EC2 de la que recuperó las credenciales.


Utilice aws CLI a multipart-upload el archivo

Puede dividir su archivo grande en trozos más pequeños (véase split ) y utilizar aws s3api subcomandos multipart-upload. Véase aws s3api create-multipart-upload , complete-multipart-upload y part-upload . Puedes refrescar las credenciales entre cada parte y reintentar las partes fallidas si tus credenciales expiran a mitad de camino.


Crear un script personalizado</strkeep><strkeep>

Puede utilizar el brilante boto3 Librería Python AWS SDK para construir su propio cargador de archivos. Debería ser muy sencillo escribir un pequeño cargador multiparte que solicite nuevas credenciales cada vez que expiren, incluyendo la solicitud de la MFA.


Como puedes ver, tienes muchas opciones.

Espero que esto ayude :)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: