こんにちは、アプリケーションサービス部ディベロップメントサービス1課の滝澤です。
本記事をご覧いただきありがとうございます。
今回、AWS Config Rule Development Kit(以下、RDK)を使用してAWS ConfigカスタムLambdaルールを作成してみたので、その方法を複数本に分けてお届けしたいと思います。
<RDKシリーズの記事>
本記事の目的
本記事ではRDKを使用した、AWS ConfigカスタムLambdaルールの作成、テスト、デプロイの流れを説明します。
カスタムLambdaルールのロジックの記述などには重点的には触れませんので気になる方はこちらの記事等をご参照ください。
AWS Config Rule Development Kit(RDK)とは
AWS ConfigカスタムLambdaルールの作成を支援する開発キットで、
コマンドラインからルールに使用するLambda関数の雛形の作成、テスト実行、デプロイが可能です。
必要な準備とインストール
AWSアカウント認証情報の設定
RDKは内部でboto3を使用してAWSへのAPI呼び出しを行うため、以下のいずれかを行う必要があります。
boto3が認識する方法で認証情報を設定する(以下リンクの3~8)
コマンドラインのパラメータに以下を指定して認証情報を渡す
- --profile、 --region、--access-key-id、--secret-access-key
必要なパーミッションについてはこちらに記載があったのでぜひ参考にしてみてください
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つの構成になっています。
- Parameters
- Main Code
- Helper Functions
- Boilerplate Code
Main Codeの中に
############################### # Add your custom logic here. # ###############################
という記述がありますのでここに必要なロジックを書き足していきます。
テスト
create
コマンドで作成したディレクトリの中にある以下のファイルがテスト用のPythonファイルです。
- RULE_NAME_test.py - ルールのユニットテストが格納されている Python ファイル
テストの実行
$ rdk test-local <rulename>
testファイルに変更を加えていなければ以下の3つのテストが実行されます。
- test_sample
- 基本的にここにテストコードを記述します
- test_sts_access_denied
- "Access Denied"エラーに対する動作をテストします。
- test_sts_unknown_error
- "Unknown Error"エラーに対する動作をテストします。
デプロイ
$ rdk deploy <rulename>
deploy
コマンドを使用することでAWSアカウントへのデプロイが可能です。
RDKでデプロイすることのメリット等をまとめた記事もありますので併せてご覧ください。
まとめ
AWS RDKを使用したAWS ConfigカスタムLambdaルールの作成の概要を紹介させていただきました。
再三になりますが、ロジックのもう少し詳細な記述など気になる方はぜひこちらの記事をご覧ください。
本記事が少しでもお役に立てれば幸いです。