1

我目前设置了一个 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

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

我一生都找不到任何关于适当定义的文档,我不想通过控制台设置 SNS 主题使用的 IAM 角色。

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

4

1 回答 1

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
于 2020-12-08T01:48:04.647 回答