In che modo posso utilizzare un token MFA per autenticare l'accesso alle mie risorse AWS tramite l'AWS CLI?

4 minuti di lettura
0

Voglio utilizzare un token MFA per autenticare l'accesso alle mie risorse AWS tramite l'interfaccia della linea di comando AWS (AWS CLI).

Risoluzione

Una best practice consiste nel proteggere il tuo account e le sue risorse utilizzando un dispositivo di autenticazione a più fattori (MFA). Se desideri interagire con le tue risorse utilizzando l'AWS CLI quando utilizzi un dispositivo MFA, devi creare una sessione temporanea. Se utilizzi un dispositivo hardware MFA, il valore è simile a GAHT12345678. Se utilizzi un MFA virtuale, il valore può essere trovato visualizzando le credenziali di sicurezza. Sembra simile a arn:aws:iam::123456789012:mfa/user. Per ulteriori informazioni, consulta Verifica dello stato MFA.

Importante:

Esegui il comando sts get-session-token di AWS CLI, sostituendo le variabili con le informazioni del tuo account, risorse e dispositivo MFA:

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

Riceverai un output con credenziali temporanee e scadenza (per impostazione predefinita, 12 ore) simile al seguente:

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

Nota: puoi specificare una scadenza (in secondi) utilizzando l'opzione --duration-seconds nel comando sts get-session-token in cui il valore può variare da 900 secondi (15 minuti) a 129.600 secondi (36 ore). Se si utilizzano le credenziali dell'utente root, l'intervallo è compreso tra 900 secondi (15 minuti) e 3.600 secondi (1 ora).

Utilizzo di credenziali temporanee con variabili di ambiente

Puoi utilizzare delle credenziali temporanee esportando i loro valori nelle variabili di ambiente utilizzando questi comandi.

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 imposti le variabili d'ambiente, assicurati di annullarle prima di effettuare nuovamente la chiamata get-session-token utilizzando questi comandi.

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=

Utilizzo di credenziali temporanee con profili denominati

Per specificare i comandi che richiedono l'autenticazione MFA puoi utilizzare anche profili denominati. A tale scopo, modifica il file delle credenziali nella cartella .aws nella directory home dell'utente in modo da aggiungere una nuova configurazione del profilo per l'emissione di comandi autenticati tramite MFA. Di seguito viene riportato un esempio di configurazione del profilo:

[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

Dopo la scadenza delle credenziali, esegui nuovamente il comando get-session-token, quindi esporta i valori restituiti nelle variabili di ambiente o nella configurazione del profilo.

Suggerimento: prendi in considerazione l'esecuzione di uno script o di un processo cron in background che controlla la "scadenza" dall'output del comando get-session-token e quindi richiede una nuova autenticazione.

Se l'AWS CLI è configurata utilizzando il comando configure, esiste una configurazione predefinita con credenziali utente AWS Identity and Access Management (IAM) permanenti. Questo utente IAM può utilizzare comandi che non richiedono l'autenticazione MFA.

Configurazione di esempio:

.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: non è possibile utilizzare il parametro mfa_serial con credenziali IAM permanenti.

Se utilizzi i profili per autenticare i comandi tramite l'AWS CLI, specifica l'opzione --profile seguita dal nome del profilo per verificare che le chiamate vengano autenticate tramite MFA.

Ad esempio, questo comando utilizza le credenziali di profilo predefinite e non è autenticato con MFA.

$ aws s3 ls

Importante: assicurati di aver compreso la precedenza delle credenziali in modo da poter verificare che vengano utilizzate le credenziali corrette quando si effettuano chiamate API. Questa operazione può essere eseguita utilizzando il comando GetCallerIdentity

$ aws s3 ls --profile mfa

Puoi anche richiedere che un utente si autentichi con un dispositivo MFA per effettuare particolari operazioni API con le condizioni aws:MultiFactorAuthPresent o aws:MultiFactorAuthAge in una policy IAM.


Informazioni correlate

Abilitazione dei dispositivi MFA per gli utenti su AWS

Dispositivo di autenticazione a più fattori (MFA) perso o inutilizzabile