Настройка роли IAM уведомления темы SNS в задачах окна обслуживания

В настоящее время у меня настроено окно обслуживания AWS, чтобы обновлять определенные вещи в некоторых экземплярах EC2. Я хочу настроить тему SNS, чтобы отправлять мне электронные письма, когда одна из задач не выполняется правильно. Пока у меня есть следующий шаблон Cloudformation, который отлично развертывается:

   MaintenanceWindowTask1:
    Type: AWS::SSM::MaintenanceWindowTask
    Properties:
      Name: UpdateSSMAgent
      WindowId: !Ref MaintenanceWindow
      Targets:
        - Key: TargetIds
          Values:
            - !Ref MaintenanceWindowTarget
      TaskArn: UpdateSSMAgent
      TaskType: RUN_COMMAND
      TaskInvocationParameters:
        MaintenanceWindowRunCommandParameters:
          Parameters:
            version:
              - "{{ssm:/ssm-version}}"
            allowDowngrade:
              - "true"
          NotificationConfig:
            NotificationArn: !Ref SnsTopic
            NotificationEvents:
              - Failed
            NotificationType: Command
      Priority: 1
      MaxConcurrency: 100%
      MaxErrors: 1

Проблема в том, что у меня нет роли IAM для уведомлений, определенной в стеке CFN, поэтому тема не может быть опубликована.

Я не могу найти какую-либо документацию о том, каким должно быть подходящее определение, и я не хочу устанавливать роль IAM, которую использует тема SNS, через консоль.

Кто-нибудь знает решение или знает правильное определение CFN для роли IAM-уведомления SNS?




Ответы (1)


Роль SNS следует передавать с помощью ServiceRoleArn . Каким он должен быть, показано в документах AWS:

В CloudFormation роль будет:

SMMSNSRole:
  Type: 'AWS::IAM::Role'
  Properties:
    AssumeRolePolicyDocument:
      Version: 2012-10-17
      Statement:
        - Effect: Allow
          Principal:
            Service:
            - ssm.amazonaws.com
          Action:
            - 'sts:AssumeRole'
    Path: /
    Policies:
      - PolicyName: PublishToSNS
        PolicyDocument:
          Version: 2012-10-17
          Statement:
            - Effect: Allow
              Action: 'sns:Publish'
              Resource: '*'

Кроме того, вы можете создать роль в консоли AWS, проверить ее в консоли IAM, чтобы узнать, что именно она собой представляет, и воссоздать ее в CloudFormation.

Обновлять:

В вашем коде:

   MaintenanceWindowTask1:
    Type: AWS::SSM::MaintenanceWindowTask
    Properties:
      Name: UpdateSSMAgent
      WindowId: !Ref MaintenanceWindow
      Targets:
        - Key: TargetIds
          Values:
            - !Ref MaintenanceWindowTarget
      TaskArn: UpdateSSMAgent
      TaskType: RUN_COMMAND
      TaskInvocationParameters:
        MaintenanceWindowRunCommandParameters:
          Parameters:
            version:
              - "{{ssm:/ssm-version}}"
            allowDowngrade:
              - "true"
          ServiceRoleArn: !GetAtt SMMSNSRole.Arn  
          NotificationConfig:
            NotificationArn: !Ref SnsTopic
            NotificationEvents:
              - Failed
            NotificationType: Command
      Priority: 1
      MaxConcurrency: 100%
      MaxErrors: 1
person Marcin    schedule 08.12.2020
comment
Ура, ServiceRoleArn будет находиться под MaintenanceWindowRunCommandParameters уровнем или под Parameters? - person Leon Smith; 08.12.2020
comment
@LeonSmith Я обновил ответ новым примером и исправил ссылку. Можешь взглянуть? - person Marcin; 08.12.2020
comment
Большое спасибо, это должно сработать. - person Leon Smith; 08.12.2020