Come testare le credenziali per gli strumenti della riga di comando di AWS


149

Esiste un comando / sottocomando che può essere passato awsall'utilità che può 1) verificare che le credenziali nel ~/.aws/credentialsfile siano valide e 2) dare qualche indicazione a quale utente appartengono le credenziali? Sto cercando qualcosa di generico che non faccia ipotesi sull'utente che abbia le autorizzazioni per IAM o qualsiasi servizio specifico.

Il caso d'uso per questo è un controllo di integrità in fase di distribuzione per assicurarsi che le credenziali siano buone. Idealmente, ci sarebbe un modo per verificare il valore restituito e interrompere la distribuzione se non ci sono credenziali non valide.


3
Potrei suggerire che questo sarebbe meglio chiedere a serverfault.com ? Stack Overflow è specificamente per le domande di programmazione.
Tripp Kinetics,

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

Risposte:


220

Usa GetCallerIdentity :
aws sts get-caller-identity

A differenza di altre chiamate API / CLI, funzionerà sempre, indipendentemente dalle autorizzazioni IAM.

Otterrai un output nel seguente formato:

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

Il formato ARN esatto dipenderà dal tipo di credenziali, ma spesso include il nome dell'utente (umano).

Utilizza i codici di errore della CLI AWS standard che danno 0 in caso di successo e 255 se non si dispone di credenziali.


5
Questa è un'ottima risposta, ma se usi l'AMF, fai attenzione: è più complicato. Con MFA, è necessario utilizzare le credenziali di lavoro (i) in combinazione 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).
Mark Chackerian,

3
@MarkChackerian Non è sempre così. Ho creato un utente il cui MFA viene applicato utilizzando la politica di Trek10 . Con la sessione MFA gettone non è attivo, se eseguo aws iam get-user --profile test-mfa, ottengo: An error occurred (AccessDenied) when calling the GetUser operation. Tuttavia, aws sts get-caller-identity --profile test-mfagenera (allo stesso modo, senza token di sessione MFA attivo) l' test-mfaaccount, l'ARN e l'Id utente.
Ville,

54

C'è un modo semplice - aws iam get-userdirebbe i dettagli su chi sei (l'attuale utente IAM) - a condizione che l'utente disponga di iamprivilegi.

Esistono un paio di chiamate alla CLI che supportano il --dry-runflag come il aws ec2 run-instancesquale si dice se si dispone della configurazione / cred necessaria per eseguire l'operazione.

C'è anche quello --auth-dry-runControlla se si dispone delle autorizzazioni necessarie per il comando, senza eseguire effettivamente il comando. Se si dispone delle autorizzazioni necessarie, il comando restituisce DryRunOperation; in caso contrario, restituisce UnauthorizedOperation. [Dalla documentazione AWS - Opzioni comuni ]

Sarai in grado di elencare le chiavi di accesso IAM dalla console di gestione che puoi controllare per vedere a chi è stata assegnata la chiave.

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


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

7
Completamente possibile l'utente non dispone dell'autorizzazione per "ottenere l'utente" stesso. : - /
Jason

Sì, ho questa situazione. Nella Console AWS accanto a User ARN mostra N / A e il passaggio del mouse sopra spiega che "User arn: aws: iam: ...: user / steve non è autorizzato a eseguire iam: GetUser su risorsa: user steve"
Steve Bennett,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.