Como utilizar um token de MFA para autenticar o acesso aos meus recursos da AWS por meio da AWS CLI?

Última atualização: 12/10/2021

Como utilizar um token de MFA para autenticar o acesso a meus recursos da AWS por meio da AWS Command Line Interface (AWS CLI)?

Resolução

É uma prática recomendada proteger sua conta e seus recursos usando um dispositivo de autenticação multifator (MFA). Se você pretende interagir com seus recursos usando a AWS CLI enquanto utiliza um dispositivo com MFA, será necessário criar uma sessão temporária. Se você utilizar um dispositivo de hardware de MFA, o valor do ARN será semelhante a GAHT12345678. Se você estiver usando uma MFA virtual, o valor será semelhante a aarn:aws:iam::123456789012:mfa/user. Para obter mais informações, consulte Verificar o status da MFA.

Importante:

Execute o comando sts get-session-token da AWS CLI, substituindo as variáveis por informações de sua conta, recursos e dispositivo MFA:

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

Você receberá uma saída com credenciais temporárias e um horário de validade (por padrão, 12 horas) semelhante a este exemplo:

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

Observação: você pode especificar uma validade (em segundos) usando a opção --duration-seconds no comando sts get-session-token, em que o valor pode variar de 900 segundos (15 minutos) a 129.600 segundos (36 horas). Caso esteja usando as credenciais do usuário raiz, o intervalo do valor será de 900 segundos (15 minutos) a 3600 segundos (1 hora).

Usar credenciais temporárias com variáveis de ambiente

Você pode usar credenciais temporárias exportando seus valores para variáveis de ambiente usando os comandos a seguir.

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

Se você definir as variáveis de ambiente, não se esqueça de desconfigurá-las antes de fazer a chamada get-session-token novamente usando esses 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=

Usar credenciais temporárias com perfis nomeados

Você também pode usar perfis nomeados para especificar os comandos que necessitam de autenticação MFA. Para fazer isso, edite o arquivo credencials (credenciais) na pasta .aws no diretório inicial do usuário para adicionar uma nova configuração de perfil para emitir comandos autenticados por MFA. Veja este exemplo de configuração de 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

Depois que as credenciais expirarem, execute o comando get-session-token novamente e exporte os valores retornados para as variáveis de ambiente ou para a configuração do perfil.

Dica: execute um script ou um trabalho cron em segundo plano que verifica a validade da saída do comando get-session-token e solicita a nova autenticação.

Se a AWS CLI for configurada usando o comando configure (configurar), haverá uma configuração padrão com credenciais de usuário permanentes do AWS Identity and Access Management (IAM). Esse usuário do IAM pode usar comandos que não necessitam de autenticação MFA.

Exemplo de configuração:

.aws/credenciais

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

Observação: não é possível usar o parâmetro mfa_serial com credenciais permanentes do IAM.

Se você usar perfis para autenticar comandos usando a AWS CLI, especifique a opção --profile seguida pelo nome do perfil para verificar se as chamadas são autenticadas usando MFA.

Por exemplo, esse comando usa as credenciais de perfil padrão e não é autenticado com MFA.

$ aws s3 ls

Importante: certifique-se de que entendeu a prioridade de credenciais para verificar se as credenciais corretas são usadas ao fazer chamadas de API.

$ aws s3 ls --profile mfa

Você também pode exigir que um usuário autentique usando MFA para executar ações de API específicas com as condições aws:MultiFactorAuthPresent ou condições aws:MultiFactorAuthAge em uma política do IAM.