カスタム Lambda ルール (一般的な例) - AWS Config

カスタム Lambda ルール (一般的な例)

カスタム Lambda ルールを作成する手順は以下のとおりです。カスタム Lambda ルールを作成するには、最初に AWS Lambda 関数を作成します。この関数には、ルールの評価ロジックが含まれています。次に、この関数と作成するカスタム Lambda ルールを AWS Config で関連付けます。

重要

Lambda 関数の呼び出しを AWS Config に許可する際、セキュリティのベストプラクティスとして、Lambda のリソースベースポリシーで起動リクエスト時に sourceARN および/または sourceAccountId を指定してアクセス制限しておくことを強くお勧めします。詳細については、「AWS Lambda リソースベースのポリシーにおけるセキュリティのベストプラクティス」を参照してください。

カスタム Config ルール用の AWS Lambda 関数の作成

Lambda 関数は、AWS Lambda にアップロードするカスタムコードです。イベントソースから発行されたイベントに応じて、この関数が呼び出されます。Lambda 関数を Config ルールに関連付けると、このルールのトリガーが発生したときに AWS Config がこの関数を呼び出します。呼び出された Lambda 関数は、AWS Config から送信された設定情報を評価し、評価結果を返します。Lambda 関数の詳細については、[AWS Lambda デベロッパーガイド]の [関数とイベントソース] を参照してください。

カスタム Lambda ルールの Lambda 関数は、AWS Lambda でサポートされているプログラミング言語で作成できます。より簡単に作成するには、AWS Lambda の設計図をカスタマイズするか、AWS Config Rules GitHub リポジトリにあるサンプル関数を再利用できます。

AWS Lambda の設計図

AWS Lambda コンソールにはサンプル関数 (設計図) が用意されており、これをカスタマイズして独自の評価ロジックを追加できます。以下の設計図のいずれかを選択して関数を作成できます。

  • config-rule-change-triggered – AWS リソースの設定が変更されるとトリガーされます。

  • config-rule-periodic – 選択した頻度 (24 時間ごとなど) でトリガーされます。

AWS Config Rules GitHub リポジトリ

カスタム Lambda ルール用のサンプル関数のパブリックレポジトリは、ウェブベースのコードホスティングおよび共有サービスである GitHub で利用できます。サンプル関数は、AWS コミュニティによって作成および提供されているものです。サンプルを利用するには、そのコードを新しい AWS Lambda 関数内にコピーします。リポジトリを参照するには、https://github.com/awslabs/aws-config-rules/ にアクセスしてください。

カスタムルール用の関数を作成するには

  1. AWS Management Console にサインインして AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. AWS Management Console メニューで、リージョンセレクターが AWS Config ルールをサポートするリージョンに設定されていることを確認します。サポートされるリージョンの一覧については、Amazon Web Services 全般のリファレンスの [AWS Config リージョンとエンドポイント] を参照してください。

  3. [Create a Lambda function] (Lambda 関数の作成) を選択します。

  4. [Use a blueprint] (設計図の使用) ページで、AWS Config ルール用の設計図関数のいずれかを開始点として選択します。設計図を使用しない場合は、[Skip] (スキップ) をクリックして続行します。

  5. [トリガーを設定する] ページで、[次に進む] を選択します。

  6. [[Basic information]](基本的な情報) ページで、名前と説明を入力します。

  7. ランタイムで、関数を記述したプログラミング言語を選択します。

  8. コード エントリ タイプで、使用するエントリタイプを選択します。設計図を使用している場合は、事前設定されたコードをそのまま使用します。

  9. 選択したコードエントリタイプに応じた方法に従ってコードを指定します。設計図を使用している場合は、関数コードがコードエディタに表示されます。このコードをカスタマイズして独自の評価ロジックを追加できます。コードは、AWS Config で関数を呼び出したときに提供されるイベントデータを評価できます。

    • config-rule-change-triggered 設計図に基づく関数 (設定変更に伴ってトリガーされる関数) の場合、AWS リソースの変更された設定項目オブジェクトやサイズが大きすぎる設定項目オブジェクトがイベントデータになります。

    • config-rule-periodic 設計図に基づく関数 (選択した間隔でトリガーされる関数) の場合、評価のトリガー時点に関する情報を含む JSON オブジェクトがイベントデータになります。

    • どちらのタイプの関数に対しても、AWS Config はルールパラメータを JSON 形式で渡します。どのルールパラメータを渡すかは、AWS Config でカスタム Lambda ルールを作成するときに定義できます。

    • AWS Config で関数を呼び出すときに発行するイベントの例については、「AWS Config ルールのイベントの例」を参照してください。

  10. [Execution role] (実行ロール) ドロップダウンリストで、[Create new role from AWS Policy templates] (ポリシーテンプレートから新しいロールを作成) を選択します。

  11. Role name に名前を入力します。

  12. [ポリシーテンプレート] で、[AWS Config ルールのアクセス許可] を選択します。

  13. 詳細を確認し、[Create function] (関数の作成) をクリックします。

AWS Config でのカスタムルールの作成

AWS Config を使用してカスタム Lambda ルールを作成し、そのルールを Lambda 関数に関連付けます。

カスタムルールを作成するには

  1. AWS Config コンソール(https://console.aws.amazon.com/config/)を開きます。

  2. AWS Management Console メニューで、リージョンセレクターが、カスタム Lambda ルール用の AWS Lambda 関数を作成したのと同じリージョンに設定されていることを確認します。

  3. [Rules] (ルール) ページで、[Add rule] (ルールの追加) を選択します。

  4. [Specify rule type] (ルールタイプの指定) ページで [Create custom rule] (カスタムルールの作成) をクリックします。

  5. [Configure rule] (ルールの設定) ページで、名前と説明を入力します。

  6. AWS Lambda [function ARN] (関数の ARN) で、AWS Lambda から関数に割り当てられた ARN を指定します。

    注記

    このステップで指定する ARN に $LATEST 修飾子を含めることはできません。ARN はバージョン修飾子なしで指定するか、$LATEST 以外の修飾子を使用して指定します。AWS Lambda は関数のバージョニングをサポートしており、各バージョンに割り当てられる ARN には修飾子が使用されます。AWS Lambda では、最新バージョンに $LATEST 修飾子を使用します。

  7. [Trigger type] (トリガータイプ) で、以下のどちらかまたは両方を選択します。

    • [Configuration changes] (設定変更) – AWS Config が設定変更を検出すると、Lambda 関数を呼び出します。

    • [Periodic] (定期的) – AWS Config が、ユーザーが選択した頻度 (24 時間ごとなど) で Lambda 関数を呼び出します。

  8. ルールのトリガータイプとして [Configuration changes] (設定変更) を選択した場合、AWS Config が Lambda 関数を呼び出す [Scope of changes] (変更範囲) で以下のいずれかのオプションを指定します。

    • [All changes] (すべての変更) – AWS Config によって記録されたリソースが作成、変更、または削除された場合。

    • [Resources] (リソース) – 指定したリソースタイプや、リソースタイプおよび修飾子と一致するリソースが作成、変更、または削除された場合。

    • [Tags] (タグ) – 指定したタグと一致するリソースが作成、変更、または削除された場合。

  9. ルールのトリガータイプとして [Periodic] (定期的) を選択した場合、AWS Config が Lambda 関数を呼び出す [Frequency] (頻度) を指定します。

  10. [Rule parameters] ((ルールのパラメータ)) セクションで、AWS Lambda 関数で評価するルールパラメータと必要な値を指定します。

  11. [Next] を選択します。[Review and create] (確認と作成) ページで、ルールに関する詳細を確認し、[Add rule function] (ルール関数の追加) をクリックします。新しいルールが [Rules] (ルール) ページに表示されます。

    AWS Config で AWS Lambda 関数の評価結果を受け取るまで、コンプライアンス には [Evaluating...] と表示されます。ルールと関数が正常に動作している場合は、結果の概要が数分後に表示されます。結果は、更新ボタンを使用して更新できます。

    ルールまたは関数が正常に動作していない場合は、[Compliance] (コンプライアンス) に以下のいずれかが表示されます。

    • [No results reported] (報告される結果がありません) - AWS Config でルールに対してリソースが評価されました。ルールがスコープ内の AWS リソースに適用されなかったか、指定したリソースが削除されたか、または評価結果が削除されました。評価結果を取得するには、ルールを更新するか、スコープを変更するか、または [Re-evaluate] (再評価) を選択します。

      このメッセージは、ルールから評価結果が報告されなかった場合にも表示される場合があります。

    • [No resources in scope] (対象にリソースがありません) - 記録された AWS Config リソースは、このルールのスコープ内にないため、AWS ではこのルールに対してリソースを評価できません。AWS Config で記録するリソースは、[Settings] (設定) ページで選択できます。

    • [Evaluations failed] (評価が失敗しました) - 問題の原因を判断するには、ルール名を選択して詳細ページを開き、エラーメッセージを確認します。

注記

AWS Config コンソールでカスタム Lambda ルールを作成すると、適切な許可が自動的に作成されます。AWS CLI でカスタム Lambda ルールを作成した場合は、aws lambda add-permission コマンドを使用して、Lambda 関数を呼び出す許可を AWS Config に付与する必要があります。詳細については、[AWS Lambdaデベロッパーガイド] で [AWS Lambda(Lambda 関数ポリシー) のリソースベースのポリシーを使用する] を参照してください。

Lambda 関数を呼び出す AWS Config 許可を与える前に以下のセクション AWS Lambda リソースベースのポリシーにおけるセキュリティのベストプラクティス を参照してください。

AWS Lambda リソースベースのポリシーにおけるセキュリティのベストプラクティス

セキュリティのベストプラクティスとして、Lambda 関数を呼び出すためにサービスプリンシパル名 (SPN) 全体に呼び出し許可を与えないようにするため、Lambdaリソースベースのポリシーで呼び出しリクエストにsourceARNおよび/またはsourceAccountIdを使用してアクセスを制限することを強く推奨します。

sourceARN は Lambda 関数を呼び出している AWS Config ルールの ARN です。

sourceAccountId は、ルールを作成したユーザーのアカウント ID です。

Lambda リソースベースのポリシーでアクセスを制限すると、AWS Lambda は予想されるユーザーおよびシナリオのみに代わってリソースにアクセスしています。

SPN ベースの権限を追加するには、次の CLI を使用する必要があります

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com

SourceAccountID ベースの権限を追加するには

ルールが作成される前に、次の CLI を使用して、sourceAccountId リソースベースのポリシーにアクセス許可をベースを追加します。

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com --source-account your account ID

SourceArn と SourceAccountId ベースの許可の両方を追加するには

ルールを作成したら、次の CLI を使用して、リソースベースのポリシーに sourceARN ベースのアクセス許可を設定します。これにより、Lambda 関数を許可できるのは、特定のルール ARN のみです。

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com --source-account your account ID --source-arn ARN of the created config rule

その他のリソースタイプの評価

AWS Config にまだ記録されていないリソースタイプに対して評価を実行するカスタム Lambda ルールを作成できます。これは、現在 AWS Config で記録対象外となっているその他のリソースタイプのコンプライアンスを評価する場合に便利です。カスタム Lambda ルールで評価できるその他のリソースタイプのリストについては、「AWS リソースタイプのリファレンス」を参照してください。

注記

AWS CloudFormation ユーザーガイドのリストには、AWS Config でカスタム Lambda ルールを作成するためにまだ利用できない、最近追加されたリソースタイプが含まれている場合があります。AWS Config ではリソースタイプのサポートを定期的に追加しています。

[Example] (例)

  1. アカウントの Amazon S3 Glacier を評価する場合。Amazon S3 Glacier は現在 AWS Config のレコード対象外です。

  2. Amazon S3 Glacier がアカウントの要件に適合しているかどうかを評価する AWS Lambda 関数を作成する場合。

  3. evaluate-glacier-vaults という名前のカスタム Lambda ルールを作成して、AWS Lambda 関数をルールに割り当てる場合。

  4. AWS Config Lambda 関数を呼び出して、ルールに対して Amazon S3 Glacier を評価する場合。

  5. AWS Config から評価が返され、ルールに対するコンプライアンス結果を確認する場合。

注記

AWS Config タイムラインで設定の詳細を確認できます。また、AWS Config コンソールでリソースを参照して AWS Config でサポートされているリソースを確認できます。すべてのリソースタイプを記録するように AWS Config を設定している場合は、新しくサポートされたリソースが自動的に記録されます。詳細については、「サポートされているリソースタイプ」を参照してください。