Workgroup

在Athena 中,可以使用workgroup来分隔用户、团队、应用程序或工作负载,设置每个查询或整个工作组可以处理的数据量限制,并跟踪成本。由于工作组充当资源,因此可以使用IAM Policy来控制对特定工作组的访问。

查看Cloudwatch 指标

在一开始我们为Primary workgroup启用了 Cloudwatch 指标。现在让我们在 Athena 控制台中查看主要工作组的 Cloudwatch 指标。

从工作组列表中选择primary

image-20231130101823257

点击“metrics”选项卡,我们将看到一些指标,包括:

  • 扫描的总数据
  • 成功查询总数
  • 失败查询总数
  • 总执行时间

image-20231130101926175

进行成本限制

Athena SQL 查询定价基于扫描的数据量。使用工作组,可以通过设置Query或workgroup能够扫描的最大数据量来强制查询的成本限制。我们先对工作组设置限制,然后使用新用户登录来测试。

设置Workgroup可以扫描的最大数据量

在左侧菜单中找到并选择 “workgroup” 。然后点击 WorkgroupA 查看工作组详细信息:

image-20231130102140160

“Data usage controls” 选项卡上单击 “Manage” 按钮: image-20231130102217231

将此工作组中任何查询扫描的最大数据设置为10 (MB),然后单击 “保存” 按钮:

image-20231130102252000

测试Workgroup限制

在查询编辑器中切换到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 限制:

image-20231130102625203

第二个查询会成功,因为它仅扫描不到 10 MB 的数据:

image-20231130102659670

使用Workgroup进行权限控制

如果我们想限制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的权限。在这跨团队、跨应用程序查询隔离方面都非常有帮忙