我有一项服务,它使用AWS Access Key将内容推送到S3。我将落实该服务,我有AWS Access Key和Secret。但是,我无法在帐户的IAM或安全凭据中找到此密钥。
有没有办法枚举整个AWS账户的所有访问密钥?
答案 0 :(得分:30)
如果您无权访问帐户的主要访问密钥,但您确实拥有对IAM具有足够访问权限的访问密钥,则可以枚举帐户中的所有用户,然后列出访问权限每个人的钥匙。例如:
for user in $(aws iam list-users --output text | awk '{print $NF}'); do
aws iam list-access-keys --user $user --output text
done
答案 1 :(得分:8)
如果您只想查找访问密钥ID的所有者,更简单的方法就是使用AWS CLI和密钥ID和密钥来访问随机AWS服务。 AWS CLI将抛出Access Denied错误,其中包含Access Key的所有者信息的完整详细信息,如下所示:
$ aws iam get-user An error occurred (AccessDenied) when calling the GetUser operation: User: arn:aws:iam::xxxxxxx:user/xxxx is not authorized to perform: iam:GetUser on resource: user xxxxx
从错误消息中,您将拥有帐户ID,即用户名。
答案 2 :(得分:3)
如果您没有耐心或信心来创建脚本,那么很容易会错过一个可以进行反向查找的操作,至少可以找到拥有某个密钥的用户。我知道一个用户可以有几个键,但是它会大大缩小搜索空间。
https://console.aws.amazon.com/iam/home?region=us-east-1#/users
答案 3 :(得分:0)
您可以使用AWS命令行界面枚举特定帐户的所有访问密钥。
步骤are shown here,举几个例子。
如果您未指定IAM用户名并使用您帐户的主要访问密钥来触发请求,则应列出与您的AWS账户关联的所有用户名。
答案 4 :(得分:0)
我喜欢Jonathan Kamens的解决方案,但是代码返回了所有密钥及其所有者的列表。
我制作了一个外壳脚本,用于通过访问密钥ID获取用户名。看:
#!/bin/bash
# exit when the command fails
set -o errexit;
# exit when try to use undeclared var
set -o nounset;
accessKeyToSearch=${1?"Usage: bash $0 AccessKeyId"}
for username in $(aws iam list-users --query 'Users[*].UserName' --output text); do
for accessKeyId in $(aws iam list-access-keys --user-name $username --query 'AccessKeyMetadata[*].AccessKeyId' --output text); do
if [ "$accessKeyToSearch" = "$accessKeyId" ]; then
echo $username;
break;
fi;
done;
done;
您还可以在我的GitHub Gist中看到脚本:https://gist.github.com/cauealvesbraz/1121c0a0375648db13b137b31ef8955d
答案 5 :(得分:0)
❯ aws --profile my-aws-account iam get-user
{
"User": {
"Path": "/",
"UserName": "my-username",
"UserId": XXXXXX",
"Arn": "arn:aws:iam::000000000000:user/my-username",
"CreateDate": "2019-10-27T08:53:53Z"
}
}
aws iam get-user --query'User.Arn'
答案 6 :(得分:0)
要回答标题“查找AWS Access Key的所有者”中提出的问题,请检查所有者,并因此使用以下命令检查密钥是否存在:
aws iam get-access-key-last-used --access-key-id $AWS_ACCESS_KEY_ID --query 'UserName' --output text
请注意,如果找到,它将返回退出代码,零则返回,否则返回非零。这是@ dols3m在当前接受的答案的注释中建议的方法,有关更多详细信息,请参见get-access-key-last-used的文档。
要枚举帐户中的所有密钥,请执行以下操作:
for user in $(aws iam list-users --query 'Users[*].UserName' --output text); do
aws iam list-access-keys --user $user --query "AccessKeyMetadata[].AccessKeyId" --output text
done
有关更多信息,请参见list-users和list-access-keys的文档。
答案 7 :(得分:-1)
即使您拥有多个帐户,也可以使用find-iam-user-by-key
工具按键查找任何用户。
输出示例:
$ ./find_user_by_key BENEEP2THOOLAI8OOKOH
./database/default:ACCESSKEYMETADATA BENEEP2THOOLAI8OOKOH 2014-09-11T23:22:53Z Active stanislav.rudenko