为什么通过 IAM 策略将“ssm:sendCommand”限制为特定文档会显示访问被拒绝?

Aza*_*hli 2 amazon-ec2 amazon-web-services amazon-iam aws-ssm

我试图让 IAM 用户只能对特定文档使用 SSM 运行命令。

如果我将以下策略附加到用户,则该用户确实只能AWS-RunShellScript在 EC2 实例上成功执行(这是 AWS 托管的)文档。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeDocument",
                "ssm:DescribeDocumentParameters",
                "ssm:DescribeDocumentPermission",
                "ssm:GetCommandInvocation",
                "ssm:GetDocument",
                "ssm:ListCommandInvocations",
                "ssm:ListCommands",
                "ssm:ListDocumentMetadataHistory",
                "ssm:ListDocuments",
                "ssm:ListDocumentVersions"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ssm:SendCommand",
            "Resource": "arn:aws:ssm:us-west-2:999999999999:document/AWS-RunShellScript"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我用我创建的自定义文档 ARN 替换策略中的资源项(例如arn:aws:ssm:us-west-2:999999999999:document/CustomDocument),我会收到“访问被拒绝”的消息

在此输入图像描述

Erm*_*ary 6

文档中并不太清楚,但为了限制ssm:SendCommand,您必须使用该Resource字段来指定允许 IAM 用户运行哪些文档以及允许在哪些实例上运行命令

\n

用户在尝试运行命令时将看到所有实例,但只能针对 IAM 策略中指定的 EC2 实例 ID 执行命令。

\n

如果需要,您可以指定策略以允许任何实例,如下所示,或者根据在 IAM 策略中授予最小权限的标准安全建议指定有限的实例 ID 列表。

\n

至于为什么AWS托管文档有效,这可能是一些内部魔法 \xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f

\n

这应该有效:

\n
{\n   "Version":"2012-10-17",\n   "Statement":[\n      {\n         "Effect":"Allow",\n         "Action":"ssm:SendCommand",\n         "Resource":[\n            "arn:aws:ec2:us-west-2:999999999999:instance/*",\n            "arn:aws:ssm:us-west-2:999999999999:document/AWS-RunShellScript"\n         ]\n      }\n   ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n