使用 AWS IAM Identity Center 进行对 Amazon Athena 的联合访问

关键要点

本文介绍了如何通过 AWS IAM Identity Center 实现对 Amazon Athena 的联合访问。使用 Athena JDBC 驱动程序以及身份联邦功能,能够快速实施多因素认证 (MFA) 和数据访问政策的自动化管理。本文还提供了设置的详细步骤,包括创建权限集以及在 SQL 客户端中配置 JDBC 连接。

通过身份联合管理 Amazon Athena,使得身份验证和授权流程可以集中管理。Athena 是一项无服务器的交互式分析服务,为分析数据提供了简化且灵活的方式。

在本文中,我们展示了如何使用包含浏览器 SAML 插件的 Athena JDBC 驱动程序,通过第三方 SQL 客户端工具连接到 Athena,从而快速实现身份联合功能和 多因素认证 (MFA)。这能够在整个组织中实现数据访问政策的自动化和强制执行。

使用 AWS IAM Identity Center 可以将用户的访问联合到 AWS 账户。IAM Identity Center 与 AWS Organizations 集成,以管理属于您组织的 AWS 账户的访问。在本文中,您将学习如何配置 Athena 驱动程序以使用 AWS 配置文件凭证。这将允许您从 IAM Identity Center 获取凭证,并使用您联合身份提供者IdP的 MFA 功能。

前提条件

要实现此解决方案,您需要以下前提条件:

使用 AWS IAM 身份中心对 Amazon Athena 进行联邦访问 安全博客条件描述一个 AWS 账户。安装或更新到最新版本的 AWS 命令行接口 (AWS CLI)。使用 AWS CLI 配置 IAM Identity Center 身份验证。启用 IAM Identity Center,详见 启用 AWS IAM Identity Center。访问支持 JDBC 连接的 SQL 客户端工具如 SQL Workbench/J、Pycharm 等。一个 Amazon Simple Storage Service (Amazon S3) 桶用于存储 Athena 查询 结果。了解使用 AWS Lake Formation 并启用 Lake Formation 来管理一组表的权限。拥有 Lake Formation 管理员角色,详见 Lake Formation 人物和 IAM 权限参考。在您的 AWS Glue 数据目录 中填充表和数据库。创建两个 Athena 工作组 例如,敏感和非敏感。

注意 Lake Formation 只支持 SAML 断言中的单个角色,无法使用多个角色。

解决方案概述

要实现此解决方案,请按照以下步骤操作,如上图所示:

IAM Identity Center 委派管理员在 Identity Center 中创建两个 自定义权限集。IAM Identity Center 委派管理员将权限集分配给 AWS 账户和用户及组。用户具有在数据湖账户中配置的单点登录角色的权限。由 Identity Center 创建的角色名称以 AWSReservedSSO 开头。Lake Formation 管理员将 单点登录 角色的权限授予相应的数据库和表。

解决方案的工作流程包括以下高层步骤,如上图所示:

用户使用 AWS CLI 配置 IAM Identity Center 身份验证。AWS CLI 将用户重定向到 AWS 访问门户 URL。用户输入工作单位的身份凭证用户名和密码,然后选择 登录。AWS 访问门户验证用户的身份。IAM Identity Center 将请求重定向到身份验证服务以验证用户的凭证。如果为用户启用 MFA,则会提示用户进行 MFA 设备身份验证。用户输入或批准 MFA 详细信息,MFA 验证成功完成。用户从显示的列表中选择要使用的 AWS 账户,然后从显示的列表中选择要使用的 IAM 单点登录角色。用户测试 SQL 客户端连接,然后使用客户端运行 SQL 查询。客户端向 Athena 发起调用以从数据目录检索表及相关元数据。Athena 请求 Lake Formation 对数据的访问。Lake Formation 调用 AWS 安全令牌服务 (AWS STS)。Lake Formation 调用 AWS STS。Lake Formation 使用与数据湖位置关联的定义 IAM 角色敏感或非敏感的权限获取临时 AWS 凭证。Lake Formation 将临时凭证返回给 Athena。Athena 使用临时凭证从 Amazon S3 检索数据对象。Athena 引擎成功运行查询并将结果返回给客户端。

解决方案实施

实施过程包括五个部分,指导您创建权限集、将权限集分配给 AWS 账户、使用 Lake Formation 管理权限集访问,以及设置第三方 SQL 客户端如 SQL Workbench连接到您的数据存储并通过 Athena 查询数据。

第一步:联合入职

联合入职在 IAM Identity Center 账户中进行。作为联合入职的一部分,您需要创建 IAM Identity Center 用户和组。组是具有相同安全权限的一群人。您可以创建组并将用户添加到组。为敏感数据创建一个 IAM Identity Center 组,为非敏感数据创建另一个,以便为不同类别的数据集提供不同的访问权限。您可以将 IAM Identity Center 权限集访问分配给用户或组。

实现联合入职的步骤:

使用 IAM Identity Center 账户打开 AWS 管理控制台,转到 IAM Identity Center。选择 组。选择 创建组。输入 组名称 和 描述。选择 创建组。

将用户添加为组成员的步骤:

迅猛兔加速器app官网打开 IAM Identity Center 控制台。选择 组。选择您要更新的 组名称。在组详细信息页面上,选择 将用户添加到组。在 将用户添加到组 页面上,在 其他用户 下,找到您要添加为成员的用户并选中每个用户旁边的复选框。选择 将用户添加到组。

第二步:创建权限集

在此步骤中,创建两个权限集sensitiveiamrole 和 nonsensitiveiamrole。这些权限集可以分配给 IAM Identity Center 的用户或组,从而授予他们对 AWS 账户资源的特定访问权限。

创建自定义权限集的步骤:

在 IAM Identity Center 管理员账户中,选择 多账户权限 下的 权限集。选择 创建权限集。在 选择权限集类型 页面,选择 自定义权限集。

选择 下一步。在 指定策略和权限边界 页面,展开 内联策略,添加自定义 JSON 格式的策略文本。插入以下策略并更新 S3 桶名称lts3bucketnamegt、AWS 区域ltregiongt、账户 IDltaccountidgt、CloudWatch 报警名称ltAlarmNamegt、Athena 工作组名称敏感或非敏感ltWorkGroupNamegt、KMS 密钥别名ltKMSkeyaliasnamegt、及组织 IDltawsPrincipalOrgIDgt。

json { Statement [ { Action [ lakeformationSearchTablesByLFTags lakeformationSearchDatabasesByLFTags lakeformationListLFTags lakeformationGetResourceLFTags lakeformationGetLFTag lakeformationGetDataAccess glueSearchTables glueGetTables glueGetTable glueGetPartitions glueGetDatabases glueGetDatabase ] Effect Allow Resource Sid LakeformationAccess } { Action [ s3PutObject s3ListMultipartUploadParts s3ListBucketMultipartUploads s3ListBucket s3GetObject s3GetBucketLocation s3CreateBucket s3AbortMultipartUpload ] Effect Allow Resource [ arnawss3lts3bucketnamegt/ arnawss3lts3bucketnamegt ] Sid S3Access } { Action s3ListAllMyBuckets Effect Allow Resource Sid AthenaS3ListAllBucket } { Action [ cloudwatchPutMetricAlarm cloudwatchDescribeAlarms ] Effect Allow Resource [ arnawscloudwatchltregiongtltaccountidgtalarmltAlarmNamegt ] Sid CloudWatchLogs } { Action [ athenaUpdatePreparedStatement athenaStopQueryExecution athenaStartQueryExecution athenaListWorkGroups athenaListTableMetadata athenaListQueryExecutions athenaListPreparedStatements athenaListNamedQueries athenaListEngineVersions athenaListDatabases athenaListDataCatalogs athenaGetWorkGroup athenaGetTableMetadata athenaGetQueryResultsStream athenaGetQueryResults athenaGetQueryExecution athenaGetPreparedStatement athenaGetNamedQuery athenaGetDatabase athenaGetDataCatalog athenaDeletePreparedStatement athenaDeleteNamedQuery athenaCreatePreparedStatement athenaCreateNamedQuery athenaBatchGetQueryExecution athenaBatchGetNamedQuery ] Effect Allow Resource [ arnawsathenaltregiongtltaccountidgtworkgroup/ltWorkGroupNamegt arnawsathena{Region}{Account}datacatalog/{DataCatalogName} ] Sid AthenaAllow } { Action [ kmsGenerateDataKey kmsDescribeKey kmsDecrypt ] Condition { ForAnyValueStringLike { kmsResourceAliases ltKMSkeyaliasnamegt } } Effect Allow Resource Sid kms } { Action Condition { StringNotEquals { awsPrincipalOrgID ltawsPrincipalOrgIDgt } } Effect Deny Resource Sid denyRule } ] Version 20121017 }

更新自定义策略以添加对应敏感和非敏感 IAM 角色的 Athena 工作组 ARN。

注意 有关 AWS 全局条件上下文键 的信息,请参见文档。

选择 下一步。在 指定权限集详细信息 页面中,输入一个名称以识别此权限集,该名称将在 AWS 访问门户中作为可用角色出现。用户登录 AWS 访问门户,选择 AWS 账户,然后选择角色。选择 下一步。在 审核和创建 页面上,审核所做的选择,然后选择 创建。

第三步:将权限集分配给 AWS 账户

您可以通过附加和分离权限集为 IAM 用户或组添加和移除权限集。权限集定义身份可以对哪些 AWS 资源执行什么操作。

将权限集分配给 AWS 账户的步骤:

在 IAM Identity Center 管理员账户中,选择 多账户权限 下的 AWS 账户。在 AWS 账户 页面上,选择一个或多个您希望分配单点登录访问权限的 AWS 账户。选择 分配用户或组。

在 分配用户和组到“” 页面中,对于 所选用户和组,选择您想为之创建权限集的用户,然后选择 下一步。在 将权限集分配给“AWS 账户名称” 页面上,选择一个或多个权限集。在 审核和提交分配给 AWS 账户名称 页面上,选择 提交。

第四步:授予 IAM单点登录角色权限

数据湖管理员具有广泛的能力,可以向数据目录资源授予权限,包括管理数据湖的访问控制和权限。当您在特定数据目录表上授予 Lake Formation 权限时,还可以包含数据过滤规范。这样可以进一步限制用户根据这些过滤规则在查询结果中看到哪些数据。

向 IAM 角色授予权限的步骤:

在 Lake Formation 控制台中,导航到 权限 下的 数据湖权限,然后选择 授予。

向 IAM 角色授予数据库权限的步骤:

在 主体 中,选择 IAM 角色名称例如,SensitiveIAMRole。在 已命名的数据目录资源 下,转到 数据库 并选择一个数据库例如,demo。

在 数据库权限 下,选择 描述,然后选择 授予。

向 IAM 角色授予表权限的步骤:

重复前一过程的步骤 1 和 2。在 表格 可选 下,选择一个表名称例如,demo2。

选择所需的 表权限例如,选择和描述,然后选择 授予。

对于非敏感 IAM 角色,重复步骤 1 到 4 授予相应数据库和表的访问权限。

第五步:使用 JDBC 进行客户端设置

您可以使用 JDBC 连接将 Athena 和 SQL 客户端应用

订阅邮箱