![見出し画像](https://assets.st-note.com/production/uploads/images/135006721/rectangle_large_type_2_20df6ec2e7ae3f98715333889de09de6.png?width=1200)
AWS CloudFormation Guard カスタムルールを作成してみる
CloudFormationのコードテストツールCloudFormation Guardはカスタムルールを作成できます。
準拠すべきポリシーを組織内で定めている場合などに有効です。
今回はCloudFormation Guardで命名規則カスタムルールを作成してテストしてみます。
ちなみにCloudFormation GuardルールはAWS Configにも適応できます。
カスタムルールでコードをテストしてみる
今回はアクセスコントロールをPRIVATEに設定した`dev-openlab-project-s3-bucket`という名前のS3バケットでテストしてみます。
./testS3.yaml (S3バケット作成テンプレート)
AWSTemplateFormatVersion: '2010-09-09'
Description: S3 resources
Resources:
TestS3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: Private
BucketName: dev-openlab-project-s3-bucket
命名規則のカスタムルールを作成
./testS3.guard
● CloudFormation Guardのルールは`.guard`という拡張子で作成します。
● ルールの記載方法はAWS公式を参照して下さい。
let aws_s3_bucket_resources = Resources.*[ Type == 'AWS::S3::Bucket' ] # 1行目
rule test_rule when %aws_s3_bucket_resources !empty { # 3行目
%aws_s3_bucket_resources.Properties.BucketName == /openlab-project/ # 4行目
%aws_s3_bucket_resources.Properties.BucketName == /^dev/ # 5行目
%aws_s3_bucket_resources.Properties.BucketName == /bucket$/ # 6行目
%aws_s3_bucket_resources.Properties.BucketName in [/^dev/, /^prd/] # 7行目
}
1行目 テンプレートのリソースからS3バケットを全て取得しています
3行目 `test_rule`という命名規則ルール名を定義します
4行目 バケット名に`openlab-project`が含まれているかテストしています
5行目 バケット名が`dev`からはじまるかテストしています
6行目 バケット名が`bucket`で終わるかテストしています
7行目 バケット名が`dev`又は`prd`からはじまるかテストしています
テストの実行
DockerImageをダウンロード
● GitHubにDockerImageの使用方法が記載されています。
docker pull public.ecr.aws/aws-cloudformation/cloudformation-guard:latest
作成した命名規則でS3テンプレートをテストします。
docker run --mount src="$(pwd)"/,target=/container/guard-files,type=bind -it public.ecr.aws/aws-cloudformation/cloudformation-guard:latest ./cfn-guard validate -d /container/guard-files/testS3.yaml -r /container/guard-files/testS3.guard
作成した命名規則は全て満たしている為、テストは成功します。テスト内容を変更して試してみてください。
まとめ
CloudFormationのコードテストツールCloudFormation Guardはカスタムルールを作成することが出来ます。
このブログでは命名規則を作成しましたが、他に様々なルールを作成することが出来ます。
● EC2のEBSボリュームサイズが〇〇以下であるか。
● EBSが暗号化されているか。
● リソースのタグ付けルール
● セキュリティーグループで全開放がしていされていないか。
AWS公式に例がいくつか紹介されています。条件付きの複雑なカスタムルールも作成できるので挑戦してみて下さい。
#AWS #株式会社オープンストリーム #株式会社オープンストリームホールディングス