AWS Config カスタムポリシールールの作成 - AWS Config

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Config カスタムポリシールールの作成

AWS マネジメントコンソール、AWS CLI、または AWS Config API から、AWS Config カスタムポリシールールを作成できます。

AWS Config カスタムポリシールールの追加

Using the console
  1. AWS マネジメントコンソール にサインインして、AWS Config コンソール (https://console.aws.amazon.com/config/home) を開きます。

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

  3. 左のナビゲーションで、ルール を選択します。

  4. [ルール] ページで、[ルールの追加] を選択します。

  5. [Specify rule type] (ルールタイプの指定) ページで [Create custom rule using Guard] (Guard を使用したカスタムルールの作成) を選択します。

  6. [ルールの設定] ページで、以下のステップを完了してルールを作成します。

    1. [Rule name] (ルール名) に、ルールの一意の名前を入力します。

    2. [説明] に、ルールの説明を入力します。

    3. [Guard runtime version] (Guard ランタイムバージョン) で、AWS Config カスタムポリシールールのランタイムシステムを選択します。

    4. [Rule Content] (ルールコンテンツ) は、ルールの Guard カスタムポリシーで入力できます。

    5. [評価モード] では、リソースの作成および管理プロセスのどの時点で AWS Config によりリソースを評価するかを選択します。ルールに応じて、AWS Config では、リソースのプロビジョニング前、リソースのプロビジョニング後、あるいはその両方でリソース構成を評価できます。

      1. [プロアクティブ評価をオンにする] を選択すると、リソースをデプロイする前に、その設定内容に対して評価を実行できます。

        プロアクティブ評価をオンにした後、StartResourceEvaluation API と GetResourceEvaluationSummary API を使用して、これらのコマンドで指定したリソースが、リソースのアカウントのプロアクティブルールに基づいて NON_COMPLIANT としてフラグが設定されるかどうかを確認できます。

        これらのコマンドの使用方法の詳細については、「AWS Config ルールでのリソースの評価」を参照してください。プロアクティブ評価をサポートするマネージドルールのリストについては、「評価モード別の AWS Config マネージドルールのリスト」を参照してください。

      2. 既存のリソースの設定内容を評価するには、[検出評価を有効にする] を選択します。

        検出評価の場合、AWS Config カスタムポリシールールは、[Configuration changes] (設定の変更) によって開始されます。このオプションは事前に選択されます。

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

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

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

        AWS Config は、ルールのスコープに該当するリソースで変更を検出すると、評価を実行します。スコープを使用して評価を開始するリソースを制限できます。それ以外の場合は、プロビジョニング後のリソースに変更があったときに評価が開始されます。

    6. [Parameters] (パラメータ) では、ルールにパラメータが含まれる場合、提供されたキーの値をカスタマイズできます。パラメータは、ルールに準拠しているとみなされるためにリソースが従う必要がある属性です。

  7. [レビューして作成] ページで、AWS アカウント アカウントにルールを追加する前に、編集中のすべての選択項目を確認します。

  8. ルールの確認が完了したら、[ルールの追加] を選択します。

Using the AWS CLI

put-config-rule コマンドを実行します。

Owner フィールドは CUSTOM_POLICY になっている必要があります。AWS Config カスタムポリシールールには、以下に示す追加のフィールドが必須です。

  • Runtime: AWS Config カスタムポリシールールのランタイムシステム。

  • PolicyText: AWS Config カスタムポリシールールのロジックを含むポリシー定義。

  • EnableDebugLogDelivery: AWS Config カスタムポリシールールのデバッグログを有効にするためのブール式。デフォルト値は false です。

Using the API Reference

PutConfigRule アクションを使用します。

Owner フィールドは CUSTOM_POLICY になっている必要があります。AWS Config カスタムポリシールールには、以下に示す追加のフィールドが必須です。

  • Runtime: AWS Config カスタムポリシールールのランタイムシステム。

  • PolicyText: AWS Config カスタムポリシールールのロジックを含むポリシー定義。

  • EnableDebugLogDelivery: AWS Config カスタムポリシールールのデバッグログを有効にするためのブール式。デフォルト値は false です。

AWS Config カスタムポリシールールのルールコンテンツの記述

AWS Config カスタムポリシールールを使用すると、AWS CloudFormation Guard のドメイン固有の言語 (DSL) を使用してリソース設定を評価できます。このトピックでは、カスタムポリシールールを記述するためのパターンとベストプラクティスについて説明します。

Guard でルールを記述する方法の詳細については、「AWS CloudFormation Guard ユーザーガイド」の「Guard のルール記述」および「Guard GitHub リポジトリ」の「AWS CloudFormation Guard 2.0 の運用モード」を参照してください。

基本的なルール構造

ルールを作成するには、次の基本的な形式を使用します。

# Basic rule format rule <rule_name> when resourceType == "<AWS::Service::Resource>" { # Evaluation clauses } # Example with filtering let resources_of_type = Resources.*[ Type == 'AWS::Service::Resource' ] rule check_resources when %resources_of_type !empty { %resources_of_type.configuration.property == expected_value }

主要コンポーネント

設定

リソース設定の内容が含まれます。

supplementaryConfiguration

リソース設定の追加コンテンツが含まれています。AWS Config は、特定のリソースタイプに対してこのフィールドを返し、設定フィールドに対して返される情報を補足します。

resourceType

評価中の AWS リソースタイプ。

resourceId

リソースの ID (例: sg-xxxxxx)。

accountId

リソースに関連付けられている 12 桁の AWS アカウント ID。

一般的なパターン

Status checks
let allowed_status = ['ACTIVE', 'RUNNING'] rule check_resource_status when resourceType == "AWS::Service::Resource" { configuration.status IN %allowed_status }
Required properties
rule check_required_properties when resourceType == "AWS::Service::Resource" { configuration.propertyName exists configuration.propertyName is_string # or is_list, is_struct }
Query blocks
configuration.Properties { property1 exists property2 is_string property3 IN [allowed_value1, allowed_value2] }
Conditional evaluation
when configuration.feature_enabled == true { configuration.feature_settings exists configuration.feature_settings is_struct }
Custom messages
rule check_compliance when resourceType == "AWS::Service::Resource" { configuration.property == expected_value <<Custom error message explaining the requirement>> }}

高度な機能

Range checks
rule check_numeric_limits { # Inclusive range (lower_limit <= value <= upper_limit) configuration.value IN r[minimum_value, maximum_value] # Exclusive range (lower_limit < value < upper_limit) configuration.value IN r(exclusive_min, exclusive_max) # Left inclusive, right exclusive (lower_limit <= value < upper_limit) configuration.value IN r[minimum_value, exclusive_max) # Left exclusive, right inclusive (lower_limit < value <= upper_limit) configuration.value IN r(exclusive_min, maximum_value] }
Combining conditions
# AND conditions (implicit through new lines) condition_1 condition_2 # OR conditions (explicit) condition_3 OR condition_4
Chaining rules
rule check_prerequisites { configuration.required_setting exists } rule check_details when check_prerequisites { configuration.required_setting == expected_value }

ベストプラクティス

  • 読みやすさを向上させるには、let ステートメントで変数を使用します。

  • 名前付きルールブロックを使用して関連するチェックをグループ化します。

  • わかりやすいコメントを含めます。

  • 適切な演算子 (existsis_stringis_list) を使用します。

  • 大文字と小文字を区別しないマッチングで正規表現パターンを使用します。

例: dynamodb-pitr-enabled

以下の例に、AWS Config マネージドルール dynamodb-pitr-enabled の AWS Config カスタムポリシールールバージョンのポリシー定義を示します。このルールは、ポイントインタイムリカバリが DynamoDB テーブルに対して有効になっているかどうかを確認します。

# Check if DynamoDB tables have Point-in-Time Recovery enabled let status = ['ACTIVE'] rule tableisactive when resourceType == "AWS::DynamoDB::Table" { configuration.tableStatus == %status } rule checkcompliance when resourceType == "AWS::DynamoDB::Table" tableisactive { let pitr = supplementaryConfiguration.ContinuousBackupsDescription.pointInTimeRecoveryDescription.pointInTimeRecoveryStatus %pitr == "ENABLED" <<DynamoDB tables must have Point-in-Time Recovery enabled>> }