配置 SNS 主题通知 IAM 在维护 Window 任务中的角色

Configuring SNS Topic notification IAM Role in Maintenance Window tasks

我目前设置了 AWS 维护 Window,以便在某些 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

此问题是我在 CFN 堆栈中没有定义通知 IAM 角色,因此无法发布该主题。

我一辈子都找不到任何关于适当定义应该是什么的文档,而且我不想通过控制台设置 SNS 主题使用的 IAM 角色。

是否有人有解决方案或知道 SNS 通知 IAM 角色的正确 CFN 定义?

应使用 ServiceRoleArn 传递 SNS 角色。它应该显示在 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