AWS KMS搭配 Amazon Redshift 資料 API 使用 - Amazon Redshift

Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS KMS搭配 Amazon Redshift 資料 API 使用

當您使用客戶受管金鑰加密 Amazon Redshift 叢集或 Redshift Serverless 工作群組時,Amazon Redshift Data API 會使用相同的客戶受管金鑰來存放和加密您的查詢和結果。

資料 API 預設會加密您的資料,以保護敏感資訊,例如查詢文字和查詢結果。它會針對此保護使用 擁有AWS的AWS KMS加密金鑰。

當您保護敏感資料時,靜態資料的預設加密可降低營運開銷和複雜性。此方法可協助您建置符合嚴格加密合規和法規要求的安全應用程式。

在 中使用授予AWS KMS

資料 API 需要授予才能使用客戶受管金鑰。

當您BatchExecuteStatement針對使用客戶受管金鑰加密的叢集呼叫 ExecuteStatement或 時,Amazon Redshift 會透過傳送CreateGrant請求至 來代表您建立授予AWS KMS。AWS KMS使用授予來授予資料 API 存取您帳戶中的 KMS 金鑰。

資料 API 需要授予 ,才能將客戶受管金鑰用於下列操作:

  • 傳送Encrypt請求至 AWS KMS,以使用客戶受管金鑰加密查詢中繼資料。

  • 傳送GenerateDataKey請求至 AWS KMS,以產生由客戶受管金鑰加密的資料金鑰。

  • Decrypt請求傳送至 AWS KMS以解密加密的資料金鑰,讓它們可以加密您的資料。

您可以隨時撤銷授予的存取權,或移除客戶受管金鑰的 Amazon Redshift 存取權。如果您這麼做,資料 API 就無法再存取客戶受管金鑰加密的資料,這會影響依賴該資料的操作。例如,如果您在撤銷授予後嘗試擷取查詢結果或追蹤查詢狀態,資料 API 會傳回 AccessDeniedException

客戶受管金鑰的金鑰政策

金鑰政策會控制客戶受管金鑰的存取權限。每個客戶受管金鑰都必須只有一個金鑰政策,其中包含決定誰可以使用金鑰及其使用方式的陳述式。在建立客戶受管金鑰時,可以指定金鑰政策。如需更多資訊,請參閱 AWS Key Management Service 開發人員指南中的客戶受管金鑰

若要搭配資料 API 使用客戶受管金鑰,您必須先允許存取 Amazon Redshift。金鑰政策中必須允許下列 API 操作:

  • kms:CreateGrant:新增客戶受管金鑰的授權。授予控制對指定AWS KMS金鑰的存取,允許存取 Amazon Redshift 所需的授予操作。如需詳細資訊,請參閱在 中使用授予AWS KMS

以下是金鑰政策範例:

"Statement":[ { "Sid":"Allow access to principals authorized to use Amazon Redshift", "Effect":"Allow", "Principal":{ "AWS":"*" }, "Action":[ "kms:DescribeKey", "kms:CreateGrant" ], "Resource":"*", "Condition":{ "StringEquals":{ "kms:ViaService":"redshift.amazonaws.com", "kms:CallerAccount":"111122223333" } } }, { "Sid":"AllowKeyAdministratorsAccess", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole" }, "Action":"kms:*", "Resource":"*" }, { "Sid":"AllowKeyUseForExampleRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action":[ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource":"*" } ]

資料 API 加密內容

加密內容是選用的一組金鑰/值對,其中包含有關資料的其他內容資訊。 AWS KMS會使用加密內容做為額外的已驗證資料,以支援已驗證的加密。當您在加密資料的請求中包含加密內容時, 會將加密內容AWS KMS繫結至加密的資料。若要解密資料,您必須在請求中包含相同的加密內容。

資料 API 在所有已佈建叢集AWS KMS的密碼編譯操作中使用相同的三個加密內容金鑰/值對:

  • aws:redshift:arn – 叢集的 Amazon Resource Name (ARN)

  • aws:redshift:createtime – 您請求建立叢集時的時間戳記

  • serviceNameRedshiftDataAPI

"EncryptionContextSubset": { "aws:redshift:arn": "arn:aws:redshift:us-east-1:123456789012:cluster:redshift-cluster", "aws:redshift:createtime": "20250815T0000Z", "serviceName": "RedshiftDataAPI", }

資料 API 在所有AWS KMS無伺服器工作群組的密碼編譯操作中使用兩個加密內容金鑰/值對:

  • aws:redshift-serverless:arn – 命名空間的 Amazon Resource Name (ARN)

  • serviceName – RedshiftDataAPI

"EncryptionContextSubset": { "aws:redshift-serverless:arn": "arn:aws:redshift-serverless:us-east-1:123456789012:namespace:12345678-1234-1234-1234-123456789012", "serviceName": "RedshiftDataAPI" }

如需加密的詳細資訊,請參閱 的密碼編譯詳細資訊簡介AWS KMS。如需 Amazon Redshift 和AWS KMS整合的詳細資訊,請參閱 Amazon Redshift 如何使用 AWS KMS