如何测试AWS Command Line Tools的凭证


149

是否存在可以传递给aws实用程序的命令/子命令,该命令/子命令可以1)验证~/.aws/credentials文件中的凭据是否有效,以及2)给出凭据所属的用户的某些指示?我正在寻找一种通用的东西,它不会对用户拥有IAM或任何特定服务的权限做出任何假设。

此用例是部署时的完整性检查,以确保凭据正确。理想情况下,如果凭据无效,将有某种方法可以检查返回值并中止部署。


3
可能我建议最好在serverfault.com上问一下?堆栈溢出专门用于编程问题。
Tripp Kinetics 2015年

4
@TrippKinetics是的,我在问问题的地方。在我看来,问题的实质更多是关于以编程方式查询API而不是管理服务器本身。
smitelli 2015年

Answers:


219

使用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)的结果相同。
Mark Chackerian

3
@MarkChackerian并非总是如此。我创建了一个使用Trek10的策略强制执行其MFA的用户。在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和UserId。
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策略模拟器


16
具有讽刺意味的是,我运行测试的用户遇到了AccessDenied错误-包括完整arn:aws:iam::123...890:user/somebody字符串作为错误输出的一部分。
smitelli

7
用户完全没有权限自行“获取用户”。:-/
Jason

是的,我有这种情况。在用户ARN旁边的AWS控制台中,它显示N / A,并且悬停说明“未授权User arn:aws:iam:...:user / steve在资源上执行iam:GetUser:user steve”
史蒂夫·贝内特(Steve Bennett)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.