翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Config カスタムポリシールールの作成
AWS マネジメントコンソール、AWS CLI、または AWS Config API から、AWS Config カスタムポリシールールを作成できます。
AWS Config カスタムポリシールールの追加
- Using the console
-
AWS マネジメントコンソール にサインインして、AWS Config コンソール (https://console.aws.amazon.com/config/home) を開きます。
-
AWS マネジメントコンソール のメニューで、リージョンセレクタが AWS Config ルールをサポートする AWS リージョンに設定されていることを確認します。サポートされているリージョンのリストについては、「Amazon Web Services 全般のリファレンス」の「AWS Config リージョンとエンドポイント」を参照してください。
-
左のナビゲーションで、ルール を選択します。
-
[ルール] ページで、[ルールの追加] を選択します。
-
[Specify rule type] (ルールタイプの指定) ページで [Create custom rule using Guard] (Guard を使用したカスタムルールの作成) を選択します。
-
[ルールの設定] ページで、以下のステップを完了してルールを作成します。
-
[Rule name] (ルール名) に、ルールの一意の名前を入力します。
-
[説明] に、ルールの説明を入力します。
-
[Guard runtime version] (Guard ランタイムバージョン) で、AWS Config カスタムポリシールールのランタイムシステムを選択します。
-
[Rule Content] (ルールコンテンツ) は、ルールの Guard カスタムポリシーで入力できます。
-
[評価モード] では、リソースの作成および管理プロセスのどの時点で AWS Config によりリソースを評価するかを選択します。ルールに応じて、AWS Config では、リソースのプロビジョニング前、リソースのプロビジョニング後、あるいはその両方でリソース構成を評価できます。
-
[プロアクティブ評価をオンにする] を選択すると、リソースをデプロイする前に、その設定内容に対して評価を実行できます。
プロアクティブ評価をオンにした後、StartResourceEvaluation API と GetResourceEvaluationSummary API を使用して、これらのコマンドで指定したリソースが、リソースのアカウントのプロアクティブルールに基づいて NON_COMPLIANT としてフラグが設定されるかどうかを確認できます。
これらのコマンドの使用方法の詳細については、「AWS Config ルールでのリソースの評価」を参照してください。プロアクティブ評価をサポートするマネージドルールのリストについては、「評価モード別の AWS Config マネージドルールのリスト」を参照してください。
-
既存のリソースの設定内容を評価するには、[検出評価を有効にする] を選択します。
検出評価の場合、AWS Config カスタムポリシールールは、[Configuration changes] (設定の変更) によって開始されます。このオプションは事前に選択されます。
-
[リソース] – 指定したリソースタイプや、リソースタイプおよび識別子と一致するリソースが作成、変更、または削除された場合。
-
[Tags] (タグ) – 指定したタグを含むリソースが作成、変更、または削除された場合。
-
[すべての変更] – AWS Config によって記録されたリソースが作成、変更、または削除された場合。
AWS Config は、ルールのスコープに該当するリソースで変更を検出すると、評価を実行します。スコープを使用して評価を開始するリソースを制限できます。それ以外の場合は、プロビジョニング後のリソースに変更があったときに評価が開始されます。
-
[Parameters] (パラメータ) では、ルールにパラメータが含まれる場合、提供されたキーの値をカスタマイズできます。パラメータは、ルールに準拠しているとみなされるためにリソースが従う必要がある属性です。
-
[レビューして作成] ページで、AWS アカウント アカウントにルールを追加する前に、編集中のすべての選択項目を確認します。
-
ルールの確認が完了したら、[ルールの追加] を選択します。
- 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 ステートメントで変数を使用します。
-
名前付きルールブロックを使用して関連するチェックをグループ化します。
-
わかりやすいコメントを含めます。
-
適切な演算子 (exists、is_string、is_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>>
}