适用于 Apache Flink 的亚马逊托管服务中的密钥管理 - Managed Service for Apache Flink

适用于 Apache Flink 的亚马逊托管服务(亚马逊 MSF)以前被称为适用于 Apache Flink 的亚马逊 Kinesis Data Analytics。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Apache Flink 的亚马逊托管服务中的密钥管理

在 Amazon MSF 中,您可以选择使用其中一个AWS 托管式密钥或您自己的客户管理的密钥 (CMKs) 来加密数据。 CMKs AWS Key Management Service (AWS KMS) 中是您自己创建、拥有和管理的加密密钥。

默认情况下,Amazon MSF 使用 AWS 拥有的密钥 (AOKs) 对您的数据进行短暂存储(运行应用程序存储)和耐用(持久应用程序存储)存储。这意味着默认情况下,所有受 Flink 检查点快照约束的数据都将被加密。 AOKs 是 Amazon MSF 中的默认加密方法,无需进行其他设置。为了对传输中的数据进行加密,Amazon MSF 默认使用 TLS 和 HTTP+SSL,无需进行其他设置或配置。

在 Amazon MSF 中,CMK 是一项功能,您可以使用自己创建、拥有和管理的密钥来加密应用程序的数据。 AWS KMS

用什么加密 CMKs?

在 Amazon MSF 应用程序中,受到 Flink 检查点或快照的数据将使用您为该应用程序定义的 CMK 进行加密。因此,您的 CMK 将加密存储在运行应用程序存储器或耐用应用程序存储器中的数据。以下各节介绍了 Amazon MSF 应用程序 CMKs 的设置程序。

密钥轮换政策

Amazon MSF 不管理您的 CMKs密钥轮换政策。密钥轮换由您自己负责。这是因为您可以创建和维护 CMKs。有关如何在 Amazon MSF 中对 CMK 使用密钥轮换策略的信息,请参阅。密钥轮换政策

什么不是用加密的 CMKs?

源和汇

数据源和接收器的加密不由 Amazon MSF 管理。它由您的源或接收器配置或应用程序连接器配置进行管理。

加密的追溯应用

Amazon MSF 中的 CMK 不支持追溯应用 CMKs 于现有历史快照。

日志加密

目前,Amazon MSF 不支持对应用程序代码 jar 生成的日志使用 KMS CMK 进行日志加密。您需要确保日志不包含需要 CMK 加密的数据。

传输中数据加密

您不能使用 CMK 对传输中的数据进行加密。默认情况下,Amazon MSF 使用 TLS 或 HTTP 和 SSL 对所有传输中的数据进行加密。

支持的 KMS 密钥类型

Amazon MSF 中的 CMK 支持对称密钥。

KMS 密钥权限

Amazon MSF 中的 CMK 需要权限才能执行以下 KMS 操作。这些权限是验证访问权限、创建 CMK 加密的运行应用程序存储以及将 CMK 加密的应用程序状态存储在耐用的应用程序存储中所必需的。

KMS 加密上下文和限制

Amazon MSF 中的 CMK 在访问密钥以读取或写入加密数据(即)时提供加密上下文。kms:EncryptionContext:aws:kinesisanalytics:arn除了加密上下文外,还会在读取或写入持久应用程序存储时提供源上下文 a ws: SourceArn SourceAccount 和 aws:。

在创建配置加密运行应用程序存储空间的授权时,Amazon MSF CMK 会创建具有约束类型的授权,EncryptionContextSubset确保只允许解密操作通过。"kms:GrantOperations": "Decrypt"

密钥轮换政策

Amazon MSF 不管理您的 CMKs密钥轮换政策。你要对自己的密钥轮换负责,因为你需要创建和维护 CMKs。

在 KMS 中,您可以使用自动或手动密钥轮换来为您创建新的加密材料。 CMKs有关如何轮换密钥的信息,请参阅AWS Key Management Service 开发者指南 AWS KMS keys中的轮换

CMKs 在 Amazon MSF 中轮换密钥时,必须确保操作员(API 调用者)拥有对旧密钥和新密钥的权限。

注意

应用程序可以从配置为使用 CMK 后使用 AOK 加密的快照启动。应用程序也可以从使用较旧 CMK 加密的快照启动。要从快照启动应用程序,操作员(API 调用者)必须同时拥有旧密钥和新密钥的权限。

在 Amazon MSF 中,我们建议您使用 CMK 加密停止并重启应用程序。这样可以确保新的轮换主密钥应用于正在运行的应用程序存储和持久应用程序存储中的所有数据。如果您不停止并重新启动应用程序,则新的密钥材料将仅应用于耐用的应用程序存储。运行中的应用程序存储将继续使用之前的轮换密钥材料进行加密。

如果您要更改用于 CMK 的 AWS KMS key ARN,则应在 UpdateApplicationAmazon MSF 中使用。这将确保您的 Flink 应用程序在应用 CMK 更改UpdateApplication时将重新启动。

注意

当您提供别名或别名 ARN 时,Amazon MSF 会将该别名解析为密钥 ARN,并将密钥 ARN 存储为应用程序的配置密钥。

权限最低的密钥策略声明

有关关键政策声明的信息,请参阅创建 KMS 密钥策略应用程序生命周期操作员(API 调用者)权限

AWS CloudTrail 日志条目示例

当 Amazon MSF CMKs 在中使用时 AWS KMS, AWS CloudTrail 会自动记录所有 AWS KMS API 调用和相关详情。这些日志包含诸如 AWS 服务 发出请求、KMS 密钥 ARN、执行的 API 操作以及不包括加密数据的时间戳之类的信息。这些日志通过显示哪些服务访问了您的密钥以及何时访问了您的密钥,为合规性、安全监控和故障排除提供了必要的审计跟踪。

示例 1:使用亚马逊 MSF 中的代入角色 AWS KMS 解密 API 调用

以下 CloudTrail 日志显示 Amazon MSF 对 CMK 执行测试 kms: Decryp t 操作。Amazon MSF 在使用 CreateApplicationAPI 时使用Operator角色发出此请求。以下日志包含基本细节,例如目标 KMS 密钥 ARN、关联的 Amazon MSF 应用程序 (MyCmkApplication) 和操作的时间戳。

{ "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "REDACTED", "arn": "arn:aws:sts::123456789012:assumed-role/Operator/CmkTestingSession", "accountId": "123456789012", "accessKeyId": "REDACTED", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "REDACTED", "arn": "arn:aws:iam::123456789012:role/Operator", "accountId": "123456789012", "userName": "Operator" }, "attributes": { "creationDate": "2025-08-07T13:29:28Z", "mfaAuthenticated": "false" } }, "invokedBy": "kinesisanalytics.amazonaws.com" }, "eventTime": "2025-08-07T13:45:45Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "kinesisanalytics.amazonaws.com", "userAgent": "kinesisanalytics.amazonaws.com", "errorCode": "DryRunOperationException", "errorMessage": "The request would have succeeded, but the DryRun option is set.", "requestParameters": { "encryptionContext": { "aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication" }, "keyId": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "dryRun": true }, "responseElements": null, "additionalEventData": { "keyMaterialId": "REDACTED" }, "requestID": "56764d19-1eb1-48f1-8044-594aa7dd05c4", "eventID": "1371b402-f1dc-4c47-8f3a-1004e4803c5a", "readOnly": true, "resources": [ { "accountId": "123456789012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "123456789012", "eventCategory": "Management" }
示例 2:使用直接服务身份验证在 Amazon MSF 中 AWS KMS 解密 API 调用

以下 CloudTrail 日志显示 Amazon MSF 对 CMK 执行测试 kms: Decryp t 操作。Amazon MSF 通过直接 AWS service-to-service 身份验证而不是扮演角色来发出此请求。以下日志包含基本细节,例如目标 KMS 密钥 ARN、关联的 Amazon MSF 应用程序 (MyCmkApplication) 以及该操作的共享事件 ID。

{ "eventVersion": "1.11", "userIdentity": { "type": "AWSService", "invokedBy": "kinesisanalytics.amazonaws.com" }, "eventTime": "2025-08-07T13:45:45Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "kinesisanalytics.amazonaws.com", "userAgent": "kinesisanalytics.amazonaws.com", "errorCode": "DryRunOperationException", "errorMessage": "The request would have succeeded, but the DryRun option is set.", "requestParameters": { "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "keyId": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "encryptionContext": { "aws:kinesisanalytics:arn": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/MyCmkApplication" }, "dryRun": true }, "responseElements": null, "additionalEventData": { "keyMaterialId": "REDACTED" }, "requestID": "5fe45ada-7519-4608-be2f-5a9b8ddd62b2", "eventID": "6206b08f-ce04-3011-9ec2-55951d357b2c", "readOnly": true, "resources": [ { "accountId": "123456789012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "Application-account-ID", "sharedEventID": "acbe4a39-ced9-4f53-9f3c-21ef7e89dc37", "eventCategory": "Management" }