

# 加密托管查询结果
<a name="encrypting-managed-results"></a>

Athena 提供以下用于加密[托管查询结果](managed-results.md)的选项。

## 使用 Amazon 拥有的密钥进行加密
<a name="encrypting-managed-results-aws-owned-key"></a>

这是使用托管查询结果时的默认选项。此选项表示您要使用 Amazon 拥有的密钥对查询结果进行加密。Amazon 拥有的密钥不会存储在您的 Amazon 账户中，而是 Amazon 拥有的 KMS 密钥集合的一部分。当您使用 Amazon 拥有的密钥时，无需支付任何费用，并且它们不会计入您账户的 Amazon KMS 配额。

## 使用 Amazon KMS 客户自主管理型密钥进行加密
<a name="encrypting-managed-results-customer-managed-key"></a>

客户自主管理型密钥是在您的 Amazon 账户中由您创建、拥有和管理的 KMS 密钥。您可以完全控制这些 KMS 密钥，包括建立和维护其密钥策略、IAM 策略和授权、启用和禁用它们、轮换其加密材料、添加标签、创建引用它们的别名以及安排删除它们。有关更多信息，请参阅[客户自主管理型密钥](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html#customer-cmk)。

## Athena 如何使用客户自主管理型密钥对结果进行加密
<a name="encrypting-managed-results-how-ate-uses-cmk"></a>

当您指定客户自主管理型密钥时，Athena 会在将查询结果存储在托管查询结果中时使用它来加密查询结果。当您调用 `GetQueryResults` 时，将使用相同的密钥来解密结果。当您将客户自主管理型密钥的状态设置为禁用或安排删除它时，它会阻止 Athena 和所有用户使用该密钥加密或解密结果。

Athena 使用信封加密和密钥层次结构来加密数据。您的 Amazon KMS 加密密钥用于生成和解密此密钥层次结构的根密钥。

每个结果都使用加密时在工作组中配置的客户自主管理型密钥进行加密。将密钥切换到其他客户自主管理型密钥或 Amazon 拥有的密钥不会使用新密钥重新加密现有结果。删除和禁用特定客户自主管理型密钥只会影响密钥加密的结果的解密。

Athena 需要访问您的加密密钥来执行 `kms:Decrypt`、`kms:GenerateDataKey` 和 `kms:DescribeKey` 操作以加密和解密结果。有关更多信息，请参阅 [Amazon S3 中加密数据的权限](encryption.md#permissions-for-encrypting-and-decrypting-data)。

除了 Athena 和 Amazon S3 权限之外，使用 `StartQueryExecution` API 提交查询并使用 `GetQueryResults` 读取结果的主体还必须对客户自主管理型密钥具有执行 `kms:Decrypt`、`kms:GenerateDataKey` 和 `kms:DescribeKey` 操作的权限。有关更多信息，请参阅[Amazon KMS 中的密钥策略](https://docs.amazonaws.cn/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)。