0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

カスタムGuardを用いたAWS Configカスタムポリシールールの作り方 (条件分岐/変数)

Last updated at Posted at 2025-03-18

はじめに

閲覧ありがとうございます、NTTデータ先端技術の@S-takahashi1129です。
今回はカスタムGuardの書き方について、個人的にポイントだと思ったところを中心に記載していきます。カスタムGuardルールの作り方については前回記事をご参照ください。
カスタムGuardを用いたAWS Configカスタムポリシールールの作り方 (基本編)

前提

ConfigのカスタムGuardの解説にあたり、今回はVPCのタグをチェックするルールの作成を行います。

事前に以下のようなタグを設定したVPCを用意しています。
VPCのタグ設定.png

Guardの処理について

Guardに関する抑えておいたほうが良い事項としてGuardの処理は暗黙的にすべてANDで処理されるということがあります。

例えば以下のようにルールを設定します

tags.Name =="test-vpc"
tags.rtb =="exists"
tags.Name =="error"

検査の対象となるVPCのタグが以下の通りです
実機のタグ.png

実機の設定を踏まえると、ルールの各行の処理は次のような結果になります。

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句を使うことで可読性はもちろん、コードの作成自体もしやすくなります。ご参考になれば幸いです。

以上、閲覧ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?