APIs を使用した CMK の管理 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink (Amazon MSF) は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。

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

APIs を使用した CMK の管理

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

KMS キーを作成して割り当てる

開始する前に、KMS キーを作成します。KMS キーの作成の詳細については、 AWS Key Management Service デベロッパーガイド「KMS キーの作成」を参照してください。

KMS キーポリシーを作成する

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 キーのキーポリシーを作成できますが、必ず以下を実行してください。

  • Operatorロールarn:aws:iam::123456789012:role/Operatorに置き換えます。キーポリシーを作成する前に、Operatorロールまたはユーザーを作成する必要があります。これを行わないと、リクエストが失敗します。

  • をアプリケーションの ARN arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplicationに置き換えます。

  • を対応するリージョンのサービス値kinesisanalytics.us-east-1.amazonaws.comに置き換えます。

  • 123456789012 を CMK のアカウント idKey ポリシーに置き換えます。

  • キー管理者が KMS キーを管理できるように、ポリシーステートメントを追加します。これを行わないと、キーを管理するためのアクセスが失われます。

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

{ "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 発信者) のアクセス許可

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

{ "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 を使用するように既存のアプリケーションを更新する

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

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

CMK を使用するように既存のアプリケーションを更新するには
  1. 次の設定で JSON ファイルを作成します。

    の値をアプリケーションのCurrentApplicationVersionId現在のバージョン番号に置き換えてください。DescribeApplication を使用して、アプリケーションの現在のバージョン番号を取得できます。

    この 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" } } }
  2. このファイルを保存します。たとえば、 という名前で保存しますenable-cmk.json

  3. 次の例に示すように、update-application AWS CLI コマンドを実行します。このコマンドでは、前のステップで作成した JSON 設定ファイルをファイル引数として指定します。

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

前述の設定は、次の条件が満たされる場合にのみ、CMK を使用するアプリケーションを更新するために受け入れられます。

  • API 発信者には、キーへのアクセスを許可するポリシーステートメントがあります。

  • キーポリシーには、API 発信者にキーへのアクセスを許可するポリシーステートメントがあります。

  • キーポリシーには、キーkinesisanalytics.amazonaws.comへのアクセスなど、Amazon MSF サービスプリンシパルを許可するポリシーステートメントがあります。

CMK から に戻す AWS 所有のキー

CMK から AOK に戻すには
  1. 次の設定で JSON ファイルを作成します。

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

    { "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "AWS_OWNED_KEY" } } }
  2. このファイルを保存します。たとえば、 という名前で保存しますdisable-cmk.json

  3. 次の例に示すように、update-application AWS CLI コマンドを実行します。このコマンドでは、前のステップで作成した JSON 設定ファイルをファイル引数として指定します。

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