Security 查找AWS访问密钥的所有者
我有一个服务,它使用AWS访问密钥将内容推送到S3。我要去日落服务,我有AWS的访问密钥和密码。但是,我在IAM或帐户的安全凭据中找不到此密钥Security 查找AWS访问密钥的所有者,security,amazon-web-services,Security,Amazon Web Services,我有一个服务,它使用AWS访问密钥将内容推送到S3。我要去日落服务,我有AWS的访问密钥和密码。但是,我在IAM或帐户的安全凭据中找不到此密钥 是否有方法枚举整个AWS帐户的所有访问密钥?您可以使用AWS命令行界面枚举特定帐户的所有访问密钥 这些步骤有几个例子 如果您没有指定IAM用户名,并且正在使用帐户的主访问密钥触发请求,则应列出与AWS帐户关联的所有用户。如果您没有访问帐户的主访问密钥的权限,但您确实拥有对IAM具有足够访问权限的访问密钥,您可以枚举帐户中的所有用户,然后列出每个用户的访问
是否有方法枚举整个AWS帐户的所有访问密钥?您可以使用AWS命令行界面枚举特定帐户的所有访问密钥 这些步骤有几个例子
如果您没有指定IAM用户名,并且正在使用帐户的主访问密钥触发请求,则应列出与AWS帐户关联的所有用户。如果您没有访问帐户的主访问密钥的权限,但您确实拥有对IAM具有足够访问权限的访问密钥,您可以枚举帐户中的所有用户,然后列出每个用户的访问密钥。例如:
for user in $(aws iam list-users --output text | awk '{print $NF}'); do
aws iam list-access-keys --user $user --output text
done
即使您有多个帐户,也可以使用该工具按键查找任何用户。它还生成缓存,因此您无需每次运行aws iam…
输出示例:
$ ./find_user_by_key BENEEP2THOOLAI8OOKOH
./database/default:ACCESSKEYMETADATA BENEEP2THOOLAI8OOKOH 2014-09-11T23:22:53Z Active john.doe
您可以通过以下命令列出所有访问密钥:
aws iam list-access-keys
然后,您可以由用户对其进行grep
要仅列出一个键,请尝试(如果用户较多,请增加100
):
读取元键日期状态用户时;做
echo$key;
done<如果您只想找到访问密钥ID的所有者,一个更简单的技巧就是使用带有密钥ID和密钥的AWS CLI访问随机AWS服务。AWS CLI将抛出访问被拒绝错误,该错误包含访问密钥所有者信息的完整详细信息,如下所示:
$ 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和用户名
如果用户具有访问IAM的权限,您将获得该用户的完整详细信息,如下所示:
{
"User": {
"Path": "/",
"UserName": "xxx",
"UserId": "xxx",
"Arn": "arn:aws:iam::75xxx:user/xxx",
"CreateDate": "2019-09-10T07:10:26+00:00",
"PasswordLastUsed": "2020-05-26T07:51:50+00:00"
}
}
更新
AWS提供的新命令是:
web控制台中的反向查找
如果您没有耐心或信心创建脚本,那么很容易忽略您可以进行反向查找,至少可以找到拥有某个密钥的用户。我知道一个用户可以有多个键,但这会大大减少搜索空间
我喜欢Jonathan Kamens的解决方案,但代码会返回所有密钥及其所有者的列表
我制作了一个shell脚本,用于通过访问密钥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;
您还可以在my GitHub Gist中看到脚本:
aws iam get user——查询“user.Arn”要回答标题“查找aws访问密钥的所有者”中提出的问题,请检查所有者,从而检查密钥是否存在:
aws iam get-access-key-last-used --access-key-id $AWS_ACCESS_KEY_ID --query 'UserName' --output text
请注意,如果找到,它将返回零的退出代码,如果没有,则返回非零的退出代码。这是@dols3m在对当前公认答案的评论中提出的方法,更多详细信息请参阅文档
要枚举帐户中的所有密钥,请执行以下操作:
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
有关更多信息,请参阅文档。太好了。为我工作。获取用户列表的一个可能的改进是:$(aws iam list users——查询“users[*].UserName”——输出文本)
,而不是通过管道发送到awk
,希望用户名始终位于最后一列。实际上,您不需要运行多个命令。这是获取用户名的方法:aws iam获取上次使用的访问密钥--access key id$aws_access_key_id--query'username'--输出文本。“arn:aws:sts::1234456789:federated user/john.doe”}
❯ 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-access-key-last-used --access-key-id $AWS_ACCESS_KEY_ID --query 'UserName' --output text
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