在 EC2 上使用 SSM 运行 命令执行 Lambda 函数时访问被拒绝

Access Denied when executing Lambda Function with SSM Run Command on EC2

我有一个 EC2 实例,上面有一些我想在每天特定时间 运行 执行的脚本。为了自动执行此操作,我使用 https://gist.github.com/lrakai/18303e1fc1fb1d8635cc20eee73a06a0 中的代码实现了一个 lambda 函数,以适应我的区域、实例和 shell 命令。我打算 link 将它发送到 EventBridge 以进行计划执行。

我的 EC2 安装并更新了 SSM 代理,我的 Lambda 函数具有以下策略:AWSEC2FullAccess 和另一个使用日志组的自定义生成策略。 测试功能时,出现以下错误:

An error occurred (AccessDeniedException) when calling the SendCommand operation: user [my Lambda's ARN] is not authorized to perform: ssm:SendCommand on resource: [my EC2 ARN] because no identity-based policy allows the ssm:SendCommand action",   "errorType": "ClientError"

我找不到我需要附加到 Lambda 函数的角色以允许此操作通过的策略,而且我不确定创建一个资源时要指定哪些资源。

PS。我尝试了一种替代架构,直接使用带有目标系统管理器 运行 命令和目标键“InstanceIds”、目标值 [我的实例 ID] 和常量参数部分中的命令的 EventBridge 规则,但它没有不幸的是工作,所以我正在尝试这种方式。

如有必要,很乐意提供更多信息,感谢任何线索。

arn:aws:iam::aws:policy/AmazonEC2FullAccess 不包含 ssm 权限。要纠正您可以将 inline policy 添加到您的函数角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ssm:SendCommand",
            "Resource": "*"
        }
    ]
}

您可以将 * 替换为您要使用的命令的 ARN 以更加明确。