使用已启用 IAM Identity Center 的 Athena 工作组 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用已启用 IAM Identity Center 的 Athena 工作组

Amazon IAM Identity Center 的可信身份传播功能支持跨 Amazon 分析服务使用您的员工身份。可信身份传播使您无需执行特定于服务的身份提供商配置或 IAM 角色设置。

借助 IAM Identity Center,您可以管理员工身份(也称为员工用户)的登录安全性。您可以在 IAM Identity Center 中创建或连接员工用户,并集中管理他们对所有 Amazon 账户和应用程序的访问权限。您可以使用多账户权限为这些用户分配 Amazon Web Services 账户 的访问权限。您可以使用应用程序分配为用户分配对启用了 IAM Identity Center 的应用程序、云应用程序和客户安全断言标记语言(SAML 2.0)应用程序的访问权限。有关更多信息,请参阅《Amazon IAM Identity Center 用户指南》中的 Trusted identity propagation across applications

目前,Athena SQL 支持可信身份传播,允许您为 Amazon EMR Studio 和 EMR Studio 中的 Athena SQL 接口使用相同的身份。要在 EMR Studio 中将 IAM Identity Center 身份与 Athena SQL 一起使用,您必须在 Athena 中创建已启用 IAM Identity Center 的工作组。然后,您可以使用 IAM Identity Center 控制台或 API 将 IAM Identity Center 用户或组分配给已启用 IAM Identity Center 的 Athena 工作组。来自使用可信身份传播的 Athena 工作组的查询必须从已启用 IAM Identity Center 的 EMR Studio 中的 Athena SQL 接口运行。

注意事项和限制

在 Amazon Athena 中使用可信身份传播时,请考虑以下几点:

  • 创建工作组后,您无法更改工作组的身份验证方法。

    • 无法修改现有的 Athena SQL 工作组来支持启用 IAM Identity Center 的工作组。

    • 无法将启用 IAM Identity Center 的工作组修改为支持资源级 IAM 权限或基于身份的 IAM policy。

  • 要访问启用了可信身份传播的工作组,必须将 IAM Identity Center 用户分配给由 Athena GetWorkGroup API 操作的响应返回的 IdentityCenterApplicationArn

  • 必须将 Amazon S3 Access Grants 配置为使用可信身份传播身份。有关更多信息,请参阅《Amazon S3 用户指南》中的 S3 Access Grants and corporate directory identities

  • 启用 IAM Identity Center 的 Athena 工作组需要将 Lake Formation 配置为使用 IAM Identity Center 身份。有关配置信息,请参阅《Amazon Lake Formation 开发人员指南》中的 Integrating IAM Identity Center

  • 默认情况下,在使用可信身份传播的工作组中,查询会在 30 分钟后超时。您可以请求延长查询超时时间,不过在可信身份传播工作组中可以运行的最长查询时间为一个小时。

  • 可信身份传播工作组中的用户或组权限更改可能需要长达一个小时才能生效。

  • 使用可信身份传播的 Athena 工作组中的查询不能直接从 Athena 控制台运行。它们必须通过已启用 IAM Identity Center 的 EMR Studio 中的 Athena 接口运行。有关在 EMR Studio 中使用 Athena 的更多信息,请参阅《Amazon EMR 管理指南》中的 Use the Amazon Athena SQL editor in EMR Studio

  • 可信身份传播与以下 Athena 功能不兼容。

    • aws:CalledVia 上下文键。

    • Athena for Spark 工作组。

    • 对 Athena API 的联合访问

    • 使用 Lake Formation 以及 Athena JDBC 和 ODBC 驱动程序对 Athena 进行联合访问。

  • 您只能在以下 Amazon Web Services 区域 对 Athena 使用可信身份传播:

    • us-east-2 – 美国东部(俄亥俄州)

    • us-east-1 – 美国东部(弗吉尼亚州北部)

    • us-west-1 – 美国西部(北加利福尼亚)

    • us-west-2 – 美国西部(俄勒冈州)

    • af-south-1 – 非洲(开普敦)

    • ap-east-1 – 亚太地区(香港)

    • ap-southeast-3 – 亚太地区(雅加达)

    • ap-south-1 – 亚太地区(孟买)

    • ap-northeast-3 – 亚太地区(大阪)

    • ap-northeast-2 – 亚太地区(首尔)

    • ap-southeast-1 – 亚太地区(新加坡)

    • ap-southeast-2 – 亚太地区(悉尼)

    • ap-northeast-1 – 亚太地区(东京)

    • ca-central-1 – 加拿大(中部)

    • eu-central-1 – 欧洲地区(法兰克福)

    • eu-west-1 – 欧洲地区(爱尔兰)

    • eu-west-2 – 欧洲地区(伦敦)

    • eu-south-1 – 欧洲地区(米兰)

    • eu-west-3 – 欧洲地区(巴黎)

    • eu-north-1 – 欧洲地区(斯德哥尔摩)

    • me-south-1 – 中东(巴林)

    • sa-east-1 – 南美洲(圣保罗)

在 Athena 控制台中创建启用 IAM Identity Center 的工作组的管理员 IAM 用户必须附加以下策略。

  • AmazonAthenaFullAccess 托管策略。有关详细信息,请参阅Amazon 托管策略:AmazonAthenaFullAccess

  • 以下支持 IAM 和 AM Identity Center 操作的内联策略:

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "iam:createRole", "iam:CreatePolicy", "iam:AttachRolePolicy", "iam:ListRoles", "iam:PassRole", "identitystore:ListUsers", "identitystore:ListGroups", "identitystore:CreateUser", "identitystore:CreateGroup", "sso:ListInstances", "sso:CreateInstance", "sso:DeleteInstance", "sso:DescribeUser", "sso:DescribeGroup", "sso:ListTrustedTokenIssuers", "sso:DescribeTrustedTokenIssuer", "sso:ListApplicationAssignments", "sso:DescribeRegisteredRegions", "sso:GetManagedApplicationInstance", "sso:GetSharedSsoConfiguration", "sso:PutApplicationAssignmentConfiguration", "sso:CreateApplication", "sso:DeleteApplication", "sso:PutApplicationGrant", "sso:PutApplicationAuthenticationMethod", "sso:PutApplicationAccessScope", "sso:ListDirectoryAssociations", "sso:CreateApplicationAssignment", "sso:DeleteApplicationAssignment", "organizations:ListDelegatedAdministrators", "organizations:DescribeAccount", "organizations:DescribeOrganization", "organizations:CreateOrganization", "sso-directory:SearchUsers", "sso-directory:SearchGroups", "sso-directory:CreateUser" ], "Effect": "Allow", "Resource": [ "*" ] } ] }

创建启用 IAM Identity Center 的 Athena 工作组

以下过程介绍了创建启用 IAM Identity Center 的 Athena 工作组的相关步骤和选项。有关可用于 Athena 工作组的其他配置选项的说明,请参阅创建工作组

在 Athena 控制台中创建启用 SSO 的工作组
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 在 Athena 控制台导航窗格中,选择 Workgroups(工作组)。

  3. Workgroups(工作组)页面中,选择 Create workgroup(创建工作组)。

  4. 创建工作组页面上,在工作组名称中输入一个工作组的名称。

  5. 对于分析引擎,请使用 Athena SQL 默认项。

  6. 对于身份验证,请选择 IAM Identity Center

  7. IAM Identity Center 访问权限的服务角色中,选择一个现有服务角色或创建一个新的服务角色。

    Athena 需要相应权限才能访问 IAM Identity Center。Athena 需要服务角色才能执行此操作。服务角色是一个由您管理的 IAM 角色,它授权 Amazon 服务代表您访问其他 Amazon 服务。有关更多信息,请参阅 IAM 用户指南中的创建向Amazon服务委派权限的角色

  8. 展开查询结果配置,然后在查询结果的位置中输入或选择一个 Amazon S3 路径。

  9. (可选)选择加密查询结果

  10. (可选)选择创建基于用户身份的 S3 前缀

    创建启用 IAM Identity Center 的工作组时,默认选中启用 S3 Access Grants 选项。您可以使用 Amazon S3 Access Grants 来控制对 Amazon S3 中 Athena 查询结果位置(前缀)的访问权限。有关 Amazon S3 Access Grants 的更多信息,请参阅 Managing access with Amazon S3 Access Grants

    在使用 IAM Identity Center 身份验证的 Athena 工作组中,您可以创建基于身份的查询结果位置,这些位置由 Amazon S3 Access Grants 管理。这些基于用户身份的 Amazon S3 前缀可让 Athena 工作组中的用户将其查询结果与同一工作组中的其他用户隔离开来。

    启用用户前缀选项后,Athena 会将用户 ID 作为 Amazon S3 路径前缀附加到工作组的查询结果输出位置(例如 s3://amzn-s3-demo-bucket/${user_id})。要使用此功能,您必须对 Access Grants 进行配置,仅允许用户访问带有 user_id 前缀的位置。有关限制对 Athena 查询结果访问权限的 Amazon S3 Acess Grants 位置策略示例,请参阅 示例角色策略

    注意

    选择用户身份 S3 前缀选项会自动启用工作组的“覆盖客户端侧设置”选项,如下一步所述。“覆盖客户端侧设置”选项是用户身份前缀功能的一个必要条件。

  11. 展开设置,然后确认已选中覆盖客户端侧设置

    如果已选中覆盖客户端侧设置,则会在工作组级别对工作组中的所有客户端强制实施工作组设置。有关更多信息,请参阅 Override client-side settings (覆盖客户端设置)

  12. (可选)按照 创建工作组 中所述对所需的任何其他配置进行设置。

  13. 选择 Create workgroup (创建工作组)

  14. 参照 Athena 控制台的工作组部分,将 IAM Identity Center 目录中的用户或群组分配给已启用 IAM Identity Center 的 Athena 工作组。

以下示例显示了将角色附加到 Amazon S3 Access Grant 位置的策略,该位置限制了对 Athena 查询结果的访问。

{ "Statement": [{ "Action": ["s3:*"], "Condition": { "ArnNotEquals": { "s3:AccessGrantsInstanceArn": "arn:aws:s3:${region}:${account}:access-grants/default" }, "StringNotEquals": { "aws:ResourceAccount": "${account}" } }, "Effect": "Deny", "Resource": "*", "Sid": "ExplicitDenyS3" }, { "Action": ["kms:*"], "Effect": "Deny", "NotResource": "arn:aws:kms:${region}:${account}:key/${keyid}", "Sid": "ExplictDenyKMS" }, { "Action": ["s3:ListMultipartUploadParts", "s3:GetObject"], "Condition": { "ArnEquals": { "s3:AccessGrantsInstanceArn": "arn:aws:s3:${region}:${account}:access-grants/default" }, "StringEquals": { "aws:ResourceAccount": "${account}" } }, "Effect": "Allow", "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION/${identitystore:UserId}/*", "Sid": "ObjectLevelReadPermissions" }, { "Action": ["s3:PutObject", "s3:AbortMultipartUpload"], "Condition": { "ArnEquals": { "s3:AccessGrantsInstanceArn": "arn:aws:s3:${region}:${account}:access-grants/default" }, "StringEquals": { "aws:ResourceAccount": "${account}" } }, "Effect": "Allow", "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION/${identitystore:UserId}/*", "Sid": "ObjectLevelWritePermissions" }, { "Action": "s3:ListBucket", "Condition": { "ArnEquals": { "s3:AccessGrantsInstanceArn": "arn:aws:s3:${region}:${account}:access-grants/default" }, "StringEquals": { "aws:ResourceAccount": "${account}" }, "StringLikeIfExists": { "s3:prefix": ["${identitystore:UserId}", "${identitystore:UserId}/*"] } }, "Effect": "Allow", "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION", "Sid": "BucketLevelReadPermissions" }, { "Action": ["kms:GenerateDataKey", "kms:Decrypt"], "Effect": "Allow", "Resource": "arn:aws:kms:${region}:${account}:key/${keyid}", "Sid": "KMSPermissions" }], "Version": "2012-10-17" }