从 Lambda 执行到 EC2 的ssm.send_command.IAM 问题



我在 Python 中使用 Lambda 函数在 Windows 机器上执行命令时遇到问题ssm.send_command。此 Lambda 函数应在 Windows 机器上执行简单的命令:

import boto3
ssm = boto3.client('ssm')
region = 'us-east-1'
instances = ['i-XXXXXXXXXXXXX']
def lambda_handler(event, context):
    response = ssm.send_command(
        InstanceIds=instances,
        DocumentName='AWS-RunPowerShellScript',
        DocumentVersion='$DEFAULT',
        DocumentHash='2142e42a19e0955cc09e43600bf2e633df1917b69d2be9693737dfd62e0fdf61',
        DocumentHashType='Sha256',
        TimeoutSeconds=123,
        Comment='string',
        Parameters={
            'commands': [
#                'query user'
                'mkdir test-dir'
            ]
        },
        MaxErrors='1',
        CloudWatchOutputConfig={
            'CloudWatchLogGroupName': 'WindowsLogs',
            'CloudWatchOutputEnabled': True
        }
    )
    print response

此 L 函数的执行角色是

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:document/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:*"
            ]
        },
        {
            "Action": [
                "iam:PassRole"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

我还添加了策略:

AmazonEC2FullAccess

AmazonEC2RoleforSSM

AmazonSSMManagedInstanceCore

CloudWatchLogsFullAccess

AmazonSSMFullAccess

AmazonSSMAutomationRole

AmazonSSMMaintenanceWindowRole

对于 EC2,未分配任何角色

问题:我没有看到在 Windows 服务器上创建了文件夹"test-dir"。请您帮助我确定缺少什么,或者如何配置 Lambda 函数以执行命令并将结果发送到 CloudWatch。

谢谢。

您需要

AmazonSSMFullAccess策略分配给实例,否则它将不起作用。请确保在更改后重新启动实例。

如果这不起作用:

  • tryexcept块添加到代码中以检查错误所在。
  • 检查您的实例上是否安装了 SSMAgent(连接到它,打开 PowerShell 并执行 Restart-Service AmazonSSMAgent (。

感谢您@fsinis90的建议。

我尝试了它们,并将此类策略添加到我的实例角色中:

  • AWSHealthFullAccess
  • AmazonEC2RoleforSSM
  • AWSConfigUserAccess
  • AmazonSSMFullAccess
  • CloudWatchReadOnlyAccess

它有帮助。

相关内容

  • 没有找到相关文章