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

问题描述 投票:0回答:2

我在使用Python中的ssm.send_command的Lambda函数在Windows机器上执行命令时遇到问题。这个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。

谢谢。

python-2.7 amazon-web-services aws-lambda amazon-iam
2个回答
0
投票

您需要将AmazonSSMFullAccess策略分配给实例,否则它将无法工作。确保在更改后重新启动实例。

如果这不起作用:

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

0
投票

谢谢你@ fsinis90的推荐。

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

  • AWSHealthFullAccess
  • AmazonEC2RoleforSSM
  • AWSConfigUserAccess
  • AmazonSSMFullAccess
  • CloudWatchReadOnlyAccess

它有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.