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.