Jak przetestować poświadczenia dla narzędzi wiersza poleceń AWS

149

Czy istnieje polecenie / podkomenda, które można przekazać do awsnarzędzia, które może 1) sprawdzić, czy poświadczenia w ~/.aws/credentialspliku są prawidłowe, oraz 2) podać pewne wskazówki, do którego użytkownika należą poświadczenia? Szukam czegoś ogólnego, co nie zakłada żadnych założeń dotyczących użytkownika mającego uprawnienia do IAM lub jakiejkolwiek konkretnej usługi.

Przykładem użycia jest sprawdzenie poprawności w czasie wdrażania, aby upewnić się, że poświadczenia są dobre. Idealnie byłoby, gdyby istniał sposób sprawdzenia zwracanej wartości i przerwania wdrażania, jeśli istnieją nieprawidłowe poświadczenia.

smitelli
źródło
3
Czy mogę zasugerować, że lepiej zapytać o to na serverfault.com ? Stack Overflow jest przeznaczony specjalnie do pytań programistycznych.
Tripp Kinetics
4
@TrippKinetics Tak, byłem na płocie, gdzie zapytać. Moim zdaniem sednem pytania było bardziej programowe wysyłanie zapytań do interfejsu API niż zarządzanie serwerami jako takimi.
smitelli

Odpowiedzi:

219

Użyj GetCallerIdentity :
aws sts get-caller-identity

W przeciwieństwie do innych wywołań API / CLI, zawsze będzie działać, niezależnie od Twoich uprawnień.

Otrzymasz dane wyjściowe w następującym formacie:

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

Dokładny format ARN będzie zależał od typu poświadczeń, ale często zawiera nazwę użytkownika (człowieka).

Używa standardowych kodów błędów AWS CLI, podając 0 w przypadku sukcesu i 255, jeśli nie masz poświadczeń.

Jason
źródło
5
To świetna odpowiedź, ale jeśli używasz MFA, uważaj - jest to bardziej skomplikowane. W przypadku usługi MFA musisz użyć poświadczeń roboczych (i) w połączeniu z tokenem usługi MFA, aby uzyskać różne robocze poświadczenia tymczasowe (ii), a dzięki temu rozwiązaniu uzyskasz te same wyniki dla poświadczeń (i) lub (ii).
Mark Chackerian
3
@MarkChackerian Nie zawsze tak jest. Utworzyłem użytkownika, którego MFA jest wymuszane przy użyciu zasad Trek10 . Z sesji MFA tokena nie jest aktywny, jeśli wykonam aws iam get-user --profile test-mfa, otrzymuję: An error occurred (AccessDenied) when calling the GetUser operation. Jednak aws sts get-caller-identity --profile test-mfawyprowadza (podobnie, bez aktywnego tokenu sesji MFA) test-mfakonto, ARN i identyfikator użytkownika.
Ville,
54

Jest prosty sposób - aws iam get-userpodałby szczegółowe informacje o tym, kim jesteś (aktualny użytkownik IAM) - pod warunkiem, że użytkownik ma iamuprawnienia.

Istnieje kilka wywołań CLI, które obsługują --dry-runflagę, taką jak ta, aws ec2 run-instancesktóra mówi ci, czy masz niezbędne config / cred, aby wykonać operację.

Jest też --auth-dry-runktóry Sprawdza, czy masz wymagane uprawnienia do polecenia, bez faktycznego uruchamiania polecenia. Jeśli masz wymagane uprawnienia, polecenie zwraca DryRunOperation; w przeciwnym razie zwraca UnauthorizedOperation. [Z dokumentacji AWS - typowe opcje ]

Będziesz mógł wyświetlić listę kluczy dostępu IAM z konsoli zarządzania, które możesz sprawdzić, aby zobaczyć, kto został przypisany do którego klucza.

Najlepszym sposobem, aby dowiedzieć się, który użytkownik / rola ma jakie uprawnienia, jest skorzystanie z narzędzia IAM Policy Simulator .

Naveen Vijay
źródło
16
Jak na ironię, użytkownik, który przeprowadziłem test, otrzymał AccessDeniedbłąd - który zawierał pełny arn:aws:iam::123...890:user/somebodyciąg jako część wyniku błędu.
smitelli
7
Całkowicie możliwe, że użytkownik nie ma uprawnień do „pobierania użytkownika”. : - /
Jason
Tak, mam taką sytuację. W konsoli AWS obok pola ARN użytkownika pokazuje N / A, a najechanie kursorem wyjaśnia, że ​​„Użytkownik arn: aws: iam: ...: user / steve nie ma uprawnień do wykonywania iam: GetUser na zasobie: user steve”
Steve Bennett