Как проверить учетные данные для инструментов командной строки AWS

149

Есть ли команда / подкоманда, которую можно передать awsутилите, которая может 1) проверить, что учетные данные в ~/.aws/credentialsфайле действительны, и 2) дать некоторое указание, к какому пользователю принадлежат учетные данные? Я ищу что-то общее, что не делает никаких предположений о том, что у пользователя есть разрешения на IAM или какой-либо конкретный сервис.

Вариант использования для этого - проверка работоспособности во время развертывания, чтобы убедиться, что учетные данные в порядке. В идеале был бы какой-то способ проверить возвращаемое значение и прервать развертывание, если есть недействительные учетные данные.

smitelli
источник
3
Могу ли я предположить, что это лучше спросить на serverfault.com ? Переполнение стека специально для вопросов программирования.
Tripp Kinetics
4
@TrippKinetics Да, я был на заборе о том, где спросить. На мой взгляд, суть вопроса была больше в программных запросах API, а не в управлении серверами как таковыми.
Смителли

Ответы:

220

Используйте GetCallerIdentity :
aws sts get-caller-identity

В отличие от других вызовов API / CLI, он всегда будет работать независимо от ваших разрешений IAM.

Вы получите вывод в следующем формате:

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

Точный формат ARN зависит от типа учетных данных, но часто включает имя пользователя (человека).

Он использует стандартные коды ошибок AWS CLI, которые дают 0 в случае успеха и 255, если у вас нет учетных данных.

Джейсон
источник
5
Это отличный ответ, но если вы используете MFA, берегитесь - это сложнее. В MFA необходимо использовать рабочие учетные данные (i) в сочетании с токеном MFA для получения различных рабочих временных учетных данных (ii), и с этим решением вы получаете те же результаты для учетных данных (i) или (ii).
Марк Чакериан
3
@MarkChackerian Это не всегда так. Я создал пользователя, чей MFA применяется с помощью политики Trek10 . С MFA сессия маркера не активна, если я исполняю aws iam get-user --profile test-mfa, я получаю: An error occurred (AccessDenied) when calling the GetUser operation. Однако aws sts get-caller-identity --profile test-mfaвыводит (аналогично, без активного маркера сеанса MFA) test-mfaучетную запись, ARN и идентификатор пользователя.
Ville
54

Существует прямой способ - aws iam get-userсообщить подробности о том, кто вы (текущий пользователь IAM), - при условии, что у пользователя есть iamпривилегии.

Есть пара вызовов CLI, которые поддерживают --dry-runфлаг, например, aws ec2 run-instancesвы говорите, есть ли у вас необходимый config / cred для выполнения операции.

Также есть --auth-dry-runпроверка того, есть ли у вас необходимые разрешения для команды, без фактического запуска команды. Если у вас есть необходимые разрешения, команда возвращает DryRunOperation; в противном случае возвращается UnauthorizedOperation. [Из документации AWS - Общие параметры ]

Вы сможете перечислить ключи доступа IAM из консоли управления, которые вы можете перепроверить, чтобы узнать, кому и какому ключу был назначен.

Лучший способ понять, какой пользователь / роль имеет какие привилегии, это использовать IAM Policy Simulator .

Навин Виджай
источник
16
По иронии судьбы, пользователь, которого я запустил, получил AccessDeniedошибку, которая включала полную arn:aws:iam::123...890:user/somebodyстроку как часть вывода ошибки.
Smitelli
7
Вполне возможно, что пользователь не имеет разрешения самостоятельно «получить пользователя». : - /
Джейсон
Да, у меня такая ситуация. В Консоли AWS рядом с ARN пользователя отображается N / A, а при наведении указывается, что «Пользователь arn: aws: iam: ...: пользователь / Стив не авторизован для выполнения iam: GetUser на ресурсе: пользователь Стив»
Стив Беннетт