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