はじめに
閲覧ありがとうございます、NTTデータ先端技術の@S-takahashi1129です。
今回はカスタムGuardの書き方について、個人的にポイントだと思ったところを中心に記載していきます。カスタムGuardルールの作り方については前回記事をご参照ください。
カスタムGuardを用いたAWS Configカスタムポリシールールの作り方 (基本編)
前提
ConfigのカスタムGuardの解説にあたり、今回はVPCのタグをチェックするルールの作成を行います。
Guardの処理について
Guardに関する抑えておいたほうが良い事項としてGuardの処理は暗黙的にすべてANDで処理されるということがあります。
例えば以下のようにルールを設定します
tags.Name =="test-vpc"
tags.rtb =="exists"
tags.Name =="error"
実機の設定を踏まえると、ルールの各行の処理は次のような結果になります。
tags.Name =="test-vpc" ⇒ true
tags.rtb =="exists" ⇒ true
tags.Name =="error" ⇒ false
これらがすべてANDで処理されるため、結果的にルールは非準拠となります。
なお、OR句を明示的に使うことでORで処理を行うことができます。
tags.Name =="test-vpc"
tags.rtb =="exists"
OR
tags.Name =="error"
上記のようにした場合ルールは準拠となります
『rule』ブロックの使い方
ルールブロックの書き方
rule <任意のルール名> とするとブロックに区切って特定のリソース構成をチェックすることができます。
rule tag_Name_value{
tags.Name =="test-vpc"
}
上記の例だと、tag_key_value というルールブロック内で、Nameというキーを持つタグの値がtest-vpcだった場合に準拠と判断する処理が行われます。
when句による実行条件の指定
when句を使うことにより、特定の条件の場合のみにruleブロック内の処理を行いことができます。
rule tag_Name_value when awsRegion == "ap-northeast-3" {
tags.Name =="test-vpc"
}
when awsRegion == "ap-northeast-3" により、大阪リージョンのリソースだった場合に、ルールブロック内の処理が行われるようにできます。
ルールブロックの活用
また、when句ではほかのルールブロックを使うことも可能です。
複雑な条件指定をルールブロックとして定義しておき、when句で指定すればコードがすっきりします。
例えば、
・Nameキーがtest-vpcのタグを持っている
・東京リージョンにあるVPCである
という条件の上で、rtbキーがexistsであるかどうかをチェックするルールを作成したい場合、when句で指定すると以下のようになります。
rule tag_rtb_value when
tags.Name=="test-vpc"
awsRegion =="ap-northeast-1"{
tags.rtb=="exist"
}
when句の部分を以下のようにルールブロックで定義することで、コードが見やすくなります。
rule tag_Name_value {
awsRegion == "ap-northeast-1"
tags.Name =="test-vpc"
}
rule tag_rtb_value when tag_Name_value {
tags.rtb=="exists"
}
rule tag_Name_valueが準拠だった場合に、rule tag_rtb_valueの処理が行われます。
変数の宣言と呼び出し
let句を使うことで変数の宣言を行い、%変数名 で呼び出すことができます。
let tokyo = "ap-northeast-1"
rule tag_Name_value when awsRegion == %tokyo{
tags.Name =="test-vpc"
}
ルールブロック内で宣言された変数に関しては、宣言されたルールブロック内でのみ有効です。
正規表現の使用
リソース名の指定などでワイルドカードを使いたい場合など、正規表現を利用することで柔軟に対応できます。
正規表現を使いたい部分を以下のようにスラッシュで囲むことで、使用可能です。
rule tag_Name_value {
tags.Name ==/^test.*/
}
上記のような記載だと、testから始まる任意のリソース名の指定となります。
おわりに
ルールブロックやwhen句を使うことで可読性はもちろん、コードの作成自体もしやすくなります。ご参考になれば幸いです。
以上、閲覧ありがとうございました。