

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

# AWS KMS キーポリシーと CloudFormation フック結果を保管中に暗号化するためのアクセス許可
<a name="hooks-kms-key-policy"></a>

このトピックでは、[GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html) API から利用可能な Hooks 注釈データを暗号化するためのカスタマーマネージドキーを指定するときに必要な AWS KMS キーポリシーとアクセス許可を設定する方法について説明します。

**注記**  
CloudFormation フックは、アカウントの注釈データを暗号化するためにデフォルト AWS 所有のキー を使用する追加の認可を必要としません。

**Topics**
+ [概要:](#hooks-kms-overview)
+ [暗号化コンテキストを使用してカスタマーマネージドキーへのアクセスを制御する](#hooks-encryption-context-security)
+ [カスタマーマネージド型 KMS キーのポリシー](#hooks-policy-example-cmk-access)
+ [`SetTypeConfiguration` API の KMS アクセス許可](#hooks-policy-example-settypeconfiguration-permissions)
+ [`GetHookResult` API の KMS アクセス許可](#hooks-policy-example-gethookresult-permissions)

## 概要:
<a name="hooks-kms-overview"></a>

フック注釈データの暗号化には AWS KMS keys 、以下を使用できます。
+ [AWS 所有のキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) – デフォルトでは、CloudFormation は AWS 所有のキー を使用してデータを暗号化します。表示、管理、使用 AWS 所有のキー、またはそれらの使用を監査することはできません。ただし、データの暗号化に使用されるキーを保護するために明示的な設定を実行する必要はありません。 AWS 所有のキー は無料で提供されます (月額料金や使用料金はかかりません）。注釈データを保護する暗号化キーを監査または制御する必要がない限り、 AWS 所有のキー が適しています。
+ [カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) – CloudFormation は、作成、所有、管理する対称カスタマーマネージドキーを使用して、既存の に 2 番目の暗号化レイヤーを追加します AWS 所有のキー。 AWS KMS 料金が適用されます。詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。キーを管理するには、 [AWS KMS コンソール](https://console.aws.amazon.com/kms)、 AWS Key Management Service 、 AWS CLIまたは AWS KMS API で (AWS KMS) を使用します。詳細については、[AWS Key Management Service デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)を参照してください。

フックを作成および更新するときに、カスタマーマネージドキーを設定できます。カスタマーマネージドキーを指定すると、CloudFormation はこのキーを使用して注釈データを暗号化してから保存します。`GetHookResult` API オペレーション中に注釈データが後でアクセスされると、CloudFormation は自動的にデータを復号します。フックの暗号化キーの設定については、「」を参照してください[フック設定スキーマ構文リファレンス](hook-configuration-schema.md)。

**重要**  
カスタマーマネージドキーを指定する`KmsKeyId`オプションは現在、 を使用してフック AWS CLI を設定する場合にのみ使用できます。

## 暗号化コンテキストを使用してカスタマーマネージドキーへのアクセスを制御する
<a name="hooks-encryption-context-security"></a>

CloudFormation フックには、すべての注釈ストレージおよび取得オペレーションで暗号化コンテキストが自動的に含まれます。これにより、キーポリシーで暗号化コンテキスト条件を設定して、キーが特定のフックにのみ使用できることを確認できます。
+ `kms:EncryptionContext:aws:cloudformation:hooks:service` – キーが CloudFormation Hooks サービスでのみ使用されるようにします。
+ `kms:EncryptionContext:aws:cloudformation:account-id` – AWS アカウント ID を一致させることで、クロスアカウントキーの使用を防止します。
+ `kms:EncryptionContext:aws:cloudformation:arn` – ARN パターンを使用して、特定のフックの使用を制限します。

これらの条件は、暗号化されたデータを特定のフックコンテキストに暗号的にバインドすることで、混乱した代理攻撃に対する保護を強化します。

## カスタマーマネージド型 KMS キーのポリシー
<a name="hooks-policy-example-cmk-access"></a>

カスタマーマネージドキーを作成するときは、CloudFormation Hooks サービスが AWS KMS オペレーションを実行できるように、そのキーポリシーを定義する必要があります。次のキーポリシーを使用するには、{{プレースホルダー値を}}独自の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnableIAMUserDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:role/{{ExampleRole}}"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.{{us-east-1}}.amazonaws.com"
        }
      }
    },
    {
      "Sid": "EnableIAMUserGenerateDataKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:role/{{ExampleRole}}"
      },
      "Action": "kms:GenerateDataKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.{{us-east-1}}.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "{{123456789012}}"
        },
        "ArnLike": {
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:{{123456789012}}:hook/*"
        }
      }
    },
    {
      "Sid": "EnableIAMUserDecrypt",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:role/{{ExampleRole}}"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "cloudformation.{{us-east-1}}.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowHooksServiceDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "hooks.cloudformation.amazonaws.com"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{123456789012}}"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:{{123456789012}}:hook/*"
        }
      }
    },
    {
      "Sid": "AllowHooksService",
      "Effect": "Allow",
      "Principal": {
        "Service": "hooks.cloudformation.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{123456789012}}",
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "{{123456789012}}"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:{{123456789012}}:hook/*",
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:{{123456789012}}:hook/*"
        }
      }
    }
  ]
}
```

------

このポリシーは、IAM ロール (最初の 3 つのステートメント) と CloudFormation Hooks サービス (最後の 2 つのステートメント) の両方にアクセス許可を付与します。`kms:ViaService` 条件キーにより、KMS キーは CloudFormation を介してのみ使用でき、直接 KMS API コールを防ぐことができます。キーオペレーションは次のとおりです。
+ `kms:DescribeKey` – キープロパティとメタデータを検証します。このオペレーションは、暗号化コンテキスト条件では使用できないため、別のステートメントにあります。
+ `kms:GenerateDataKey` – ストレージ前に注釈を暗号化するためのデータ暗号化キーを生成します。このオペレーションには、スコープ付きアクセスコントロールの暗号化コンテキスト条件が含まれます。
+ `kms:Decrypt` – 以前に暗号化された注釈データを復号します。IAM ロールの場合、これには `kms:ViaService`条件が含まれます。サービスプリンシパルの場合、これには暗号化コンテキスト条件が含まれます。

`aws:SourceAccount` および `aws:SourceArn`条件キーは、混乱した代理攻撃に対する主要な保護を提供します。暗号化コンテキスト条件は、追加の検証レイヤーを提供します。詳細については、「 *AWS Key Management Service デベロッパーガイド*」の[「 aws:SourceArnまたは aws:SourceAccount条件キー](https://docs.aws.amazon.com/kms/latest/developerguide/least-privilege.html#least-privilege-source-arn)の使用」を参照してください。

**重要**  
フック実行ロールには AWS KMS アクセス許可は必要ありません。CloudFormation Hooks サービスプリンシパルは、すべての AWS KMS オペレーションを実行します。

## `SetTypeConfiguration` API の KMS アクセス許可
<a name="hooks-policy-example-settypeconfiguration-permissions"></a>

[SetTypeConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html) API コール中、CloudFormation は指定された AWS KMS キーで注釈データを暗号化するためのユーザーアクセス許可を検証します。`SetTypeConfiguration` API を使用して暗号化を設定するユーザーまたはロールに、次の IAM ポリシーを追加します。{{プレースホルダー値}}を、ユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudformation:SetTypeConfiguration",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:DescribeKey",
      "Resource": "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{abc-123}}"
    },
    {
      "Effect": "Allow",
      "Action": "kms:GenerateDataKey",
      "Resource": "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{abc-123}}",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
          "kms:EncryptionContext:aws:cloudformation:123456789012": "{{123456789012}}"
        },
        "ArnLike": {
          "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:{{123456789012}}:hook/*"
        }
      }
    }
  ]
}
```

------

## `GetHookResult` API の KMS アクセス許可
<a name="hooks-policy-example-gethookresult-permissions"></a>

カスタマーマネージドキーを使用するフックの [GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html) を呼び出すには、ユーザーはそのキーに対する`kms:Decrypt`アクセス許可を持っている必要があります。を呼び出すユーザーまたはロールに次の IAM ポリシーを追加します`GetHookResult`。をカスタマーマネージドキーの ARN `{{arn:aws:kms:us-east-1:123456789012:key/abc-123}}`に置き換えます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "cloudformation:GetHookResult",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "{{arn:aws:kms:us-east-1:123456789012:key/abc-123}}"
    }
  ]
}
```

------