2015-08-05 9 views
29

Esiste un comando/sottocomando che può essere passato all'utilità aws che può 1) verificare che le credenziali nel file ~/.aws/credentials siano valide e 2) dare qualche indicazione quale utente il appartengono le credenziali? Sto cercando qualcosa di generico che non faccia alcuna ipotesi circa l'autorizzazione dell'utente a IAM o qualsiasi servizio specifico.Come verificare le credenziali per gli strumenti della riga di comando di AWS

Il caso di utilizzo per questo è un controllo di integrità in fase di distribuzione per assicurarsi che le credenziali siano buone. Idealmente ci sarebbe un modo per controllare il valore di ritorno e interrompere la distribuzione se ci sono credenziali non valide.

+1

Potrei suggerire che sarebbe meglio chiedere a http://serverfault.com/? Stack Overflow è specifico per domande di programmazione. –

+2

@TrippKinetics Sì, ero sul recinto su dove chiedere. Nella mia mente, la sostanza della domanda riguardava più l'interrogazione a livello di programmazione di un'API piuttosto che la gestione dei server di per sé. – smitelli

risposta

28

C'è un modo dritto - aws iam get-user direbbe i dettagli su chi sei (l'attuale utente IAM) - a condizione che l'utente abbia i privilegi iam.

Ci sono un paio di chiamate CLI che supportano il flag --dry-run come aws ec2 run-instances, che indica se è necessario configurare/creduto per eseguire l'operazione.

C'è anche --auth-dry-run che Controlla se si dispone delle autorizzazioni necessarie per il comando, senza effettivamente eseguire il comando. Se si dispone delle autorizzazioni necessarie, il comando restituisce DryRunOperation; in caso contrario, restituisce UnauthorizedOperation. [Da AWS Documentation - Common Options]

È possibile elencare le chiavi di accesso IAM dalla console di gestione, che è possibile verificare per chi è stata assegnata la chiave.

Il modo migliore per capire quale utente/ruolo ha quali privilegi è utilizzare IAM Policy Simulator.

+5

Ironia della sorte, l'utente che ho eseguito il test ha ottenuto un errore 'AccessDenied' - che includeva l'intera stringa' arn: aws: iam :: 123 ... 890: user/somebody' come parte dell'output dell'errore. – smitelli

+0

Interamente possibile, l'utente non ha il permesso di "diventare-utente". : -/ – Jason

33

Uso GetCallerIdentity:
aws sts get-caller-identity

A differenza di altri API/CLI chiama funziona sempre, indipendentemente dalla vostra permessi IAM.

otterrete uscita nel seguente formato:

{ 
    "Account": "123456789012", 
    "UserId": "AR#####:#####", 
    "Arn": "arn:aws:sts::123456789012:assumed-role/role-name/role-session-name" 
} 

ARN esatta dipenderà dal tipo di ruolo, ma spesso include il nome dell'utente (umana).

Utilizza lo standard AWS CLI error codes dando 0 in caso di successo e 255 se non si dispone di credenziali.

+2

Questa è un'ottima risposta, ma se si utilizza MFA, attenzione: è più complicato. Con MFA, è necessario utilizzare credenziali di lavoro (i) combinate con un token MFA per ottenere credenziali temporanee di lavoro diverse (ii) e con questa soluzione si ottengono gli stessi risultati per le credenziali (i) o (ii). –

+0

@MarkChackerian Non è sempre così. Ho creato un utente il cui MFA viene applicato utilizzando la [politica di Trek10] (https://www.trek10.com/blog/improving-the-aws-force-mfa-policy-for-IAM-users/).Con il token di sessione MFA non attivo, se eseguo 'aws iam get-user --profile test-mfa', ottengo:' Si è verificato un errore (AccessDenied) quando si chiama l'operazione GetUser'. Tuttavia, gli output di 'aws sts get-caller-identity --profile test-mfa' (analogamente, con nessun token di sessione MFA attivo) l'account' test-mfa', ARN e UserId. – Ville