

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

# AWS Config カスタムポリシールールの作成
<a name="evaluate-config_develop-rules_cfn-guard"></a>

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

## AWS Config カスタムポリシールールの追加
<a name="config-custom-policy-rules-add"></a>

------
#### [ Using the console ]

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

1.  AWS マネジメントコンソール メニューで、リージョンセレクタが AWS Config ルールをサポートする AWS リージョンに設定されていることを確認します。サポートされているリージョンのリストについては、「*Amazon Web Services 全般のリファレンス*」の「[AWS Config リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/awsconfig.html)」を参照してください。

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

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

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

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

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

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

   1. **Guard ランタイムバージョン**では、 AWS Config カスタムポリシールールのランタイムシステムを選択します。

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

   1. **評価モードでは**、リソースの作成および管理プロセスでリソース AWS Config を評価するタイミングを選択します。ルールに応じて、 はリソースのプロビジョニング前、リソースのプロビジョニング後、またはその両方でリソース設定を評価 AWS Config できます。

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

         プロアクティブ評価をオンにした後、[StartResourceEvaluation](https://docs.aws.amazon.com/config/latest/APIReference/API_StartResourceEvaluation.html) API と [GetResourceEvaluationSummary](https://docs.aws.amazon.com/config/latest/APIReference/API_GetResourceEvaluationSummary.html) API を使用して、これらのコマンドで指定したリソースが、リソースのアカウントのプロアクティブルールに基づいて NON\$1COMPLIANT としてフラグが設定されるかどうかを確認できます。

          このコマンドの使用の詳細については、[AWS Config 「ルールを使用したリソースの評価](https://docs.aws.amazon.com/config/latest/developerguide/evaluating-your-resources.html#evaluating-your-resources-proactive)」を参照してください。プロアクティブ評価をサポートするマネージドルールのリストについては、[「評価モード別の AWS Config マネージドルールのリスト](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-evaluation-mode.html)」を参照してください。

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

         検出評価の場合、 AWS Config カスタムポリシールールは**設定の変更**によって開始されます。このオプションは事前に選択されます。
         +  **[リソース]** – 指定したリソースタイプや、リソースタイプおよび識別子と一致するリソースが作成、変更、または削除された場合。
         +  **[Tags]** (タグ) – 指定したタグを含むリソースが作成、変更、または削除された場合。
         +  **すべての変更** — によって記録されたリソース AWS Config が作成、変更、または削除された場合。

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

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

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

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

------
#### [ Using the AWS CLI ]

[https://docs.aws.amazon.com/cli/latest/reference/configservice/put-config-rule.html](https://docs.aws.amazon.com/cli/latest/reference/configservice/put-config-rule.html) コマンドを使用します。

`Owner` フィールドは `CUSTOM_POLICY` になっている必要があります。 AWS Config カスタムポリシールールには、次の追加フィールドが必要です。
+ `Runtime`: AWS Config カスタムポリシールールのランタイムシステム。
+ `PolicyText`: AWS Config カスタムポリシールールのロジックを含むポリシー定義。
+ `EnableDebugLogDelivery`: AWS Config カスタムポリシールールのデバッグログ記録を有効にするためのブール式。デフォルト値は `false` です。

------
#### [ Using the API Reference ]

[PutConfigRule](https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html) アクションを使用します。

`Owner` フィールドは `CUSTOM_POLICY` になっている必要があります。 AWS Config カスタムポリシールールには、次の追加フィールドが必要です。
+ `Runtime`: AWS Config カスタムポリシールールのランタイムシステム。
+ `PolicyText`: AWS Config カスタムポリシールールのロジックを含むポリシー定義。
+ `EnableDebugLogDelivery`: AWS Config カスタムポリシールールのデバッグログ記録を有効にするためのブール式。デフォルト値は `false` です。

------

## AWS Config カスタムポリシールールのルールコンテンツの記述
<a name="config-custom-policy-rules"></a>

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

Guard でルールを記述する方法の詳細については、[「Guard ユーザーガイド」の「Writing Guard rules](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html)」および「Guard GitHub リポジトリ[AWS CloudFormation 」の「Guard 2.0 の運用モード](https://github.com/aws-cloudformation/cloudformation-guard/tree/main/guard)」を参照してください。 AWS CloudFormation 

### 基本的なルール構造
<a name="config-custom-policy-rules-structure"></a>

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

```
# 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
}
```

### 主要コンポーネント
<a name="config-custom-policy-rules-components"></a>

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

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

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

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

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

### 一般的なパターン
<a name="config-custom-policy-rules-patterns"></a>

------
#### [ 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>>
}}
```

------

### 高度な機能
<a name="config-custom-policy-rules-advanced"></a>

------
#### [ 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
}
```

------

### ベストプラクティス
<a name="config-custom-policy-rules-best-practices"></a>
+ 読みやすさを向上させるには、`let` ステートメントで変数を使用します。
+ 名前付きルールブロックを使用して関連するチェックをグループ化します。
+ わかりやすいコメントを含めます。
+ 適切な演算子 (`exists`、`is_string`、`is_list`) を使用します。
+ 大文字と小文字を区別しないマッチングで正規表現パターンを使用します。

### 例: dynamodb-pitr-enabled
<a name="config-custom-policy-rules-example"></a>

次の例は、 AWS Config マネージドルール の AWS Config カスタムポリシールールバージョンのポリシー定義を示しています[dynamodb-pitr-enabled](dynamodb-pitr-enabled.md)。このルールは、ポイントインタイムリカバリが 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>>
}
```