从 https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html 的 AWS IAM ARN 文档中,我可以看到如下所示的通配符用法,这非常令人困惑。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ManageRichardAccessKeys",
"Effect": "Allow",
"Action": [
"iam:*AccessKey*",
"iam:GetUser"
],
"Resource": "arn:aws:iam::*:user/division_abc/subdivision_xyz/Richard"
},
{
"Sid": "ListForConsole",
"Effect": "Allow",
"Action": "iam:ListUsers",
"Resource": "*"
}
]
}
在第一个语句"Resource": "arn:aws:iam::*:user/division_abc/subdivision_xyz/Richard"
中,为什么我们不指定帐号而只是用通配符"*"代替 - 我知道在 S3 的上下文中这是空白的,但在这里它是通配符 - 这里的通配符到底是什么意思?通配符似乎赋予了它"任何帐户"的含义,但这不是不正确的吗?
此外,对于第二个语句"Resource": "*"
,这是否意味着任何资源的 ListUsers ? 这没有任何意义 - 这不应该像arn:aws:iam::123456789012:
指示此 AWS 账户的列表用户 (123456789012) 一样吗?
假设查询确实有效(我没有测试它们):
- 是的,省略帐号是一个"有点"危险,因为它也允许具有此策略的用户管理不同账户中同名用户的访问密钥,但接收账户不会接受请求,因此它是安全的。
ListUsers
命令实际上并不采用很多参数(只是一个前缀),因此它实际上是一个"全有或全无"的 API 调用。请注意,它仅适用于请求用户列表,不适用于其他任何内容。(也就是说,没有调用"资源列表用户"的概念。
请参阅: 身份和访问管理的操作、资源和条件键 - AWS 身份和访问管理