Amazon Managed Service for Apache Flink (Amazon MSF) 先前稱為 Amazon Kinesis Data Analytics for Apache Flink。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Managed Service for Apache Flink 中的金鑰管理
在 Amazon MSF 中,您可以選擇使用 AWS 受管金鑰或您自己的客戶受管金鑰 CMKs) 來加密資料。 AWS Key Management Service (AWS KMS) 中的 CMKs 是您建立、擁有和管理自己的加密金鑰。
在此頁面
Amazon MSF 中的透明加密
根據預設,Amazon MSF 會使用 AWS 擁有的金鑰 (AOKs) 來加密暫時性 (執行中的應用程式儲存) 和耐用 (耐用的應用程式儲存) 儲存中的資料。這表示受 Flink 檢查點或快照約束的所有資料預設都會加密。AOKs是 Amazon MSF 的預設加密方法,不需要額外設定。若要加密傳輸中的資料,Amazon MSF 預設會使用 TLS 和 HTTP+SSL,而且不需要額外的設定或組態。
Amazon MSF 中的客戶受管金鑰
在 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:DescribeKey
准許將 KMS 金鑰別名解析為金鑰 ARN。
-
kms:Decrypt
准許存取持久的應用程式狀態,並佈建執行中的應用程式儲存。
-
kms:GenerateDataKey
准許存放持久的應用程式狀態。
-
kms:GenerateDataKeyWithoutPlaintext
准許佈建執行中的應用程式儲存體。
-
kms:CreateGrant
准許存取執行中的應用程式儲存體。
KMS 加密內容和限制條件
Amazon MSF 中的 CMK 會在存取金鑰以讀取或寫入加密資料時提供加密內容,也就是 kms:EncryptionContext:aws:kinesisanalytics:arn
。除了加密內容之外,在讀取或寫入耐用的應用程式儲存體時,也會提供來源內容 aws:SourceArn 和 aws:SourceAccount。
建立佈建加密執行中應用程式儲存的授予時,Amazon MSF CMK 會建立限制類型 EncryptionContextSubset 的授予,以確保僅允許透過 進行解密操作"kms:GrantOperations": "Decrypt"
。
金鑰輪換政策
Amazon MSF 不會管理 CMKs 的金鑰輪換政策。您需自行負責金鑰輪換,因為您建立和維護 CMKs。
在 KMS 中,您可以使用自動或手動金鑰輪換來為 CMKs 建立新的密碼編譯資料。如需有關如何輪換金鑰的資訊,請參閱《 AWS Key Management Service 開發人員指南》中的輪換 AWS KMS keys。
當您在 Amazon MSF 中輪換 CMKs 的金鑰時,您必須確定運算子 (API 呼叫者) 具有先前金鑰和新金鑰的許可。
注意
應用程式可以從設定為使用 CMK 後使用 AOK 加密的快照開始。應用程式也可以從使用舊版 CMK 加密的快照開始。若要從快照啟動應用程式,運算子 (API 呼叫者) 必須同時擁有舊金鑰和新金鑰的許可。
在 Amazon MSF 中,我們建議您使用 CMK 加密來停止和重新啟動應用程式。這可確保新的輪換主金鑰會套用至執行中應用程式儲存和耐用應用程式儲存中的所有資料。如果您不停止並重新啟動應用程式,新的金鑰材料只會套用至耐用的應用程式儲存。執行中的應用程式儲存會繼續使用先前的輪換金鑰材料進行加密。
如果您要變更用於 CMK 的 AWS KMS key ARN,您應該在 Amazon MSF 中使用 UpdateApplication。這將確保您的 Flink 應用程式將在UpdateApplication
套用 CMK 變更時重新啟動。
注意
當您提供別名或別名 ARN 時,Amazon MSF 會將別名解析為金鑰 ARN,並將金鑰 ARN 儲存為應用程式的已設定金鑰。
最低權限金鑰政策陳述式
如需金鑰政策陳述式的相關資訊,請參閱 建立 KMS 金鑰政策和 應用程式生命週期運算子 (API 呼叫者) 許可 。
AWS CloudTrail 日誌項目範例
當 Amazon MSF 在 中使用 CMKs 時 AWS KMS, AWS CloudTrail 會自動記錄所有 AWS KMS API 呼叫和相關詳細資訊。這些日誌包含資訊,例如 AWS 服務 提出請求、KMS 金鑰 ARN、執行的 API 動作,以及排除加密資料的時間戳記。這些日誌會顯示哪些 服務存取了您的金鑰,以及何時存取您的金鑰,藉此提供必要的稽核線索,以進行合規、安全監控和故障診斷。
範例 1:使用 Amazon MSF 中擔任的角色 AWS KMS 來解密 API 呼叫
下列 CloudTrail 日誌顯示 Amazon MSF 在 CMK 上執行測試 kms:Decrypt 操作。Amazon MSF 在使用 CreateApplication API 時,使用 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:使用直接服務身分驗證 AWS KMS 在 Amazon MSF 中解密 API 呼叫
下列 CloudTrail 日誌顯示 Amazon MSF 在 CMK 上執行測試 kms:Decrypt 操作。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" }