AWS Config Rule Development Kit(RDK)使ってみた ~1. 概要編~

記事タイトルとURLをコピーする

こんにちは、アプリケーションサービス部ディベロップメントサービス1課の滝澤です。

本記事をご覧いただきありがとうございます。

今回、AWS Config Rule Development Kit(以下、RDK)を使用してAWS ConfigカスタムLambdaルールを作成してみたので、その方法を複数本に分けてお届けしたいと思います。

<RDKシリーズの記事>

blog.serverworks.co.jp

blog.serverworks.co.jp

本記事の目的

本記事ではRDKを使用した、AWS ConfigカスタムLambdaルールの作成、テスト、デプロイの流れを説明します。

カスタムLambdaルールのロジックの記述などには重点的には触れませんので気になる方はこちらの記事等をご参照ください。

blog.serverworks.co.jp

blog.serverworks.co.jp

AWS Config Rule Development Kit(RDK)とは

AWS ConfigカスタムLambdaルールの作成を支援する開発キットで、

コマンドラインからルールに使用するLambda関数の雛形の作成、テスト実行、デプロイが可能です。

必要な準備とインストール

AWSアカウント認証情報の設定

RDKは内部でboto3を使用してAWSへのAPI呼び出しを行うため、以下のいずれかを行う必要があります。

必要なパーミッションについてはこちらに記載があったのでぜひ参考にしてみてください

https://github.com/awslabs/aws-config-rdk/blob/master/policy/rdk-minimum-permissions.json

実際にインストールしてみる

RDKはPython3.7を使用し、pip経由でインストールされます

インストール

$ pip install rdk

インストール確認

$ rdk

usage: rdk [-h] [-p PROFILE] [-k ACCESS_KEY_ID] [-s SECRET_ACCESS_KEY]

           [-r REGION] [-f REGION_FILE] [--region-set REGION_SET] [-v]

           <command> ...

rdk: error: the following arguments are required: <command>, <command arguments>

上記のようなヘルプ情報が表示されれば正常にインストールが完了しています。

セットアップ

$ rdk init

init を実行することでConfig Recorderの検証、必要なIAM RoleとS3 Bucketが作成されます。

ルールの作成

冒頭でも触れましたが、まず流れを把握するためにここでは手順のみを示します。 具体例を知りたい方はこちらをご参照いただけるとありがたいです。

実践編の記事を貼る

ルールの作成

$ rdk create <rulename> [parameters]

パラメータの種類

[条件によって必須※]--resource-types:トリガーとするリソースの指定(例:AWS::EC2::Instance)

--resource-types``--maximum-frequencyはどちらか1つ必須のパラメータです。

AWS マネジメントコンソールからカスタムルールを作成する際の以下の設定にあたります。

  • トリガータイプ:設定変更時
  • 変更範囲:リソース

[条件によって必須※]--maximum-frequency

--resource-types--maximum-frequencyはどちらか1つ必須のパラメータです。

以下から選択可能

'One_Hour' 'Three_Hours' 'Six_Hours' 'Twelve_Hours' 'TwentyFour_Hours'

AWS マネジメントコンソールからカスタムルールを作成する際の以下の設定にあたります。

  • トリガータイプ:定期的

[オプション]--runtime:Lambda関数のランタイムの指定

以下から指定可能

"java8", "python3.7" "python3.7-lib" "python3.8"  "python3.8-lib" "python3.9" "python3.9-lib" "python3.10" "python3.10-lib"

何も指定しなければpython3.10-libがランタイムとして設定されます。

[オプション]--input-parameters:評価に必要なパラメータ

AWS マネジメントコンソールからカスタムルールを作成する際の以下の設定にあたります。

以下のキーと値の場合、'{"desiredInstanceType":"t2.micro"}'のように記述します。

作成されたファイルの確認とロジックの実装

実行するとカレントディレクトリに作成したルール名のディレクトリが作成され、その中に3つのファイルが作成されます。

  • RULE_NAME.py - ルールロジックが格納されている Python ファイル
  • RULE_NAME_test.py - ルールのユニットテストが格納されている Python ファイル
  • parameters.json-RDK のデプロイ設定用の JSON ファイル

Lambda関数の雛形となるRULE_NAME.pyが作成されているのでここに変更を加えていきます。

RULE_NAME.pyは大きく4つの構成になっています。

  1. Parameters
  2. Main Code
  3. Helper Functions
  4. Boilerplate Code

Main Codeの中に

###############################

 # Add your custom logic here. #

###############################

という記述がありますのでここに必要なロジックを書き足していきます。

テスト

createコマンドで作成したディレクトリの中にある以下のファイルがテスト用のPythonファイルです。

  1. RULE_NAME_test.py - ルールのユニットテストが格納されている Python ファイル

テストの実行

$ rdk test-local <rulename>

testファイルに変更を加えていなければ以下の3つのテストが実行されます。

  1. test_sample
    • 基本的にここにテストコードを記述します
  2. test_sts_access_denied
    • "Access Denied"エラーに対する動作をテストします。
  3. test_sts_unknown_error
    • "Unknown Error"エラーに対する動作をテストします。

デプロイ

$ rdk deploy <rulename>

deployコマンドを使用することでAWSアカウントへのデプロイが可能です。

RDKでデプロイすることのメリット等をまとめた記事もありますので併せてご覧ください。

blog.serverworks.co.jp

まとめ

AWS RDKを使用したAWS ConfigカスタムLambdaルールの作成の概要を紹介させていただきました。

再三になりますが、ロジックのもう少し詳細な記述など気になる方はぜひこちらの記事をご覧ください。

blog.serverworks.co.jp

本記事が少しでもお役に立てれば幸いです。

滝澤 稜(執筆記事の一覧)

アプリケーションサービス部ディベロップメントサービス1課

2022年に新卒で入社しました。 うどんが大好物です。