托管查询结果
使用托管查询结果,您可以运行 SQL 查询,而无需提供用于存储查询结果的 Amazon S3 存储桶。这使您无需预置、管理、控制访问和清理自己的 S3 存储桶。首先,创建新的工作组或编辑现有工作组。在查询结果配置下,选择 Athena 托管。
主要特征
-
通过无需在运行查询之前选择 S3 存储桶位置来简化工作流。
-
使用托管查询结果无需额外费用,并且查询结果的自动删除可减少管理开销和单独的 S3 存储桶清理过程的需要。
-
简单易上手:可轻松配置新的和预先存在的工作组以使用托管查询结果。您可以在 AWS 账户中混合使用 Athena 托管查询结果和客户管理的查询结果。
-
简化了 IAM 权限,允许通过与各个工作组绑定的
GetQueryResults
和GetQueryResultsStream
访问读取结果。 -
查询结果将使用您选择的 AWS 拥有的密钥或客户拥有的密钥自动加密。
注意事项和限制
-
在 Athena 中,对查询结果的访问是在工作组级别进行管理的。为此,您需要对特定工作组的
GetQueryResults
和GetQueryResultsStream
IAM 操作具有显式权限。GetQueryResults
操作确定谁可以以分页格式检索已完成查询的结果,而GetQueryResultsStream
操作确定谁可以流式传输已完成查询的结果(通常由 Athena 驱动程序使用)。 您无法从控制台下载大于 200 MB 的查询结果文件。使用
UNLOAD
语句将大于 200 MB 的结果写入可单独下载的位置。-
托管查询结果功能不支持查询结果重用。
-
查询结果 24 小时内可用。在此期间,查询结果将免费存储。此期限过后,查询结果将被自动删除。
使用托管查询结果创建或编辑工作组
要从控制台创建工作组或使用托管查询结果更新现有工作组,请执行以下操作:
-
从 https://console.aws.amazon.com/athena/
打开 Athena 控制台。 从左侧导航中,选择工作组。
选择创建工作组以创建新的工作组或编辑列表中的现有工作组。
-
在查询结果配置下,选择 Athena 托管。
-
对于加密查询结果,选择所需的加密选项。有关更多信息,请参阅 选择查询结果加密。
-
填写所有其他必需的详细信息并选择保存更改。
选择查询结果加密
加密配置有两个选项:
-
使用 AWS 拥有的密钥加密 – 这是使用托管查询结果时的默认选项。如果希望查询结果由 AWS 拥有的密钥加密,请选择此选项。
-
使用客户自主管理型密钥加密 – 如果希望使用客户自主管理型密钥加密和解密查询结果,请选择此选项。要使用客户自主管理型密钥,请在密钥策略部分的 Principal 元素中添加 Athena 服务。有关更多信息,请参阅 为托管查询结果设置 AWS KMS 密钥策略。要成功运行查询,运行查询的用户需要访问 AWS KMS 密钥的权限。
为托管查询结果设置 AWS KMS 密钥策略
密钥策略的 Principal
部分指定了谁可以使用此密钥。托管查询结果功能引入了必须在 Principal
部分中指定的主体 encryption.athena.amazonaws.com
。此服务主体专门用于访问非 Athena 拥有的密钥。您还必须将 kms:Decrypt
、kms:GenerateDataKey
和 kms:DescribeKey
操作添加到用于访问托管结果的密钥策略中。这三个操作是最低允许的操作。
托管查询结果使用您的工作组 ARN 作为加密上下文。由于 Principal
部分是一项 AWS 服务,因此您还需要在密钥策略条件中添加 aws:sourceArn
和 aws: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:GenerateDataKey
和 kms:Decrypt
操作的权限。有关更多信息,请参阅 Amazon S3 中加密数据的权限。
有关托管查询结果加密的更多信息,请参阅加密托管查询结果。