结合使用 Amazon KMS 与 Amazon Redshift Data API - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从 2025 年 11 月 1 日起,Amazon Redshift 将不再支持创建新的 Python UDF。如果您想要使用 Python UDF,请在该日期之前创建 UDF。现有的 Python UDF 将继续正常运行。有关更多信息,请参阅博客文章

结合使用 Amazon KMS 与 Amazon Redshift Data API

在使用客户自主管理型密钥对 Amazon Redshift 集群或 Redshift Serverless 工作组进行加密时,Amazon Redshift Data API 会使用相同的客户自主管理型密钥来存储和加密您的查询与结果。

默认情况下,Data API 会加密您的数据以保护敏感信息,例如查询文本和查询结果。它使用 Amazon 拥有的 Amazon KMS 加密密钥来实施此保护措施。

静态数据的默认加密可降低保护敏感数据时的运营开销和复杂性。此方法有助于构建符合严格加密合规性和监管要求的安全应用程序。

使用 Amazon KMS 中的授权

Data API 需要授权才能使用客户自主管理型密钥。

在对已使用客户自主管理型密钥加密的集群调用 ExecuteStatementBatchExecuteStatement 时,Amazon Redshift 会通过向 Amazon KMS 发送 CreateGrant 请求来代表您创建授权。Amazon KMS 通过授权向 Data API 授予对您账户中的 KMS 密钥的访问权限。

Data API 需要授权,才能将客户自主管理型密钥用于以下操作:

  • 向 Amazon KMS 发送 Encrypt 请求,以使用客户自主管理型密钥对查询元数据进行加密。

  • 向 Amazon KMS 发送 GenerateDataKey 请求,以生成由客户自主管理型密钥加密的数据密钥。

  • 向 Amazon KMS 发送 Decrypt 请求,以对已加密的数据密钥进行解密,从而使用这些密钥对您的数据进行加密。

您可以随时撤销对授权的访问权限,或者删除 Amazon Redshift 对客户自主管理型密钥的访问权限。如果您这样做,Data API 将不再能访问由客户自主管理型密钥加密的数据,这会影响依赖于该数据的操作。例如,如果您在撤销授权后尝试检索查询结果或跟踪查询状态,则 Data API 会返回 AccessDeniedException

客户自主管理型密钥的密钥策略

密钥政策控制对客户托管密钥的访问。每个客户托管式密钥必须只有一个密钥策略,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥策略。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户托管密钥

要结合使用您的客户自主管理型密钥与 Data API,您必须先允许访问 Amazon Redshift。密钥策略中必须允许以下 API 操作:

  • kms:CreateGrant:向客户托管密钥添加授权。这些授权控制对指定 Amazon KMS 密钥的访问权限,从而允许访问 Amazon Redshift 所需的授权操作。有关更多信息,请参阅在 Amazon 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":"*" } ]

Data API 加密上下文

加密上下文是一组可选的键值对,包含有关数据的其他上下文信息。Amazon KMS 会将加密上下文用作其他已经过验证的数据以支持经过身份验证的加密。在请求中包含加密上下文以加密数据时,Amazon KMS 将加密上下文绑定到加密的数据。要解密数据,您必须在请求中包含相同的加密上下文。

Data API 在预调配集群的所有 Amazon KMS 加密操作中使用相同的三个加密上下文键值对:

  • aws:redshift:arn:集群的 Amazon 资源名称(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", }

Data API 在无服务器工作组的所有 Amazon KMS 加密操作中使用两个加密上下文键值对:

  • aws:redshift-serverless:arn:命名空间的 Amazon 资源名称(ARN)

  • serviceName:RedshiftDataAPI

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

有关加密的更多信息,请参阅 Amazon KMS 的加密详细信息简介。有关 Amazon Redshift 和 Amazon KMS 集成的更多信息,请参阅 Amazon Redshift 使用 Amazon KMS 的方式