

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

# API を使用した CMK の管理
<a name="manage-cmk-api"></a>

このトピックでは、Amazon MSF API を使用して KMS CMK を作成および更新する方法について説明します。このトピックで記述されている手順に従うには、KMS キーおよび Amazon MSF アプリケーションを管理するアクセス許可が必要です。このトピックの手順ではデモンストレーションおよびテストのみを目的として、許可されたキーポリシーを使用します。このような許可されたキーポリシーを本番ワークロードに使用することは**お勧めしません**。本番ワークロードにおける実際のシナリオでは、ロール、アクセス許可、ワークフローは分離されます。

**Topics**
+ [KMS キーを作成して割り当てる](#create-assign-cmk-api)
+ [CMK を使用するように既存のアプリケーションを更新する](#update-existing-app-use-cmk-api)
+ [CMK から に戻す AWS 所有のキー](#revert-cmk-to-aok-api)

## KMS キーを作成して割り当てる
<a name="create-assign-cmk-api"></a>

開始する前に、KMS キーを作成してください。KMS キーの作成の詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。

**Topics**
+ [KMS キーポリシーを作成する](#create-cmk-kms-key-policy)
+ [アプリケーションライフサイクルオペレータ (API 発信者) のアクセス許可](#create-cmk-kms-api-caller-permissions)

### KMS キーポリシーを作成する
<a name="create-cmk-kms-key-policy"></a>

Amazon MSF で CMK を使用するには、キーポリシーに `kinesisanalytics.amazonaws.com` および `infrastructure.kinesisanalytics.amazonaws.com` のサービスプリンシパルを追加する必要があります。Amazon MSF は、検証およびリソースアクセスにこれらのサービスプリンシパルを使用します。これらのサービスプリンシパルを含めない場合、Amazon MSF によってリクエストが拒否されます。

次の KMS キーポリシーにより、Amazon MSF はアプリケーションの *MyCmkApplication* に CMK を使用できます。このポリシーでは次の操作を実行するため、**Operator** ロールおよび Amazon MSF サービスプリンシパルの両方に `kinesisanalytics.amazonaws.com` および `infrastructure.kinesisanalytics.amazonaws.com` という必要なアクセス許可が付与されます。
+ CMK を説明する
+ アプリケーションデータを暗号化する
+ アプリケーションデータを復号する
+ キーに対する許可を作成する

次の例では、IAM ロールが使用されます。次の例をテンプレートとして使用して KMS キーのキーポリシーを作成できますが、必ず次の操作を行ってください。
+ `arn:aws:iam::123456789012:role/Operator` を **Operator** ロールに置き換えます。キーポリシーを作成する前に、**Operator** ロールまたはユーザーを作成する必要があります。これを行わないと、リクエストが失敗します。
+ `arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication` をアプリケーションの ARN に置き換えます。
+ `kinesisanalytics.us-east-1.amazonaws.com` を対応するリージョンのサービス値に置き換えます。
+ *123456789012* を CMK のアカウント idKey ポリシーに置き換えます。
+ [キー管理者が KMS キーを管理できる](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#key-policy-default-allow-administrators)ように、他のポリシーステートメントを追加します。これを行わないと、キーを管理するためのアクセスが失われます。

次のキーポリシーステートメントは明示的で各アクションに必要な条件を示すことを意図しているため、大規模になります。

```
{
    "Version":"2012-10-17",			 	 	 	 	 	 
    "Id": "MyMsfCmkApplicationKeyPolicy",
    "Statement": [
        {
            "Sid": "AllowOperatorToDescribeKey",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Operator"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowOperatorToConfigureAppToUseKeyForApplicationState",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Operator"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowOperatorToConfigureAppToCreateGrantForRunningState",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Operator"
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:GrantConstraintType": "EncryptionContextSubset"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": "Decrypt"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToDescribeKey",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "kinesisanalytics.amazonaws.com",
                    "infrastructure.kinesisanalytics.amazonaws.com"
                ]
            },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "aws:SourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToGenerateDataKeyForDurableState",
            "Effect": "Allow",
            "Principal": {
                "Service": "kinesisanalytics.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "aws:SourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToDecryptForDurableState",
            "Effect": "Allow",
            "Principal": {
                "Service": "kinesisanalytics.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToUseKeyForRunningState",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "infrastructure.kinesisanalytics.amazonaws.com"
                ]
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMSFServiceToCreateGrantForRunningState",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "infrastructure.kinesisanalytics.amazonaws.com"
                ]
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:GrantConstraintType": "EncryptionContextSubset"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": "Decrypt"
                }
            }
        }
    ]
}
```

### アプリケーションライフサイクルオペレータ (API 発信者) のアクセス許可
<a name="create-cmk-kms-api-caller-permissions"></a>

次の IAM ポリシーでは、アプリケーションライフサイクルオペレータがアプリケーションの *MyCmkApplication* に KMS キーを割り当てるために必要なアクセス許可を持っていることを保証します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowMSFAPICalls",
            "Effect": "Allow",
            "Action": "kinesisanalytics:*",
            "Resource": "*"
        },
        {
            "Sid": "AllowPassingServiceExecutionRole",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::123456789012:role/MyCmkApplicationRole"
        },
        {
            "Sid": "AllowDescribeKey",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowMyCmkApplicationKeyOperationsForDurableState",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMyCmkApplicationKeyOperationsForRunningState",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication"
                }
            }
        },
        {
            "Sid": "AllowMyCmkApplicationCreateGrantForRunningState",
            "Effect": "Allow",
            "Action": "kms:CreateGrant",
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": "Decrypt"
                },
                "StringEquals": {
                    "kms:ViaService": "kinesisanalytics.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:kinesisanalytics:arn": 
                        "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication",
                    "kms:GrantConstraintType": "EncryptionContextSubset"
                }
            }
        }
    ]
}
```

------

## CMK を使用するように既存のアプリケーションを更新する
<a name="update-existing-app-use-cmk-api"></a>

Amazon MSF では、 AWS 所有のキー (AOKs) を使用する既存のアプリケーションに CMK ポリシーを適用できます。

デフォルトでは、Amazon MSF は AOK を使用してエフェメラル (実行中のアプリケーションストレージ) ストレージと永続的な (永続的なアプリケーションストレージ) ストレージでデータを暗号化します。つまり、Flink [チェックポイント](how-fault.md)または[スナップショット](how-snapshots.md)の対象となるすべてのデータは、デフォルトで AOK を使用して暗号化されます。AOK を CMK に置き換えると、新しいチェックポイントおよびスナップショットは CMK で暗号化されます。ただし、履歴スナップショットは AOK で暗号化されたままになります。

**CMK を使用するように既存のアプリケーションを更新する方法**

1. 次の設定で JSON ファイルを作成します。

   必ず `CurrentApplicationVersionId` の値をアプリケーションの現在のバージョン番号に置き換えてください。[DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html) を使用して、アプリケーションの現在のバージョン番号を取得できます。

   この JSON 設定では、必ず *サンプル* 値を実際の値に置き換えてください。

   ```
   {
       "ApplicationName": "MyCmkApplication",
       "CurrentApplicationVersionId": 1,
       "ApplicationConfigurationUpdate": {
           "ApplicationEncryptionConfigurationUpdate": {
               "KeyTypeUpdate": "CUSTOMER_MANAGED_KEY",
               "KeyIdUpdate": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
           }
       }
   }
   ```

1. このファイルを保存します。例えば、「**enable-cmk.json**」という名前で保存します。

1. 次の例に示すように、[update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) AWS CLI コマンドを実行します。このコマンドでは、以前のステップでファイル引数として作成した JSON 設定ファイルを指定します。

   ```
   aws kinesisanalyticsv2 update-application \
       --cli-input-json file://enable-cmk.json
   ```

上記の設定がアプリケーションの更新に認められ、CMK を使用できるようになるのは、次の条件が満たされている場合に限ります。
+ API 発信者には、キーへのアクセスを許可するポリシーステートメントがあります。
+ キーポリシーには、API 発信者にキーへのアクセスを許可するポリシーステートメントがあります。
+ キーポリシーには、Amazon MSF サービスプリンシパルを許可するポリシーステートメントがあります (キーへの `kinesisanalytics.amazonaws.com` アクセスなど)。

## CMK から に戻す AWS 所有のキー
<a name="revert-cmk-to-aok-api"></a>

**CMK から AOK に戻す方法**

1. 次の設定で JSON ファイルを作成します。

   この JSON 設定では、必ず *サンプル* 値を実際の値に置き換えてください。

   ```
   {
       "ApplicationName": "MyCmkApplication",
       "CurrentApplicationVersionId": 1,
       "ApplicationConfigurationUpdate": {
           "ApplicationEncryptionConfigurationUpdate": {
               "KeyTypeUpdate": "AWS_OWNED_KEY"
           }
       }
   }
   ```

1. このファイルを保存します。例えば、「**disable-cmk.json**」という名前で保存します。

1. 次の例に示すように、[update-application](https://docs.aws.amazon.com/cli/latest/reference/kinesisanalyticsv2/update-application.html) AWS CLI コマンドを実行します。このコマンドでは、以前のステップでファイル引数として作成した JSON 設定ファイルを指定します。

   ```
   aws kinesisanalyticsv2 update-application \
       --cli-input-json file://disable-cmk.json
   ```