AWS IAM 策略:多个操作和多个资源

Kri*_*hna 6 amazon-web-services amazon-iam aws-kms ssm

这是关于 AWS IAM 策略的问题,具有多个资源的多个操作(可能不相关)。我有用“mykey”加密的参数“myparam”,我有如下单独块的策略,一个用于参数,一个用于密钥,它有效。

{
    {
        "Action": [
            "ssm:GetParameter",
        ],
        "Effect": "Allow",
        "Resource": "MY-ARN:MY-ACC:parameter/myparam"
    },
    {
        "Action": [
            "kms:Decrypt"
        ],
        "Effect": "Allow",
        "Resource": "MY-ARN:MY-ACC::key/mykey"
    }
}
Run Code Online (Sandbox Code Playgroud)

根据文档,我们可以组合多个操作和资源,如果我组合如下,这行得通吗?

{
    {
        "Action": [
            "ssm:GetParameter",
            "kms:Decrypt"
        ],

        "Resource": [ 
            "MY-ARN:MY-ACC:parameter/myparam"
            "MY-ARN:MY-ACC::key/mykey"
        ],
        "Effect": "Allow"
    }

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Actions to Resource 映射是如何发生的?我无法在此找到任何文档https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_action.html 如果我有相关的资源或associed Actiosn的话很有道理,什么是这您的意见?

Mar*_*cin 5

如果我结合如下相同,这行得通吗?

是的

验证我是否使用和重新创建了您的场景,mykey并将myparam内联策略添加到测试 lambda 的执行角色中。

事实上,当您使用 IAM 控制台创建此类权限时,创建的内联 json 策略将具有第二种形式,而不是第一种形式

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "ssm:GetParameter"
            ],
            "Resource": [
                "arn:aws:kms:*:xxx:key/e15f691e-5dde-473c-8f24-3af45994aeaf",
                "arn:aws:ssm:*:xxx:parameter/myparam"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

更重要的是该项目的顺序ActonsResources无关。因此你也可以有(不同的动作顺序):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:*:xxx:key/e15f691e-5dde-473c-8f24-3af45994aeaf",
                "arn:aws:ssm:*:xxx:parameter/myparam"
            ]
        }
    ]
} 
Run Code Online (Sandbox Code Playgroud)

这意味着只有在给定资源支持的情况下,IAM 才会测试对资源的操作。

通常首选第一种形式,因为它更易于阅读和管理。如果将所有内容都放在一个语句中,则很难对这样的语句进行命名、编辑和调试。