Comment tester les informations d'identification pour les outils de ligne de commande AWS

149

Existe-t-il une commande / sous-commande qui peut être transmise à l' awsutilitaire qui peut 1) vérifier que les informations d'identification dans le ~/.aws/credentialsfichier sont valides et 2) donner une indication à quel utilisateur les informations d'identification appartiennent? Je recherche quelque chose de générique qui ne fait aucune hypothèse sur le fait que l'utilisateur dispose d'autorisations sur IAM ou sur un service spécifique.

Le cas d'utilisation pour cela est une vérification de l'intégrité au moment du déploiement pour s'assurer que les informations d'identification sont bonnes. Idéalement, il y aurait un moyen de vérifier la valeur de retour et d'abandonner le déploiement s'il existe des informations d'identification non valides.

Smitelli
la source
3
Puis-je suggérer que ce serait mieux demandé à serverfault.com ? Stack Overflow est spécifiquement pour les questions de programmation.
Tripp Kinetics
4
@TrippKinetics Ouais, j'étais sur la clôture pour savoir où demander. Dans mon esprit, l'essentiel de la question portait davantage sur l'interrogation programmatique d'une API plutôt que sur la gestion des serveurs en soi.
smitelli

Réponses:

220

Utilisez GetCallerIdentity :
aws sts get-caller-identity

Contrairement aux autres appels API / CLI, il fonctionnera toujours, quelles que soient vos autorisations IAM.

Vous obtiendrez la sortie dans le format suivant:

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

Le format ARN exact dépendra du type d'informations d'identification, mais inclut souvent le nom de l'utilisateur (humain).

Il utilise les codes d'erreur AWS CLI standard donnant 0 en cas de succès et 255 si vous n'avez pas d'informations d'identification.

Jason
la source
5
C'est une excellente réponse, mais si vous utilisez MFA, faites attention - c'est plus compliqué. Avec MFA, vous devez utiliser des informations d'identification de travail (i) associées à un jeton MFA pour obtenir différentes informations d'identification temporaires de travail (ii) et avec cette solution, vous obtenez les mêmes résultats pour les informations d'identification (i) ou (ii).
Mark Chackerian
3
@MarkChackerian Ce n'est pas toujours le cas. J'ai créé un utilisateur dont la MFA est appliquée en utilisant la politique de Trek10 . Avec la session MFA jeton pas actif, si j'exécute aws iam get-user --profile test-mfa, je reçois: An error occurred (AccessDenied) when calling the GetUser operation. Cependant, aws sts get-caller-identity --profile test-mfagénère (de la même manière, sans jeton de session MFA actif) le test-mfacompte, l'ARN et l'ID utilisateur du.
Ville
54

Il existe un moyen simple - aws iam get-userindiquerait les détails sur qui vous êtes (l'utilisateur IAM actuel) - à condition que l'utilisateur dispose de iamprivilèges.

Il y a quelques appels CLI qui prennent en charge l' --dry-runindicateur comme aws ec2 run-instanceslequel vous vous dites si vous avez la configuration / crédité nécessaire pour effectuer l'opération.

Il y a aussi --auth-dry-runqui vérifie si vous avez les autorisations requises pour la commande, sans réellement exécuter la commande. Si vous disposez des autorisations requises, la commande renvoie DryRunOperation; sinon, il renvoie UnauthorizedOperation. [À partir de la documentation AWS - Options communes ]

Vous pourrez répertorier les clés d'accès IAM à partir de la console de gestion que vous pouvez contre-vérifier pour voir à qui a été attribuée quelle clé.

La meilleure façon de comprendre quel utilisateur / rôle dispose de quels privilèges consiste à utiliser IAM Policy Simulator .

Naveen Vijay
la source
16
Ironiquement, l'utilisateur à qui j'ai exécuté le test a reçu une AccessDeniederreur - qui incluait la arn:aws:iam::123...890:user/somebodychaîne complète dans le cadre de la sortie d'erreur.
smitelli
7
Il est tout à fait possible que l'utilisateur ne soit pas autorisé à «obtenir l'utilisateur» lui-même. : - /
Jason
Oui, j'ai cette situation. Dans la console AWS à côté de l'ARN utilisateur, il affiche N / A, et le survol explique que «l'utilisateur arn: aws: iam: ...: user / steve n'est pas autorisé à exécuter iam: GetUser sur resource: user steve»
Steve Bennett