Maneira rápida de obter o número da conta AWS das ferramentas AWS CLI?

99

Procurando uma maneira rápida de obter o número da minha conta, pensei originalmente em usar, aws iam get-account-authorization-details --max-items 1mas há vários problemas em fazer isso. Existe uma maneira de fazer isso que não cruze as origens da conta?

ehime
fonte

Respostas:

217

Você pode obter o número da conta no subcomando Secure Token Serviceget-caller-identity usando o seguinte:

aws sts get-caller-identity --query Account --output text
Taras Alenin
fonte
2
Deve ser muito mais confiável do que os grupos de segurança, pois você pode excluir o grupo de segurança padrão.
Justin de
4
comando mais curto se alimentar para jqaws sts get-caller-identity|jq -r ".Account"
BMW
precisava armazenar em uma variável, mas estava recebendo uma linha extra, seria melhor para issoaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim
Para mim, funciona quando eu removo a --query 'Account'peça.
coliveira
@BMW Infelizmente, você nem sempre pode contar com o jqenvolvimento ou a instalação em um sistema. Alguns servidores proíbem instalações de pacotes irrelevantes devido à segurança. Você poderia fazer algo assim, aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'mas é um pouco chato e você também pode fazer --query 'Account' --output textnesse ponto.
ehime
33

De minha resposta relacionada ao AWS PowerShell CLI , o ID da sua conta faz parte do Arn de recursos que você cria ... e aqueles que são criados automaticamente para você. Alguns recursos também irão listá-lo como um OwnerId.

O grupo de segurança padrão é criado automaticamente para você no VPC padrão de cada região como um grupo de segurança reservado. Da documentação :

Você não pode excluir um grupo de segurança padrão. Se você tentar excluir o grupo de segurança padrão EC2-Classic, receberá o seguinte erro: Client.InvalidGroup.Reserved: O grupo de segurança 'default' está reservado. Se você tentar excluir um grupo de segurança padrão VPC, receberá o seguinte erro: Client.CannotDelete: o grupo especificado: "sg-51530134" nome: "padrão" não pode ser excluído por um usuário.

Isso o torna um candidato confiável para recuperar nosso ID de conta, contanto que você esteja no EC2 classic ou tenha um VPC padrão (* consulte os casos extremos, se não tiver).

Exemplo:

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

Isso é usado --querypara filtrar a saída para o "ID do proprietário" para o primeiro resultado desta solicitação e, em seguida, usa --outputpara produzir o ID da sua conta como texto simples:

123456781234

Casos extremos:

(Obrigado @kenchew) Observe que se você excluiu seu VPC padrão em uma determinada região, este grupo de segurança não existe mais e você deve usar uma destas soluções alternativas:

Leitura adicional:

Anthony Neace
fonte
9

Se você estiver executando em um servidor que está executando com uma função assumida, você não pode chamar aws sts get-caller-identity. Além disso, describe-security-groupsnem sempre com você pode usar o --group-namesfiltro (ele não funciona se você não tiver um VPC padrão), então apenas escolha o primeiro grupo de segurança. Eu descobri que este é o mais confiável, independentemente do tipo de autenticação que você usa ou que tipo de VPC você tem.

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
Philip Kirkland
fonte
Concordo com isso. get-caller-identity sempre parece retornar a conta do usuário, independentemente da função que eles assumiram. Se você quiser o papel assumido, você parece precisar usar algo assim (2 anos depois ..)
suitupgeek
2

Meu método favorito é usar, aws iam get-user [--profile <profile>]pois você só precisa da função de autoatendimento do IAM para que isso funcione.

user2976775
fonte
3
Observe que não funciona quando você usa AssumedRole
Sanoob