見出し画像

AWS ConfigカスタムルールをカスタムGuardで試してみる

こんにちは、r.inoです。

今回は、AWS ConfigカスタムルールをカスタムGuardを使用して作成できるか試してみたいと思います。

まず、AWS Configカスタムルールについて紹介です。

AWS Config カスタムルールは、ゼロから作成するルールです。 AWS Config カスタムルールを作成するには、Lambda 関数 (AWS Lambda 開発者ガイド) と、コードpolicy-as-code言語である Guard (Guard GitHub リポジトリ) の 2 つの方法があります。

AWS Config Lambda で作成されたカスタムルールはAWS Config カスタム Lambda ルールと呼ばれ、Guard で作成された AWS Config カスタムルールはAWS Config カスタムポリシールールと呼ばれます。

https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/evaluate-config_develop-rules.html

AWS Config には以下の3種類のカスタムルールがあります。

マネージドルール
AWS が提供する既成ルール
カスタム Lambda ルール
Lambda 関数を使って独自ロジックを記述:Python / Node.js
カスタム Guard ルール
AWS Policy-as-Code(Guard)を使用:Guard(シンプルなルール定義言語)

AWS Config の Custom Guard ルール は、Guard という独自の言語を使用してポリシーを定義します。

やってみる

早速やってみます。「ルールタイプの選択」に「Guardを使用してカスタムルールを作成」にすることでGuardでルールを作成できます。

今回のルールの内容は以下の通りとします。
このルール check_ec2_tag は、EC2インスタンス(AWS::EC2::Instance) に対して次の条件をチェックします。

  1. タグ (tags) が存在すること

    • resource.tags exists により、少なくとも1つのタグが設定されているかをチェック。

  2. タグ "Environment" の値が "Production" であること

    • resource.tags["Environment"] == "Production" により、"Environment" というタグがあり、その値が "Production" であることをチェック。

rule check_ec2_tag when resourceType == "AWS::EC2::Instance" {
    resource.tags exists
    resource.tags["Environment"] == "Production"
}

各行で行っている内容は以下の通りです。
rule <ルール名> when <条件> {} の構文

resource.tags exists を追加 → タグが存在するかチェック
タグの存在チェック後に resource.tags["Environment"] を評価する

Guard ルールの動作

COMPLIANT(準拠)
すべてのEC2が Environment=Production のタグを持っている

NON_COMPLIANT(非準拠)
タグが付いていない EC2 インスタンスがある

リソースをAWS EC2 Instanceとして、「Guard を使用してカスタムルールを作成」を選択する

ルールに作成したものが表示されていれば成功です。

おまけ

ルールの内容として、Guard ルールを色々記載して試していたのですが、Guard 2.x の構文にあったコードを書けずに最初苦戦しました。。

しっかりGuard の構文を理解する必要があるなと思いました。

以下にGuard ルールの記述方法が記載されているので、興味がある方は見てみてください。

今回はAWS Configカスタムルールを作成してみました。
作成する流れは特に止まることはなかったのですが、Guard ルールの記述を少し学んでおく必要があるなと思います。

逆にGuard ルールの記述方法さえ知っていれば、簡単にAWS Configカスタムルールが作成できることに驚きました。より柔軟な対応も取りやすいと思います。

今度は、AWS Config ルールで違反が発生した際にAmazon SNS を使って通知する設定なども行ってみたいと思います。


いいなと思ったら応援しよう!