¿Cómo utilizo un token MFA para autenticar el acceso a mis recursos de AWS a través de AWS CLI?

Última actualización: 21-08-2020

¿Cómo utilizo un token MFA para autenticar el acceso a mis recursos de AWS con AWS Command Line Interface (AWS CLI)?

Resolución

Se trata de una práctica recomendada para proteger su cuenta y sus recursos mediante el uso de un dispositivo de autenticación multifactor (MFA). Si tiene previsto interactuar con sus recursos mediante AWS CLI cuando utilice un dispositivo MFA, deberá crear una sesión temporal. Si utiliza un dispositivo de hardware MFA, el valor de ARN es similar a GAHT12345678. Si utiliza MFA virtual, el valor es similar a arn:aws:iam::123456789012:mfa/user. Para obtener más información, consulte Comprobar el estado de MFA.

Importante:

Ejecute el comando sts get-session-token de AWS CLI, y reemplace las variables con información de su cuenta, recursos y dispositivo MFA:

$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token

Se recibe una salida con credenciales temporales y una hora de vencimiento (de forma predeterminada, 12 horas) similar a la siguiente:

{
    "Credentials": {
        "SecretAccessKey": "secret-access-key",
        "SessionToken": "temporary-session-token",
        "Expiration": "expiration-date-time",
        "AccessKeyId": "access-key-id"
    }
}

Nota: Se puede especificar una duración de vencimiento (en segundos) con la opción --duration-seconds en el comando sts get-session-token, donde el valor puede oscilar entre 900 segundos (15 minutos) y 129 600 segundos (36 horas). Si utiliza las credenciales del usuario raíz, el rango es de 900 segundos (15 minutos) a 3600 segundos (1 hora).

Utilizar credenciales temporales con variables de entorno

Puede utilizar credenciales temporales mediante la exportación de sus valores a variables de entorno con estos comandos.

Linux:

export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output

Windows:

set AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
set AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
set AWS_SESSION_TOKEN=example-session-Token-as-in-previous-output

Si configuró las variables de entorno, asegúrese de desactivarlas antes de hacer la llamada get-session-token de nuevo mediante estos comandos.

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

Utilizar credenciales temporales con perfiles con nombre

También puede utilizar perfiles con nombre para especificar los comandos que requieren autenticación MFA. Para ello, edite el archivo Credentials (Credenciales) de la carpeta .aws que encontrará en el directorio principal del usuario para agregar una nueva configuración de perfil y emitir comandos autenticados por MFA. Este es un ejemplo de configuración del perfil:

[mfa]
aws_access_key_id = example-access-key-as-in-returned-output
aws_secret_access_key = example-secret-access-key-as-in-returned-output
aws_session_token = example-session-Token-as-in-returned-output

Después de que las credenciales venzan, ejecute el comando get-session-token de nuevo y, a continuación, exporte los valores devueltos a las variables de entorno o a la configuración del perfil.

Consejo: tome en cuenta la posibilidad de ejecutar un script o un trabajo cron en segundo plano que verifique el “vencimiento” de la salida del comando get-session-token y, a continuación, solicite que se vuelva a autenticar.

Si AWS CLI se configura con el comando configure, hay una configuración predeterminada con credenciales de usuario permanentes de AWS Identity and Access Management (IAM). Este usuario de IAM puede utilizar comandos que no requieren autenticación MFA.

Ejemplo de configuración:

.aws/credentials

[default]
aws_access_key_id = example-access-Key-for-an-IAM-user
aws_secret_access_key = example-secret-access-key-for-IAM-user

Nota: No se puede utilizar el parámetro mfa_serial con credenciales IAM permanentes.

Si utiliza perfiles para autenticar comandos mediante AWS CLI, especifique la opción --profile seguida del nombre del perfil para verificar que las llamadas se autentican mediante MFA.

Por ejemplo, este comando utiliza las credenciales del perfil predeterminado y no se autentica con MFA.

$ aws s3 ls

Importante: Asegúrese de comprender la precedencia de las credenciales para poder verificar que se utilicen las credenciales correctas al hacer las llamadas a la API.

$ aws s3 ls --profile mfa

También puede solicitar que un usuario se autentique con MFA para llevar a cabo determinadas acciones de la API con las condiciones aws:MultiFactorAuthPresent o aws:MultiFactorAuthAge en una política de IAM.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?