在Athena 中,可以使用workgroup来分隔用户、团队、应用程序或工作负载,设置每个查询或整个工作组可以处理的数据量限制,并跟踪成本。由于工作组充当资源,因此可以使用IAM Policy来控制对特定工作组的访问。
在一开始我们为Primary workgroup
启用了 Cloudwatch 指标。现在让我们在 Athena 控制台中查看主要工作组的 Cloudwatch 指标。
从工作组列表中选择primary
:
点击“metrics”选项卡,我们将看到一些指标,包括:
Athena SQL 查询定价基于扫描的数据量。使用工作组,可以通过设置Query或workgroup能够扫描的最大数据量来强制查询的成本限制。我们先对工作组设置限制,然后使用新用户登录来测试。
在左侧菜单中找到并选择 “workgroup” 。然后点击 WorkgroupA 查看工作组详细信息:
在 “Data usage controls” 选项卡上单击 “Manage” 按钮:
将此工作组中任何查询扫描的最大数据设置为10 (MB),然后单击 “保存” 按钮:
在查询编辑器中切换到workgroupA
,分别运行以下查询:
/* This query will fail as it exceeds the 10 MB limit */
select * from customers_csv
/* This query will succeed as it only scans 9 MB of data */
select * from customers_parquet
第一个查询不会成功,并且会显示超出扫描字节数限制的错误。这是因为查询扫描的大小超过了我们为此工作组设置的 10 MB 限制:
第二个查询会成功,因为它仅扫描不到 10 MB 的数据:
如果我们想限制A用户访问athena的权限,让他只能在workgroupA下运行查询,则可以对Resource进行限制:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:Put*",
"s3:Get*",
"s3:List*",
"glue:*",
"cloudwatch:*",
"athena:ListNamedQueries",
"athena:ListWorkGroups",
"athena:GetExecutionEngine",
"athena:GetExecutionEngines",
"athena:GetNamespace",
"athena:GetCatalogs",
"athena:GetNamespaces",
"athena:GetTables",
"athena:GetTable"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"athena:StartQueryExecution",
"athena:GetQueryResults",
"athena:DeleteNamedQuery",
"athena:GetNamedQuery",
"athena:ListQueryExecutions",
"athena:StopQueryExecution",
"athena:GetQueryResultsStream",
"athena:ListNamedQueries",
"athena:CreateNamedQuery",
"athena:GetQueryExecution",
"athena:BatchGetNamedQuery",
"athena:BatchGetQueryExecution"
],
"Resource": [
"arn:aws:athena:us-east-1:145197526627:workgroup/workgroupA"
],
"Effect": "Allow"
},
{
"Action": [
"athena:DeleteWorkGroup",
"athena:UpdateWorkGroup",
"athena:GetWorkGroup",
"athena:CreateWorkGroup"
],
"Resource": [
"arn:aws:athena:us-east-1:145197526627:workgroup/workgroupA"
],
"Effect": "Allow"
}
]
}
上面的用户只有访问arn:aws:athena:us-east-1:145197526627:workgroup/workgroupA
的权限。在这跨团队、跨应用程序查询隔离方面都非常有帮忙