View a markdown version of this page

静态加密 - Amazon Athena

静态加密

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

您可以对 Athena 中的以下资产进行加密:

注意

使用 Athena 读取加密的表时,Athena 使用为表数据指定的加密选项,而不是查询结果的加密选项。如果为查询结果和表数据配置了单独的加密方法或密钥,Athena 将读取表数据,而不使用加密选项和用于加密或解密查询结果的密钥。

但是,如果使用 Athena 将数据插入到具有加密数据的表中,则 Athena 将使用为查询结果指定的加密配置来加密插入的数据。例如,如果您为查询结果指定 CSE_KMS 加密,则 Athena 将使用与用于查询结果加密的相同 AWS KMS 密钥 ID,通过 CSE_KMS 对插入的表数据进行加密。

支持的 Amazon S3 加密选项

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

加密类型 说明 跨区域支持
SSE-S3 使用 Amazon S3 托管式密钥进行服务器端加密 (SSE)。 是
SSE-KMS(推荐) 使用 AWS Key Management Service 客户自主管理型密钥进行服务器端加密(SSE)。 是
CSE-KMS

使用 AWS KMS 客户管理的密钥进行客户端加密 (CSE)。在 Athena 中,此选项要求您使用带有 TBLPROPERTIES 子句的 CREATE TABLE 语句,指定 'has_encrypted_data'='true' 或 'encryption_option'='CSE_KMS' 及 'kms_key'='kms_key_arn'。有关更多信息,请参阅 根据 Amazon S3 中的加密数据集创建表。

否

有关使用 Amazon S3 进行 AWS KMS 加密的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 什么是 AWS Key Management Service 和 Amazon Simple Storage Service (Amazon S3) 如何使用 AWS KMS。有关使用 Athena 操作 SSE-KMS 或 CSE-KMS 的更多信息,请参阅 AWS 大数据博客的 启动:Amazon Athena 增加了对查询加密数据的支持。

加密建议

使用客户自主管理型 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 调用更少,因此性能更高。

不支持的选项

不支持以下加密选项:

  • 客户提供密钥 SSE (SSE-C)。

  • 使用客户端托管式密钥进行客户端加密。

  • 非对称密钥。

若要比较 Amazon S3 加密选项,请参阅《Amazon Simple Storage Service 用户指南》中的 使用加密保护数据。

客户端加密的工具

对于客户端加密,请注意有两种工具可用:

  • Amazon S3 加密客户端 – 此操作工具仅加密 Amazon S3 的数据,并且受 Athena 支持。

  • AWS Encryption SDK – 软件开发工具包可在 AWS 的任何地方加密数据但并不直接受 Athena 支持。

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

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

Amazon S3 中加密数据的权限

根据在 Amazon S3 中使用的加密类型,可能需要向 Athena 中使用的策略添加权限(也称为“允许”操作):

  • SSE-S3 - 如果使用 SSE-S3 加密,则 Athena 用户无需在其策略中添加权限。对相应的 Amazon S3 位置和 Athena 操作具有适当的 Amazon S3 权限就足够了。要详细了解允许适当 Athena 和 Amazon S3 权限的策略,请参阅AWSAmazon Athena 的 托管策略和 控制从 Athena 对 Amazon S3 的访问。

  • AWS KMS - 如果使用 AWS KMS 加密,则除了 Athena 和 Amazon S3 权限之外,还必须允许 Athena 用户执行特定 AWS KMS 操作。您可以通过编辑用于加密 Amazon S3 中数据的客户自主管理型密钥的密钥策略来允许这些操作。要将密钥用户添加到相应的 AWS KMS 密钥策略,则可以使用 AWS KMS 控制台,网址:https://console.aws.amazon.com/kms。有关如何将用户添加到 AWS KMS 密钥策略,请参阅《AWS Key Management Service 开发人员指南》中的允许密钥用户使用客户自主管理型密钥。

    注意

    高级密钥策略管理员可以调整密钥策略。要处理加密数据集,最少应允许 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 的成本。另一种选择是增加 AWS KMS 的服务配额。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的配额。

有关将 Amazon S3 与 Athena 结合使用时的权限疑难解答信息,请参阅 在 Athena 中进行排查问题 主题的 权限 部分。

针对 AWS Glue 数据目录中加密元数据的权限

如果加密 AWS Glue Data Catalog 中的元数据,则必须向用于访问 Athena 的策略添加 "kms:GenerateDataKey"、"kms:Decrypt" 和 "kms:Encrypt" 操作。有关信息,请参阅从 Athena 配置对 AWS Glue Data Catalog 中加密元数据的访问。