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

Última actualización: 12/10/2021

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

Resolución

Es recomendable proteger su cuenta y sus recursos mediante 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 Comprobación del estado de MFA.

Importante:

Ejecute el comando sts get-session-token de AWS CLI y sustituya las variables por 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 configura las variables de entorno, asegúrese de desactivarlas antes de volver a realizar la llamada a get-session-token con estos comandos.

Linux:

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

Windows:

set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set 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 de credenciales ubicado en la carpeta .aws del directorio principal del usuario para agregar una nueva configuración de perfil para 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

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

Sugerencia: Considere la posibilidad de ejecutar un script o un trabajo cron en segundo plano que compruebe el “vencimiento” del resultado del comando get-session-token y, a continuación, solicite una nueva autenticación.

Si AWS CLI se configura mediante 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 de MFA.

Configuración de ejemplo:

.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 de IAM permanentes.

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

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

$ aws s3 ls

Importante: Asegúrese de comprender la prioridad de las credenciales para poder comprobar que se utilizan las credenciales correctas al realizar 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?