使用AWS Cloudformation通过SNS主题配置CloudTrail

时间:2018-05-22 23:38:51

标签: amazon-cloudformation

我是AWS CloudFormation的新手,我已经使用它将CloudTrail部署到多个帐户而没有问题,但是我尝试使用每个CloudTrail可以使用的一个集中式SNS主题,如果我通过CloudTrail GUI进行编辑,但是我无法使CloudFormation工作。

---
AWSTemplateFormatVersion: '2010-09-09'
Description: Centralised CloudTrail
Resources: 
  CloudTrail:
Type: "AWS::CloudTrail::Trail"
Properties:
  EnableLogFileValidation: 'false'
  IncludeGlobalServiceEvents: 'true'
  IsLogging: 'true'
  IsMultiRegionTrail: 'true'
  S3BucketName: company-cloudtrail-au
  TrailName: Trail1
  SnsTopicName: SNSTopic

我试图将ARN用于SNS主题(下面的示例)但我无法弄清楚如何告诉CloudFormation使用ARN而不是名称,如果我只是将名称放入然后它在每个子帐户中创建一个新的SNS主题。

如果我在部署CloudFormation后进入GUI,我可以将其指向正确的ARN并且它是集中的但是它不理想,请告诉我SNS是不是意味着可以在帐户之间共享,也可以使用更好的方法。

SNS主题的示例ARN - ARN:AWS:SNS:AP-东南-1:1111111111:SNSTopic

2 个答案:

答案 0 :(得分:0)

解决方案取决于您如何创建集中式SNS。如果使用CF模板创建,则可以将SNS主题的ARN导出为输出。参考CloudFormation Output

在您创建CloudTrail的当前堆栈中,您可以使用导入选项参考SNS主题的ARN。参考Fn::ImportValue

(或)

如果您已手动创建SNS主题,您仍然可以将SNS的ARN作为Cloud Formation创建堆栈调用的参数传递。参考Parameters

希望这会有所帮助。

答案 1 :(得分:0)

有多种方法可以将Arn传递给SnsTopicName:

  1. 如果您已在模板本身中以以下形式创建了SNS主题-类型:AWS :: SNS :: Topic,则可以将SNS主题的ARN称为
SnsTopicName: !GetAtt MY_SNS_Topic.Arn
  1. 如果您在控制台中手动创建了SNS主题,则可以将Arn设置为
SnsTopicName: !Sub "your-full-ARN-of-the-SNS-Topic"
  1. 您可以通过默认值:value(arn)的参数传递ARN
Parameters:
 SNSTopic:
   Description: SNS Topic Name
   Type: String
   Default: arn:aws:sns:ap-southeast-1:1111111111:SNSTopic

##########
Properties:
 SnsTopicName: !Ref SNSTopic
  1. 您可以在单独的配置文件中定义ARN,并将其作为参数与模板的部署函数一起传递,或者在调用脚本以部署模板时传递给它
Filename - configfile.conf
SNSTopic="arn:aws:sns:ap-southeast-1:1111111111:SNSTopic"

AWS Serverless Template
Parameters:
 SNSTopic:
   Type: String
##########
Properties:
 SnsTopicName: !Sub "${SNSTopic}"