見出し画像

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 #株式会社オープンストリーム #株式会社オープンストリームホールディングス 


この記事が気に入ったらサポートをしてみませんか?