AWSのConfig適合パックを、ConfigではなくCloudFormationからデプロイする方法です。
テンプレートの書き方
CloudFormationテンプレートは、例えば次のように書きます。
AWSTemplateFormatVersion: 2010-09-09
Resources:
MyConformancePack:
Type: AWS::Config::ConformancePack
Properties:
ConformancePackName: my-conformance-pack
TemplateBody: |-
<Config適合パックのテンプレート>
ここで、<Config適合パックのテンプレート>
は、デプロイしたい適合パックのテンプレートに置き換えます。例えば、次のようにします。
AWSTemplateFormatVersion: 2010-09-09
Resources:
MyConformancePack:
Type: AWS::Config::ConformancePack
Properties:
ConformancePackName: my-conformance-pack
TemplateBody: |-
Resources:
EipAttached:
Properties:
ConfigRuleName: eip-attached
Scope:
ComplianceResourceTypes:
- AWS::EC2::EIP
Source:
Owner: AWS
SourceIdentifier: EIP_ATTACHED
Type: AWS::Config::ConfigRule
Ec2SecurityGroupAttachedToEni:
Properties:
ConfigRuleName: ec2-security-group-attached-to-eni
Scope:
ComplianceResourceTypes:
- AWS::EC2::SecurityGroup
Source:
Owner: AWS
SourceIdentifier: EC2_SECURITY_GROUP_ATTACHED_TO_ENI
Type: AWS::Config::ConfigRule
Ec2VolumeInuseCheck:
Properties:
ConfigRuleName: ec2-volume-inuse-check
Scope:
ComplianceResourceTypes:
- AWS::EC2::Volume
Source:
Owner: AWS
SourceIdentifier: EC2_VOLUME_INUSE_CHECK
Type: AWS::Config::ConfigRule
また、Config適合パックを TemplateBody
に直書きせず、次のようにS3に保存したConfig適合パックを指定することもできるようです。(動作未確認)
AWSTemplateFormatVersion: 2010-09-09
Resources:
MyConformancePack:
Type: AWS::Config::ConformancePack
Properties:
ConformancePackName: my-conformance-pack
TemplateS3Uri: s3://bucketname/prefix
詳細は AWS::Config::OrganizationConformancePack - AWS CloudFormation をご覧ください。
参考動画
下記の動画はとても参考になりました。本記事で取り上げなかった、パラメーターの受け渡しについても説明されています。
YAMLのパイプとハイフン |-
って?
YAML Multiline Strings に記載がありました。
パイプは複数行の文字列を扱うための記号で、直後のハイフンは文字列の最後の改行を消す記号だそうです。ハイフンはなくても動くと思いますが、本記事では参考動画に合わせた記述にしました。