AWS Config で AWS CloudFormation Guard を使ったカスタムポリシーを設定出来るようになりました

2022.08.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

本日のアップデートで、AWS Config にて AWS CloudFormation Guard をカスタムポリシーとする、カスタム Config ルールが作成出来るようになりました。

従来までは独自のカスタムルールを作成する際は、ルールに準拠しているかチェックするための Lambda 関数を別途用意し、チェック処理を実装する必要がありました。

今回のアップデートでカスタムルールを作成する際に Lambda 関数を用意するのではなく Config のルール作成画面あるいはルール作成 API にて、AWS CloudFormation Guard の DSL でルールを指定することが出来るようになります。

設定方法

以下のように Config ルール追加時のルールタイプで、「Guard を使用してカスタムルールを作成」を選択出来るようになっています。

Guard カスタムポリシーを作成画面では、以下のようにGuard ランタイムバージョンとRule contentが新たに設定出来るようになっています。

本日時点で選択出来る Guard ランタイムバージョンはguard-2.x.xのみでした。

ルールの記述には Guard の DSL を使って実装します。
以下の参照してください。

作成されたカスタムルールはタイプが「カスタムポリシー」としてリストされます。
従来の Lambda 関数でルール実装するタイプのものは「カスタム Lambda」です。

使ってみる

実際に Guard カスタムポリシーを作成して、準拠チェックを行ってみました。
ここでは単純に「VPC の CIDR が 10.0.0.0/16 であること」というルールを作成しました。

以下のようにルールを設定しています。

rule hoge_rule_name when resourceType == "AWS::EC2::VPC" {
    configuration.cidrBlock == "10.0.0.0/16"
}

ルールに準拠している VPC と、準拠していない VPC を新しく作成してみます。
Config ルールのターゲットの動作方法は従来と同じなので、定期実行や既存リソースへのチェックももちろん可能です。

トリガー次第ですがリソースの変更が発生するか、あるいは以下のようにルールの再評価を行うことでチェックが実行されます。

チェック結果が表示されましたね。
10.0.0.0/16で作成された VPC は「準拠」、192.168.0.0/16で作成された VPC は「非準拠」としてマークされました。

さいごに

本日は、AWS Config で AWS CloudFormation Guard を使ったカスタムポリシーを設定出来るようになったので、使用方法などをご紹介しました。

CloudFormation という単語が出てきたので、最初は CloudFormation でカスタムルールが定義出来るようになったとかかな?と思ったのですが全然違いました。
所感としては、CloudFormation Guard に慣れていなかったので新たな DSL に対する学習コストは必要です。
普段 Lambda 関数の実装に慣れていると、そちらのほうが実装自体は楽だなという印象ではあるのですが、ただし関数リソースを管理する手間が無くなるので Guard で表現出来るルールであればこちらを極力使うのも良い気がしました。