Amazon Managed Service for Apache Flink(Amazon MSF)之前称为 Amazon Kinesis Data Analytics for Apache Flink。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用管理 CMK APIs
本主题介绍如何 CMKs 使用 Amazon MSF 创建和更新您的 KM APIs S。要按照本主题中描述的步骤进行操作,您必须拥有管理 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 使用应用程序的 CMK。MyCmkApplication该策略向 Operator 角色和 Amazon MSF 服务主体、kinesisanalytics.amazonaws.com 以及 infrastructure.kinesisanalytics.amazonaws.com 授予执行以下操作所需的权限:
-
描述 CMK
-
加密应用程序数据
-
解密应用程序数据
-
为密钥创建授权
下面的示例使用 IAM 角色。您可以使用以下示例作为模板为 KMS 密钥创建密钥策略,但请务必执行以下操作:
-
将
arn:aws:iam::替换为123456789012:role/OperatorOperator角色。在创建密钥策略之前,必须先创建Operator角色或用户。未能执行此操作将导致您的请求失败。 -
将
arn:aws:kinesisanalytics:us-east-1:替换为您应用程序的 ARN。123456789012:application/MyCmkApplication -
将
kinesisanalytics.替换为相应区域的服务值。us-east-1.amazonaws.com -
123456789012用您的账户 IDKey 策略替换为 CMK。 -
添加其他策略声明,以允许密钥管理员管理 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 策略可确保应用程序生命周期操作员拥有向应用程序分配 KMS 密钥所需的权限MyCmkApplication。
更新现有应用程序以使用 CMK
在 Amazon MSF 中,您可以将 CMK 策略应用于使用 AWS 拥有的密钥 () AOKs 的现有应用程序。
默认情况下,Amazon MSF 使用 AOKs 临时存储(运行应用程序存储)和耐用(耐用应用程序存储)存储来加密您的所有数据。这意味着默认情况下,所有受 Flink 检查点或快照约束的数据都是使用加密 AOKs 的。使用 CMK 替换 AOK 时,新的检查点和快照将使用 CMK 进行加密。但是,历史快照仍将使用 AOK 进行加密。
更新现有应用程序以使用 CMK
-
使用以下配置创建 JSON 文件。
确保将
CurrentApplicationVersionId的值替换为应用程序的当前版本号。您可以使用获取应用程序的当前版本号DescribeApplication。在此 JSON 配置中,请记住将
sample值替换为实际值。{ "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId":1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "CUSTOMER_MANAGED_KEY", "KeyIdUpdate": "arn:aws:kms:us-east-1:" } } }123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab -
保存此文件。例如,使用名称
enable-cmk.json保存该文件。 -
运行更新应用程序AWS CLI命令,如以下示例所示。在此命令中,提供您在前面步骤中创建的 JSON 配置文件作为文件参数。
aws kinesisanalyticsv2 update-application \ --cli-input-json file://enable-cmk.json
接受上述配置,使其只能在满足以下条件时更新使用 CMK 的应用程序:
-
API 调用方具有允许访问密钥的策略语句。
-
密钥策略具有允许 API 调用方访问密钥的策略声明。
-
密钥策略具有允许 Amazon MSF 服务主体(例如
kinesisanalytics.amazonaws.com)访问密钥的策略声明。
从 CMK 恢复到 AWS 拥有的密钥
从 CMK 恢复为 AOK
-
使用以下配置创建 JSON 文件。
在此 JSON 配置中,请记住将
sample值替换为实际值。{ "ApplicationName": "MyCmkApplication", "CurrentApplicationVersionId":1, "ApplicationConfigurationUpdate": { "ApplicationEncryptionConfigurationUpdate": { "KeyTypeUpdate": "AWS_OWNED_KEY" } } } -
保存此文件。例如,使用名称
disable-cmk.json保存该文件。 -
运行更新应用程序AWS CLI命令,如以下示例所示。在此命令中,提供您在前面步骤中创建的 JSON 配置文件作为文件参数。
aws kinesisanalyticsv2 update-application \ --cli-input-json file://disable-cmk.json