

# 将 Athena 连接到 IAM Identity Center
<a name="using-trusted-identity-propagation-setup"></a>

以下章节介绍了将 Athena 连接到 IAM Identity Center 的过程。

## 设置可信令牌发布者
<a name="using-trusted-identity-propagation-step1"></a>

按照[设置可信令牌发布者](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)指南来设置可信令牌发布者。此操作将创建 Amazon IAM Identity Center。

**注意**  
对于**提供者类型**，选择 **OpenID Connect**。对于**提供者 URL**，请输入您身份提供者的发布者 URL。对于**受众**，请指定身份提供者为您的应用程序发布的客户端 ID。  
 

复制 Amazon IAM 身份提供者的应用程序资源名称（ARN）。有关更多信息，请参阅[身份提供者和联合身份验证](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_providers.html)。

## 设置 IAM 角色
<a name="using-trusted-identity-propagation-step2"></a>

### 设置 IAM 应用程序角色
<a name="using-trusted-identity-propagation-step2-application-role"></a>

1. 通过 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 打开 IAM 控制台。

1. 在左侧的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 对于**可信实体类型**，选择**自定义信任策略**，如下所示：

   1. 对于**联合主体**，添加您在设置可信令牌发布者期间复制的 Amazon IAM 身份提供者 ARN。

   1. 对于策略条件，添加来自外部联合身份提供者的受众。

1. 添加以下内联策略，向用户授予 [CreateTokenWithIAM](https://docs.amazonaws.cn/singlesignon/latest/OIDCAPIReference/API_CreateTokenWithIAM.html)、[ListTagsForResource](https://docs.amazonaws.cn/athena/latest/APIReference/API_ListTagsForResource.html) 和 [AssumeRoleWithWebIdentity](https://docs.amazonaws.cn/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) 权限。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:ListTags*",
                   "sso:ListTags*"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**注意**  
`CreateTokenWithIam` 权限是在客户管理的 IAM Identity Center 应用程序中授予的。

1. 复制应用程序角色 ARN。

### 设置 IAM 访问角色
<a name="using-trusted-identity-propagation-step2-access-role"></a>

1. 通过 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 打开 IAM 控制台。

1. 在左侧的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 对于**可信实体类型**，选择**自定义信任策略**，如下所示：

   1. 对于**联合主体**，添加在可信令牌发行者设置期间复制的 Amazon IAM Identity Center ARN。

   1. 对于 **Amazon 主体**，添加在 IAM 应用程序角色设置期间复制的 Amazon IAM 应用程序角色 ARN。

1. 添加以下**内联策略**以授予对驱动程序工作流程的访问权限：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:StartQueryExecution",
                   "athena:GetQueryExecution",
                   "athena:GetQueryResults",
                   "athena:ListWorkGroups",
                   "athena:ListDataCatalogs",
                   "athena:ListDatabases",
                   "athena:ListTableMetadata"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "glue:CreateTable",
                   "glue:GetTable",
                   "glue:GetTables",
                   "glue:UpdateTable",
                   "glue:DeleteTable",
                   "glue:BatchDeleteTable",
                   "glue:GetTableVersion",
                   "glue:GetTableVersions",
                   "glue:DeleteTableVersion",
                   "glue:BatchDeleteTableVersion",
                   "glue:CreatePartition",
                   "glue:BatchCreatePartition",
                   "glue:GetPartition",
                   "glue:GetPartitions",
                   "glue:BatchGetPartition",
                   "glue:UpdatePartition",
                   "glue:DeletePartition",
                   "glue:BatchDeletePartition"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 复制访问角色的 ARN。

## 配置 Amazon IAM Identity Center 客户托管的应用程序
<a name="using-trusted-identity-propagation-step3"></a>

要配置客户管理型应用程序，请按照 [Set up customer managed OAuth 2.0 applications for trusted identity propagation](https://docs.amazonaws.cn/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html) 中的步骤，并注意以下 Athena 事项。
+ 对于**标签**，添加以下键值对：
  + **键**：**AthenaDriverOidcAppArn**
  + **值**：在 IAM 访问角色设置期间复制的 **AccessroLearn**。
+ [指定应用程序凭证](https://docs.amazonaws.cn/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html#customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2-specify-application-credentials)时，添加您在 IAM 应用程序角色设置期间复制的 Amazon IAM 应用程序角色 ARN。
+ 对于**可以接收请求的应用程序**，选择 **AWS-Lake-Formation-AWS-Glue-Data-Catalog-<account-id>**。
+ 对**要应用的访问范围**，选择 **lakeformation:query** 用于启用 IAM 的工作组，或者选择 **lakeformation:query**、**athena:workgroup:read\_write** 和 **s3:access\_grants:read\_write** 用于启用 Identity Center 的工作组。

## 配置工作组关联
<a name="using-trusted-identity-propagation-step4"></a>

1. 在 Athena 控制台导航窗格中，选择 **Workgroups**（工作组）。

1. 从列表中选择一个工作组，然后打开**标签**选项卡。

1. 选择**管理标签**并输入以下内容：

   1. **密钥** – `AthenaDriverOidcAppArn`

   1. **值**：Amazon IAM Identity Center 应用程序的 ARN。

1. 选择**保存**。

管理员完成一次性设置后，他们可以向其用户分发基本的连接详细信息。用户需要以下五个必填参数才能运行 SQL 工作负载：

1. **ApplicationRoleARN**：应用程序角色 ARN

1. **JwtWebIdentityToken**:用于身份验证的 JWT 令牌

1. **WorkgroupARN**：Athena 工作组的 ARN

1. **JwtRoleSessionName**：JWT 角色的会话名称

1. **CredentialsProvider**：凭证提供者配置

**注意**  
我们通过策略式标记简化了连接字符串的配置。通过正确标记 Athena 工作组和 Amazon IAM Identity Center 客户管理的应用程序，管理员无需用户提供 `AccessRoleArn` 和 `CustomerIdcApplicationArn`。该插件会使用应用程序角色查找必要的标签并为其工作流程检索相应的 ARN 值来自动处理此问题。  
管理员仍然可以根据需要调整应用程序角色权限，让用户在连接字符串中提供 `AccessRoleArn` 或 `CustomerIdcApplicationArn`。

## 使用启用了可信身份传播功能的 Athena 驱动程序运行查询
<a name="using-trusted-identity-propagation-step5"></a>

下载要使用的驱动程序的最新版。有关 JDBC 安装的更多信息，请参阅[开始使用 JDBC 3.x 驱动程序](jdbc-v3-driver-getting-started.md)。您可以选择基于支持的平台安装 ODBC 驱动程序。有关更多信息，请参阅 [开始使用 ODBC 2.x 驱动程序](odbc-v2-driver-getting-started.md)。根据您要使用的驱动程序，提供以下文章中列出的参数：
+ [JDBC 身份验证插件连接参数](jdbc-v3-driver-jwt-tip-credentials.md)
+ [ODBC 身份验证插件连接参数](odbc-v2-driver-jwt-tip.md)

**注意**  
只有 JDBC 3.6.0 及更高版和 ODBC 2.0.5.0 及更高版，才支持将可信身份传播与驱动程序结合使用。

## 将 Athena 驱动程序和可信身份传播与 DBeaver 结合使用
<a name="using-trusted-identity-propagation-step6"></a>

1. 从 Athena 下载带有依赖关系的最新 JDBC jar。有关更多信息，请参阅 [Athena JDBC 3.x 驱动程序](jdbc-v3-driver.md)。

1. 在计算机上打开 DBeaver 应用程序。

1. 导航到屏幕顶部的**数据库**菜单，然后选择**驱动程序管理器**。

1. 选择**新建**，然后选择**库**。

1. 添加最新的驱动程序并选择**查找类**。此时系统会给你一个类似 `com.amazon.athena.jdbc.AthenaDriver` 的文件路径。

1. 打开**设置**选项卡，并填写以下字段

   1. **驱动程序名称**：Athena JDBC 可信身份传播

   1. **类名称**：`com.amazon.athena.jdbc.AthenaDriver`

   1. 选择**不进行身份验证**选项。

1. 选择**连接到数据库**，然后找到 Athena JDBC 可信身份传播。这会将您导向至 JDBC URL。有关更多信息，请参阅 [配置驱动程序](jdbc-v3-driver-getting-started.md#jdbc-v3-driver-configuring-the-driver)。

1. 提供以下详细信息

   1. **Workgroup**：您要在其中运行查询的工作组。有关工作组的信息，请参阅 [WorkGroup](https://docs.amazonaws.cn/athena/latest/APIReference/API_WorkGroup.html)。

   1. **Region**：将在其中运行查询的 Amazon Web Services 区域。有关区域列表，请参阅 [Amazon Athena endpoints and quotas](https://docs.amazonaws.cn/general/latest/gr/athena.html)。

   1. **OutputLocation**：用于存储查询结果的 Amazon S3 位置。有关输出位置的信息，请参阅 [ResultConfiguration](https://docs.amazonaws.cn/athena/latest/APIReference/API_ResultConfiguration.html)。

   1. **CredentialsProvider**：输入 `JWT_TIP`。

   1. **ApplicationRoleArn**：用于启用 `AssumeRoleWithWebIdentity` 的角色 ARN。有关 ARN 角色的更多信息，请参阅 Amazon Security Token Service API Reference 中的 [AssumeRole](https://docs.amazonaws.cn/STS/latest/APIReference/API_AssumeRole.html)。

   1. **WorkgroupArn**：将在其中运行查询的工作组 ARN。它必须与 **Workgroup** 字段中提供的工作组一致。有关工作组的信息，请参阅 [WorkGroup](https://docs.amazonaws.cn/athena/latest/APIReference/API_WorkGroup.html)。

   1. **JwtRoleSessionName**：使用 JWT 凭证进行身份验证时的会话名称。它可以是您选择的任何名称。

   1. **JwtWebIdentityToken**：从外部联合身份提供者处获得的 JWT 令牌。此令牌用于向 Athena 进行身份验证。

      ```
      jdbc:athena://Workgroup={{<value>}};Region={{<region>}};OutputLocation={{<location>}};CredentialsProvider=JWT_TIP;ApplicationRoleArn={{<arn>}};WorkgroupArn={{<arn>}};JwtRoleSessionName=JDBC_TIP_SESSION;JwtWebIdentityToken={{<token>}};
      ```

1. 选择**确定**关闭窗口。完成此步骤后，DBeaver 将开始加载您的元数据，您应该会开始看到目录、数据库和表被填充。
**注意**  
如果令牌中存在 JTI 声明，并且您在选择**确定**前选择了**测试连接**，则系统会阻止相同的 JTI 被重复用于令牌交换。有关更多信息，请参阅 [Prerequisites and considerations for trusted token issuers](https://docs.amazonaws.cn/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#trusted-token-issuer-prerequisites)。为了处理这个问题，JDBC 实现了内存缓存，内存缓存的生命周期取决于主驱动程序实例。对于 ODBC，可以选择使用[文件缓存](odbc-v2-driver-jwt-tip.md#odbc-v2-driver-jwt-tip-file-cache)，此功能允许缓存和重复使用临时凭证，以减少会话生命周期中使用的 Web 身份令牌数量。

1. 打开 **SQL 查询编辑器**并开始运行查询。要验证用户的传播身份，请参阅 [Cloudtrail logs](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。