¿Forma rápida de obtener el número de cuenta de AWS de las herramientas de la AWS CLI?

99

Buscando una forma rápida de extraer mi número de cuenta, originalmente había pensado en usarlo, aws iam get-account-authorization-details --max-items 1pero hay varios problemas al hacerlo de esta manera. ¿Hay alguna forma de hacer esto que no cruce los orígenes de las cuentas?

ehime
fuente

Respuestas:

217

Puede obtener el número de cuenta del subcomando Secure Token Serviceget-caller-identity utilizando lo siguiente:

aws sts get-caller-identity --query Account --output text
Taras Alenin
fuente
2
Esto debería ser mucho más confiable que los grupos de seguridad, ya que puede eliminar el grupo de seguridad predeterminado.
Justin
4
comando más corto si se alimenta a jqaws sts get-caller-identity|jq -r ".Account"
BMW
necesitaba almacenar en una variable pero estaba obteniendo una línea adicional, esto sería mejor para esoaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim
Para mí, funciona cuando quito la --query 'Account'pieza.
coliveira
@BMW Desafortunadamente, no siempre puede confiar en jqestar involucrado o instalado en un sistema. Algunos servidores prohíben la instalación de paquetes extraños por motivos de seguridad. Podrías hacer algo como esto, aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'pero es un poco molesto y también podrías hacerlo --query 'Account' --output texten ese momento.
ehime
33

De mi respuesta relacionada para la CLI de AWS PowerShell , su ID de cuenta es parte del Arn de recursos que crea ... y aquellos que se crean automáticamente para usted. Algunos recursos también lo incluirán como OwnerId.

El grupo de seguridad predeterminado se crea automáticamente en la VPC predeterminada de cada región como grupo de seguridad reservado. De la documentación :

No puede eliminar un grupo de seguridad predeterminado. Si intenta eliminar el grupo de seguridad predeterminado EC2-Classic, obtendrá el siguiente error: Client.InvalidGroup.Reserved: El grupo de seguridad 'predeterminado' está reservado. Si intenta eliminar un grupo de seguridad predeterminado de VPC, obtendrá el siguiente error: Client.CannotDelete: el grupo especificado: "sg-51530134" nombre: "default" no puede ser eliminado por un usuario.

Esto lo convierte en un candidato confiable para recuperar nuestro ID de cuenta, siempre que esté en EC2 Classic o tenga una VPC predeterminada (* consulte los casos extremos si no la tiene).

Ejemplo:

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

Esto se utiliza --querypara filtrar la salida hasta el "ID de propietario" para el primer resultado de esta solicitud, y luego se utiliza --outputpara generar su ID de cuenta como texto sin formato:

123456781234

Casos de borde:

(Gracias @kenchew) Tenga en cuenta que si ha eliminado su VPC predeterminada en una región determinada, este grupo de seguridad ya no existe y debe utilizar una de estas soluciones alternativas:

Otras lecturas:

Anthony Neace
fuente
9

Si está ejecutando en un servidor que se está ejecutando con un rol asumido, no puede llamar aws sts get-caller-identity. Además, describe-security-groupsno siempre puede usar el --group-namesfiltro (no funciona si no tiene una VPC predeterminada), así que elija el primer grupo de seguridad. Descubrí que este es el más confiable, independientemente del tipo de autenticación que use o del tipo de VPC que tenga.

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
Philip Kirkland
fuente
De acuerdo con esto. get-caller-identity siempre parece devolver la cuenta de usuario, independientemente del rol que hayan asumido. Si desea que el papel asumido que pareces necesidad de usar algo como esto todavía (2 años más tarde ..)
suitedupgeek
2

Mi método favorito es usarlo, aws iam get-user [--profile <profile>]ya que solo necesita el rol de autoservicio de IAM para que esto funcione.

usuario2976775
fuente
3
Tenga en cuenta que no funciona cuando usa AssumedRole
Sanoob