Выполните команду ssm.send_command для EC2 из Lambda. Проблемы с IAM - PullRequest
1 голос
/ 02 апреля 2019

У меня проблемы с выполнением команды на машине Windows из лямбда-функции с использованием ssm.send_command в Python.Эти лямбда-функции должны выполнять простую команду на машине с 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 роли не назначены

Проблема: я не вижу, что папка "test-dir" была создана на сервере Windows. Пожалуйста, не могли бы вы помочь мне определитьчего не хватает, или как я могу настроить лямбда-функцию для выполнения команды и отправки результатов в CloudWatch.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Спасибо @ fsinis90 за ваши рекомендации.

Я попробовал их, а также добавил следующие политики к роли моего экземпляра:

  • AWSHealthFullAccess
  • AmazonEC2RoleforSSM
  • AWSConfigUserAccess
  • AmazonSSMFullAccess
  • CloudWatchReadOnlyAccess

И это помогает.

0 голосов
/ 05 апреля 2019

Вам необходимо назначить политику AmazonSSMFullAccess для экземпляра, иначе она не будет работать.Обязательно перезапустите экземпляр после изменения.

Если это не сработает:

  • Добавьте в код блоки try и except, чтобы проверить, в чем ошибка.
  • Убедитесь, что на вашем экземпляре установлен SSMAgent (подключитесь к нему, откройте PowerShell и выполните Restart-Service AmazonSSMAgent).
...