托管查询结果 - Amazon Athena

托管查询结果

使用托管查询结果,您可以运行 SQL 查询,而无需提供用于存储查询结果的 Amazon S3 存储桶。这使您无需预置、管理、控制访问和清理自己的 S3 存储桶。首先,创建新的工作组或编辑现有工作组。在查询结果配置下,选择 Athena 托管

主要特征
  • 通过无需在运行查询之前选择 S3 存储桶位置来简化工作流。

  • 使用托管查询结果无需额外费用,并且查询结果的自动删除可减少管理开销和单独的 S3 存储桶清理过程的需要。

  • 简单易上手:可轻松配置新的和预先存在的工作组以使用托管查询结果。您可以在 AWS 账户中混合使用 Athena 托管查询结果和客户管理的查询结果。

  • 简化了 IAM 权限,允许通过与各个工作组绑定的 GetQueryResultsGetQueryResultsStream 访问读取结果。

  • 查询结果将使用您选择的 AWS 拥有的密钥或客户拥有的密钥自动加密。

注意事项和限制

  • 在 Athena 中,对查询结果的访问是在工作组级别进行管理的。为此,您需要对特定工作组的 GetQueryResultsGetQueryResultsStream IAM 操作具有显式权限。GetQueryResults 操作确定谁可以以分页格式检索已完成查询的结果,而 GetQueryResultsStream 操作确定谁可以流式传输已完成查询的结果(通常由 Athena 驱动程序使用)。

  • 您无法从控制台下载大于 200 MB 的查询结果文件。使用 UNLOAD 语句将大于 200 MB 的结果写入可单独下载的位置。

  • 托管查询结果功能不支持查询结果重用

  • 查询结果 24 小时内可用。在此期间,查询结果将免费存储。此期限过后,查询结果将被自动删除。

使用托管查询结果创建或编辑工作组

要从控制台创建工作组或使用托管查询结果更新现有工作组,请执行以下操作:

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 从左侧导航中,选择工作组

  3. 选择创建工作组以创建新的工作组或编辑列表中的现有工作组。

  4. 查询结果配置下,选择 Athena 托管

    查询结果配置菜单。
  5. 对于加密查询结果,选择所需的加密选项。有关更多信息,请参阅 选择查询结果加密

  6. 填写所有其他必需的详细信息并选择保存更改

选择查询结果加密

加密配置有两个选项:

  • 使用 AWS 拥有的密钥加密 – 这是使用托管查询结果时的默认选项。如果希望查询结果由 AWS 拥有的密钥加密,请选择此选项。

  • 使用客户自主管理型密钥加密 – 如果希望使用客户自主管理型密钥加密和解密查询结果,请选择此选项。要使用客户自主管理型密钥,请在密钥策略部分的 Principal 元素中添加 Athena 服务。有关更多信息,请参阅 为托管查询结果设置 AWS KMS 密钥策略。要成功运行查询,运行查询的用户需要访问 AWS KMS 密钥的权限。

为托管查询结果设置 AWS KMS 密钥策略

密钥策略的 Principal 部分指定了谁可以使用此密钥。托管查询结果功能引入了必须在 Principal 部分中指定的主体 encryption.athena.amazonaws.com。此服务主体专门用于访问非 Athena 拥有的密钥。您还必须将 kms:Decryptkms:GenerateDataKeykms:DescribeKey 操作添加到用于访问托管结果的密钥策略中。这三个操作是最低允许的操作。

托管查询结果使用您的工作组 ARN 作为加密上下文。由于 Principal 部分是一项 AWS 服务,因此您还需要在密钥策略条件中添加 aws:sourceArnaws:sourceAccount。以下示例显示了对单个工作组具有最低权限的 AWS KMS 密钥策略。

{ "Sid": "Allow athena service principal to use the key", "Effect": "Allow", "Principal": { "Service": "encryption.athena.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:{account-id}:key/{key-id}", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}", "aws:SourceArn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}" }, "StringEquals": { "aws:SourceAccount": "{account-id}" } }

以下示例 AWS KMS 密钥策略允许同一账户 account-id 内的所有工作组使用相同的 AWS KMS 密钥。

{ "Sid": "Allow athena service principal to use the key", "Effect": "Allow", "Principal": { "Service": "encryption.athena.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:account-id:key/{key-id}", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:account-id:workgroup/*", "aws:SourceArn": "arn:aws:athena:us-east-1:account-id:workgroup/*" }, "StringEquals": { "aws:SourceAccount": "account-id" } } }

除了 Athena 和 Amazon S3 权限外,您还必须获得执行 kms:GenerateDataKeykms:Decrypt 操作的权限。有关更多信息,请参阅 Amazon S3 中加密数据的权限

有关托管查询结果加密的更多信息,请参阅加密托管查询结果