首页 > 解决方案 > AWS IAM ARN 和通配符

问题描述

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) 的列表用户吗?

标签: amazon-web-servicesamazon-iam

解决方案


假设查询确实有效(我没有测试它们):

  • 是的,省略帐号是一个“小”危险,因为它还允许具有此策略的用户管理不同帐户中同名用户的访问密钥,但接收帐户不会接受请求,所以这是安全的。
  • ListUsers命令实际上并不需要很多参数(只是一个前缀),所以它实际上是一个“全有或全无”的 API 调用。请注意,它仅适用于请求用户列表,没有别的。(也就是说,没有调用“ListUsers for a resource”的概念。)

请参阅:Identity and Access Management 的操作、资源和条件键 - AWS Identity and Access Management


推荐阅读