Un moyen rapide d'obtenir le numéro de compte AWS à partir des outils de l'AWS CLI?

99

À la recherche d'un moyen rapide d'extraire mon numéro de compte, j'avais initialement pensé à l'utiliser, aws iam get-account-authorization-details --max-items 1mais il y a plusieurs problèmes à le faire de cette façon. Existe-t-il un moyen de le faire qui pourrait ne pas croiser les origines des comptes?

hein
la source

Réponses:

217

Vous pouvez obtenir le numéro de compte à partir de la sous-commande Secure Token Service enget-caller-identity utilisant les éléments suivants:

aws sts get-caller-identity --query Account --output text
Taras Alenin
la source
2
Cela devrait être beaucoup plus fiable que les groupes de sécurité, car vous pouvez supprimer le groupe de sécurité par défaut.
Justin
4
commande plus courte si alimentation à jqaws sts get-caller-identity|jq -r ".Account"
BMW
besoin de stocker dans une variable mais recevait une ligne supplémentaire, ce serait mieux pour celaaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim
Pour moi, cela fonctionne lorsque je retire la --query 'Account'pièce.
coliveira
@BMW Vous ne pouvez malheureusement pas toujours compter sur votre jqimplication ou votre installation sur un système. Certains serveurs interdisent les installations de packages superflus pour des raisons de sécurité. Vous pourriez faire quelque chose comme ça, aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'mais c'est un peu ennuyeux et vous pourriez aussi bien le faire --query 'Account' --output textà ce stade.
ehime
33

D'après ma réponse connexe pour l'AWS PowerShell CLI , votre ID de compte fait partie de l'Arn des ressources que vous créez ... et de celles qui sont automatiquement créées pour vous. Certaines ressources vous répertorieront également en tant que OwnerId.

Le groupe de sécurité par défaut est automatiquement créé pour vous dans le VPC par défaut de chaque région en tant que groupe de sécurité réservé. De la documentation :

Vous ne pouvez pas supprimer un groupe de sécurité par défaut. Si vous essayez de supprimer le groupe de sécurité par défaut EC2-Classic, vous obtiendrez l'erreur suivante: Client.InvalidGroup.Reserved: Le groupe de sécurité «par défaut» est réservé. Si vous essayez de supprimer un groupe de sécurité par défaut VPC, vous obtiendrez l'erreur suivante: Client.CannotDelete: le groupe spécifié: "sg-51530134" nom: "default" ne peut pas être supprimé par un utilisateur.

Cela en fait un candidat fiable pour récupérer notre identifiant de compte, à condition que vous soyez dans EC2 classic ou que vous ayez un VPC par défaut (* voir les cas extrêmes si vous ne le faites pas).

Exemple:

aws ec2 describe-security-groups \
    --group-names 'Default' \
    --query 'SecurityGroups[0].OwnerId' \
    --output text

Cela permet --queryde filtrer la sortie jusqu'à l '"ID du propriétaire" pour le premier résultat de cette demande, puis utilise --outputpour afficher votre ID de compte en texte brut:

123456781234

Cas de bord:

(Merci @kenchew) Notez que si vous avez supprimé votre VPC par défaut dans une région donnée, ce groupe de sécurité n'existe plus et vous devez utiliser l'une de ces solutions alternatives:

Lectures complémentaires:

Anthony Neace
la source
9

Si vous exécutez sur un serveur exécuté avec un rôle assumé, vous ne pouvez pas appeler aws sts get-caller-identity. De plus, describe-security-groupsvous ne pouvez pas toujours utiliser le --group-namesfiltre (cela ne fonctionne pas si vous n'avez pas de VPC par défaut), alors choisissez simplement le premier groupe de sécurité. J'ai trouvé que c'était le plus fiable, quel que soit le type d'authentification que vous utilisez ou le type de VPC dont vous disposez.

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
Philip Kirkland
la source
Je suis d'accord avec ça. get-caller-identity semble toujours renvoyer le compte d'utilisateurs, quel que soit le rôle qu'ils ont assumé. Si vous voulez le rôle assumé, vous semblez avoir besoin d'utiliser quelque chose comme ça encore (2 ans plus tard ..)
adaptéupgeek
2

Ma méthode préférée est à utiliser aws iam get-user [--profile <profile>]car vous n'avez besoin que du rôle de libre-service IAM pour que cela fonctionne.

user2976775
la source
3
Notez que cela ne fonctionne pas lorsque vous utilisez AssumedRole
Sanoob