Como testar credenciais para as Ferramentas de linha de comando da AWS

149

Existe um comando / subcomando que pode ser passado ao awsutilitário que pode 1) verificar se as credenciais no ~/.aws/credentialsarquivo são válidas e 2) fornecer alguma indicação a qual usuário as credenciais pertencem? Estou procurando por algo genérico que não faça suposições sobre o usuário ter permissões para o IAM ou qualquer serviço específico.

O caso de uso para isso é uma verificação de sanidade no tempo de implantação para garantir que as credenciais sejam boas. Idealmente, haveria alguma maneira de verificar o valor de retorno e abortar a implantação se houver credenciais inválidas.

smitelli
fonte
3
Posso sugerir que isso seria melhor solicitado em serverfault.com ? O Stack Overflow é especificamente para perguntas de programação.
Tripp Kinetics
4
@TrippKinetics Sim, eu estava em cima do muro sobre onde perguntar. Na minha opinião, a questão principal era mais sobre consultar programaticamente uma API do que gerenciar servidores por si só.
smitelli

Respostas:

220

Use GetCallerIdentity :
aws sts get-caller-identity

Ao contrário de outras chamadas de API / CLI, ele sempre funcionará, independentemente das suas permissões do IAM.

Você obterá a saída no seguinte formato:

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

O formato exato do ARN dependerá do tipo de credencial, mas geralmente inclui o nome do usuário (humano).

Ele usa os códigos de erro padrão da CLI da AWS, fornecendo 0 em caso de sucesso e 255 se você não tiver credenciais.

Jason
fonte
5
Essa é uma ótima resposta, mas se você estiver usando o MFA, cuidado - é mais complicado. Com o MFA, você precisa usar credenciais de trabalho (i) combinadas com um token MFA para obter credenciais temporárias de trabalho diferentes (ii) e, com esta solução, obtém os mesmos resultados para as credenciais (i) ou (ii).
Mark Chackerian
3
@ MarkChackerian Esse nem sempre é o caso. Criei um usuário cujo MFA está sendo imposto usando a política do Trek10 . Com sessão MFA token não ativo, se eu executar aws iam get-user --profile test-mfa, eu recebo: An error occurred (AccessDenied) when calling the GetUser operation. No entanto, aws sts get-caller-identity --profile test-mfagera (da mesma forma, sem nenhum token de sessão MFA ativo) a test-mfaconta, o ARN e o ID do usuário.
Ville
54

Existe uma maneira direta - aws iam get-userinformaria os detalhes sobre quem você é (o usuário atual do IAM) - desde que o usuário tivesse iamprivilégios.

Existem algumas chamadas da CLI que suportam --dry-runsinalizadores como os aws ec2 run-instancesque você informa se possui o config / cred necessário para executar a operação.

Também existe o --auth-dry-runque Verifica se você possui as permissões necessárias para o comando, sem realmente executar o comando. Se você tiver as permissões necessárias, o comando retornará DryRunOperation; caso contrário, ele retornará UnauthorizedOperation. [Da documentação da AWS - Opções comuns ]

Você seria capaz de listar as chaves de acesso do IAM no console de gerenciamento, que podem ser verificadas para ver quem foi atribuído a qual chave.

A melhor maneira de entender qual usuário / função tem quais privilégios é usar o IAM Policy Simulator .

Naveen Vijay
fonte
16
Ironicamente, o usuário que executou o teste obteve um AccessDeniederro - que incluiu a arn:aws:iam::123...890:user/somebodycadeia completa como parte da saída do erro.
Smitelli 5/08
7
Inteiramente possível, o usuário não tem permissão para obter um "usuário". : - /
Jason
Sim, eu tenho essa situação. No console da AWS, ao lado do ARN do usuário, ele mostra N / A, e o cursor passa o mouse sobre o assunto "O usuário arn: aws: iam: ...: user / steve não está autorizado a executar iam: GetUser no recurso: user steve"
Steve Bennett