如何测试AWS Command Line Tools的凭据

smi*_*lli 115 amazon-web-services aws-cli

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

此用例是部署时健全性检查,以确保凭据良好.理想情况下,如果存在无效凭据,则可以通过某种方式检查返回值并中止部署.

Jas*_*son 162

使用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"
}
Run Code Online (Sandbox Code Playgroud)

确切的ARN格式取决于凭证的类型,但通常包括(人)用户的名称.

它使用标准AWS CLI错误代码,成功时为0,如果没有凭据,则为255.

  • 这是一个很好的答案,但如果您使用MFA,请注意 - 它更复杂.使用MFA,您需要使用工作凭证(i)与MFA令牌结合使用以获得不同的工作临时凭证(ii),使用此解决方案,您可以获得凭证(i)或(ii)的相同结果. (4认同)
  • @MarkChackerian情况并非总是如此.我创建了一个使用[Trek10政策](https://www.trek10.com/blog/improving-the-aws-force-mfa-policy-for-IAM-users/)强制执行MFA的用户.如果我没有激活MFA会话令牌,如果我执行`aws iam get-user --profile test-mfa`,我得到:`调用GetUser操作时出错(AccessDenied).但是,`aws sts get-caller-identity --profile test-mfa`输出(类似地,没有MFA会话令牌激活)`test-mfa`的Account,ARN和UserId. (3认同)

Nav*_*jay 49

有一个直接的方法 - aws iam get-user告诉你有关谁(当前的IAM用户)的细节 - 只要用户有iam权限.

有几个CLI调用支持--dry-run标记aws ec2 run-instances,您可以告诉您是否有必要的config/cred来执行操作.

还有--auth-dry-run哪些检查是否具有该命令所需的权限,而不实际运行该命令.如果您具有所需的权限,则该命令将返回DryRunOperation; 否则,它返回UnauthorizedOperation.[来自AWS文档 - 常用选项 ]

您可以从管理控制台列出IAM访问密钥,您可以交叉检查以查看谁分配了哪个密钥.

了解哪个用户/角色具有哪些权限的最佳方法是使用IAM策略模拟器.

  • 具有讽刺意味的是,我运行测试的用户得到了一个`AccessDenied`错误 - 其中包括完整的`arn:aws:iam :: 123 ... 890:user/somebody`字符串作为错误输出的一部分. (14认同)
  • 用户完全没有权限自行“获取用户”。:-/ (5认同)