Amazon web services 如何测试AWS命令行工具的凭据

Amazon web services 如何测试AWS命令行工具的凭据,amazon-web-services,aws-cli,Amazon Web Services,Aws Cli,是否有可以传递给aws实用程序的命令/子命令,该命令/子命令可以1)验证~/.aws/credentials文件中的凭据是否有效,以及2)指示凭据属于哪个用户?我正在寻找一些通用的东西,它不会假设用户拥有IAM或任何特定服务的权限 这方面的使用案例是部署时的健全性检查,以确保凭据良好。理想情况下,如果存在无效凭据,可以通过某种方法检查返回值并中止部署。有一条捷径-aws iam get user将告诉您(当前iam用户)的详细信息,前提是用户具有iam权限 有两个CLI调用支持--dry run

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


这方面的使用案例是部署时的健全性检查,以确保凭据良好。理想情况下,如果存在无效凭据,可以通过某种方法检查返回值并中止部署。

有一条捷径-
aws iam get user
将告诉您(当前iam用户)的详细信息,前提是用户具有
iam
权限

有两个CLI调用支持
--dry run
标志,如
aws ec2运行实例
,您可以告诉您是否有必要的config/cred来执行该操作

还有一个
--auth dry run
,它检查您是否具有命令所需的权限,而不实际运行命令。如果您具有所需的权限,该命令将返回DryRunOperation;否则,它将返回未经授权的操作。[来自]

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

了解哪个用户/角色拥有哪些权限的最佳方法是使用。

使用:
aws sts获取呼叫者身份

与其他API/CLI调用不同,无论您的IAM权限如何,它都将始终工作

您将获得以下格式的输出:

{
    "Account": "123456789012", 
    "UserId": "AR#####:#####", 
    "Arn": "arn:aws:sts::123456789012:assumed-role/role-name/role-session-name"
}
确切值取决于凭据的类型,但通常包括(人类)用户的名称


它使用的标准是成功时给予0,如果您没有凭据,则给予255。

我是否建议您最好在询问时这样做?堆栈溢出是专门针对编程问题的。@Tripkinetics是的,我不知道该问什么。在我看来,问题的实质更多的是以编程方式查询API,而不是管理服务器本身,我运行测试的用户得到了一个
AccessDenied
错误,其中包括完整的
arn:aws:iam::123…890:user/someone
字符串作为错误输出的一部分。完全可能该用户没有权限自己“获取用户”:-/是的,我有这种情况。在用户ARN旁边的AWS控制台中,它显示N/A,鼠标悬停在上方说明“用户ARN:AWS:iam:…:用户/steve无权在资源:用户steve上执行iam:GetUser”这是一个很好的答案,但如果您使用的是MFA,请注意——它更复杂。使用MFA,您需要使用工作凭证(i)和MFA令牌来获得不同的工作临时凭证(ii),使用此解决方案,您可以获得凭证(i)或(ii)的相同结果。@MarkChackerian情况并非总是如此。我创建了一个用户,其MFA正在使用强制执行。在MFA会话令牌未激活的情况下,如果我执行
aws iam get user--profile test MFA
,我会得到:
调用GetUser操作时发生错误(AccessDenied)。但是,
aws sts获取呼叫者身份--profile test mfa
输出
test mfa
的帐户、ARN和用户ID(类似地,在没有激活mfa会话令牌的情况下)。获取错误代码254(未在链接中描述)和消息
发生错误(InvalidClientTokenId)调用GetCallerIdentity操作时:请求中包含的安全令牌无效。