

# 静态加密
<a name="encryption"></a>

您可以在 Amazon Athena 中针对同一区域或有限数量的区域中 Amazon S3 中的加密数据运行查询。您还可以加密 Amazon S3 中的查询结果以及 AWS Glue Data Catalog 中的数据。

您可以对 Athena 中的以下资产进行加密：
+ Amazon S3 中所有查询的结果，Athena 将这些结果存储在称为 Amazon S3 结果位置的位置中。您可以加密在 Amazon S3 中存储的查询结果，无论底层数据集是否在 Amazon S3 中加密都是如此。有关信息，请参阅[加密在 Amazon S3 中存储的 Athena 查询结果](encrypting-query-results-stored-in-s3.md)。
+ AWS Glue 数据目录中的数据。有关信息，请参阅[针对 AWS Glue 数据目录中加密元数据的权限](#glue-encryption)。

**注意**  
使用 Athena 读取加密的表时，Athena 使用为表数据指定的加密选项，而不是查询结果的加密选项。如果为查询结果和表数据配置了单独的加密方法或密钥，Athena 将读取表数据，而不使用加密选项和用于加密或解密查询结果的密钥。  
但是，如果使用 Athena 将数据插入到具有加密数据的表中，则 Athena 将使用为查询结果指定的加密配置来加密插入的数据。例如，如果您为查询结果指定 `CSE_KMS` 加密，则 Athena 将使用与用于查询结果加密的相同 AWS KMS 密钥 ID，通过 `CSE_KMS` 对插入的表数据进行加密。

**Topics**
+ [支持的 Amazon S3 加密选项](#encryption-options-S3-and-Athena)
+ [Amazon S3 中加密数据的权限](#permissions-for-encrypting-and-decrypting-data)
+ [针对 AWS Glue 数据目录中加密元数据的权限](#glue-encryption)
+ [从 CSE-KMS 迁移到 SSE-KMS](migrating-csekms-ssekms.md)
+ [加密在 Amazon S3 中存储的 Athena 查询结果](encrypting-query-results-stored-in-s3.md)
+ [根据 Amazon S3 中的加密数据集创建表](creating-tables-based-on-encrypted-datasets-in-s3.md)

## 支持的 Amazon S3 加密选项
<a name="encryption-options-S3-and-Athena"></a>

Athena 支持 Amazon S3 中数据集和查询结果的以下加密选项。


| 加密类型 | 说明 | 跨区域支持 | 
| --- | --- | --- | 
| [SSE-S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) | 使用 Amazon S3 托管式密钥进行服务器端加密 (SSE)。 | 是 | 
| [SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)（推荐） | 使用 AWS Key Management Service 客户自主管理型密钥进行服务器端加密（SSE）。 | 是 | 
| [CSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro) |  使用 AWS KMS 客户管理的密钥进行客户端加密 (CSE)。在 Athena 中，此选项要求您使用带有 `TBLPROPERTIES` 子句的 `CREATE TABLE` 语句，指定 `'has_encrypted_data'='true'` 或 `'encryption_option'='CSE_KMS'` 及 `'kms_key'='kms_key_arn'`。有关更多信息，请参阅 [根据 Amazon S3 中的加密数据集创建表](creating-tables-based-on-encrypted-datasets-in-s3.md)。  | 否 | 

有关使用 Amazon S3 进行 AWS KMS 加密的更多信息，请参阅《AWS Key Management Service 开发人员指南**》中的 [什么是 AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 和 [Amazon Simple Storage Service (Amazon S3) 如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html)。有关使用 Athena 操作 SSE-KMS 或 CSE-KMS 的更多信息，请参阅 *AWS 大数据博客*的 [启动：Amazon Athena 增加了对查询加密数据的支持](https://aws.amazon.com/blogs/aws/launch-amazon-athena-adds-support-for-querying-encrypted-data/)。

### 加密建议
<a name="encryption-recommendation"></a>

使用客户自主管理型 KMS 密钥来加密和解密表数据以及查询结果时，我们建议您使用 SSE-KMS 加密方法，而不是 SSE-S3 或 CSE-KMS 加密方法。SSE-KMS 很好地平衡了控制力、简单性和性能，因此是在使用托管式 KMS 密钥进行数据加密时的推荐方法。

**SSE-KMS 相比 SSE-S3 的优势**
+ SSE-KMS 允许您指定和管理自己的密钥，从而让您拥有更大的控制力。您可以定义密钥策略、监督密钥生命周期和监控密钥使用情况。

**SSE-KMS 相比 CSE-KMS 的优势**
+ 与 CSE-KMS 需要持续维护 S3 加密客户端不同，SSE-KMS 无需额外的基础设施来加密和解密数据。
+ 由于加密算法的不断发展，CSE-KMS 可能会面临新旧 S3 加密客户端之间的兼容性问题，而 SSE-KMS 则避免了这一问题。
+ 与 CSE-KMS 相比，SSE-KMS 在加密和解密过程中对 KMS 服务进行密钥检索的 API 调用更少，因此性能更高。

### 不支持的选项
<a name="encryption-unsupported-options"></a>

不支持以下加密选项：
+ 客户提供密钥 SSE (SSE-C)。
+ 使用客户端托管式密钥进行客户端加密。
+ 非对称密钥。

若要比较 Amazon S3 加密选项，请参阅《Amazon Simple Storage Service 用户指南**》中的 [使用加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)。

### 客户端加密的工具
<a name="encryption-client-side-tools"></a>

 对于客户端加密，请注意有两种工具可用：
+ [Amazon S3 加密客户端](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3EncryptionClient.html) – 此操作工具仅加密 Amazon S3 的数据，并且受 Athena 支持。
+ [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) – 软件开发工具包可在 AWS 的任何地方加密数据但并不直接受 Athena 支持。

这两种工具不兼容，使用一种工具加密的数据不能用另一种工具解密。Athena 仅能直接支持 Amazon S3 加密客户端。如果您使用软件开发工具包对数据进行加密，则可以从 Athena 运行查询，但数据将作为加密文本返回。

如果要使用 Athena 查询已使用 AWS 加密软件开发工具包加密的数据，您必须下载并解密您的数据，然后使用 Amazon S3 加密客户端再次对其加密。

## Amazon S3 中加密数据的权限
<a name="permissions-for-encrypting-and-decrypting-data"></a>

根据在 Amazon S3 中使用的加密类型，可能需要向 Athena 中使用的策略添加权限（也称为“允许”操作）：
+ **SSE-S3** - 如果使用 SSE-S3 加密，则 Athena 用户无需在其策略中添加权限。对相应的 Amazon S3 位置和 Athena 操作具有适当的 Amazon S3 权限就足够了。要详细了解允许适当 Athena 和 Amazon S3 权限的策略，请参阅[Amazon Athena 的 AWS 托管策略](security-iam-awsmanpol.md)和 [控制从 Athena 对 Amazon S3 的访问](s3-permissions.md)。
+ **AWS KMS** - 如果使用 AWS KMS 加密，则除了 Athena 和 Amazon S3 权限之外，还必须允许 Athena 用户执行特定 AWS KMS 操作。您可以通过编辑用于加密 Amazon S3 中数据的客户自主管理型密钥的密钥策略来允许这些操作。要将密钥用户添加到相应的 AWS KMS 密钥策略，则可以使用 AWS KMS 控制台，网址：[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms)。有关如何将用户添加到 AWS KMS 密钥策略，请参阅《*AWS Key Management Service 开发人员指南*》中的[允许密钥用户使用客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)。
**注意**  
高级密钥策略管理员可以调整密钥策略。要处理加密数据集，最少应允许 Athena 用户执行 `kms:Decrypt` 操作。要使用加密的查询结果，则最小允许操作是 `kms:GenerateDataKey` 和 `kms:Decrypt`。

  使用 Athena 查询 Amazon S3 中数据集时，如果该数据集具有大量使用 AWS KMS 加密的对象，则 AWS KMS 可能会对查询结果进行节流。当有大量的小对象时，这种可能性更大。Athena 已停止重试请求，但可能仍会发生节流错误。如果您在处理大量加密对象时遇到此问题，则可以选择启用 Amazon S3 存储桶密钥来减少对 KMS 的调用次数。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南**》中的 [使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)。另一种选择是增加 AWS KMS 的服务配额。有关更多信息，请参阅《*AWS Key Management Service 开发人员指南*》中的[配额](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)。

有关将 Amazon S3 与 Athena 结合使用时的权限疑难解答信息，请参阅 [在 Athena 中进行排查问题](troubleshooting-athena.md) 主题的 [权限](troubleshooting-athena.md#troubleshooting-athena-permissions) 部分。

## 针对 AWS Glue 数据目录中加密元数据的权限
<a name="glue-encryption"></a>

如果[加密 AWS Glue Data Catalog 中的元数据](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)，则必须向用于访问 Athena 的策略添加 `"kms:GenerateDataKey"`、`"kms:Decrypt"` 和 `"kms:Encrypt"` 操作。有关信息，请参阅[从 Athena 配置对 AWS Glue Data Catalog 中加密元数据的访问](access-encrypted-data-glue-data-catalog.md)。