

# 使用 ODBC 客户端为 Microsoft AD FS 用户配置对 Amazon Athena 的联合访问权限
<a name="odbc-adfs-saml"></a>

要使用 ODBC 客户端为 Microsoft Active Directory 联合身份验证服务（AD FS）用户设置对 Amazon Athena 的联合访问权限，您首先要在 AD FS 和 AWS 账户之间建立信任。获得信任后，您的 AD 用户便可使用其 AD 凭证对 AWS 进行[联合身份验证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html#CreatingSAML-configuring-IdP)，并担任 [AWS Identity and Access Management](https://aws.amazon.com/iam/)（IAM）角色权限以访问 Athena API 等 AWS 资源。

要创建这种信任，您需要将 AD FS 作为 SAML 提供商添加到 AWS 账户 中，并创建可供联合用户担任的 IAM 角色。在 AD FS 端，您可以将 AWS 添加为依赖方并编写 SAML 声明规则，以便将正确的用户属性发送到 AWS 进行授权（尤其是 Athena 和 Amazon S3）。

配置 AD FS 对 Athena 的访问权限涉及以下主要步骤：

[1. 设置 IAM SAML 提供商和角色](#odbc-adfs-saml-setting-up-an-iam-saml-provider-and-role)

[2. 配置 AD FS](#odbc-adfs-saml-configuring-ad-fs)

[3. 创建 Active Directory 用户和组](#odbc-adfs-saml-creating-active-directory-users-and-groups)

[4. 配置 AD FS ODBC 与 Athena 的连接](#odbc-adfs-saml-configuring-the-ad-fs-odbc-connection-to-athena)

## 1. 设置 IAM SAML 提供商和角色
<a name="odbc-adfs-saml-setting-up-an-iam-saml-provider-and-role"></a>

在本节中，您需要将 AD FS 作为 SAML 提供商添加到 AWS 账户中，并创建可供联合用户担任的 IAM 角色。

**设置 SAML 提供商**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择 **Identity providers**（身份提供程序）。

1. 选择**添加提供程序**。

1. 对于 **Provider type**（提供程序类型），选择 **SAML**。  
![\[选择 SAML。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-1.png)

1. 对于 **Provider name**（提供程序名称），输入 **adfs-saml-provider**。

1. 在浏览器中，输入以下地址以下载适用于 AD FS 服务器的联合身份验证 XML 文件。要执行此步骤，您的浏览器必须具有访问 AD FS 服务器的权限。

   ```
   https://adfs-server-name/federationmetadata/2007-06/federationmetadata.xml       
   ```

1. 在 IAM 控制台中，对于 **Metadata document**（元数据文档），选择 **Choose file**（选择文件），然后将联合身份验证元数据文件上传到 AWS。

1. 要完成操作，请选择 **Add provider**（添加提供商）。

接下来，创建联合用户可担任的 IAM 角色。

**为联合用户创建 IAM 角色**

1. 请在 IAM 控制台的导航窗格中，选择 **Roles**（角色）。

1. 选择**创建角色**。

1. 对于 **Trusted entity type**（受信任的实体类型），选择 **SAML 2.0 Federation**（SAML 2.0 联合身份验证）。

1. 对于 **SAML 2.0-based provider**（基于 SAML 2.0 的提供商），选择您创建的 **adfs-saml-provider** 提供商。

1. 选择**允许编程访问和 AWS 管理控制台访问**，然后选择**下一步**。  
![\[选择 SAML 作为受信任的实体类型。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-2.png)

1. 在 **Add permissions**（添加权限）页面上，筛选此角色所需的 IAM 权限策略，然后选中相应的复选框。本教程附加了 `AmazonAthenaFullAccess` 和 `AmazonS3FullAccess` 策略。  
![\[为角色附加 Athena 完全访问策略。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-3.png)  
![\[为角色附加 Amazon S3 完全访问策略。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-4.png)

1. 选择**下一步**。

1. 在 **Name, review, and create**（名称、审核和创建）页面中，在 **Role name**（角色名称）中输入角色的名称。本教程使用的名称为 **adfs-data-access**。

   在 **Step 1: Select trusted entities**（步骤 1：选择受信任实体）中，**Principal**（主体）字段应自动填充为 `"Federated:" "arn:aws:iam::account_id:saml-provider/adfs-saml-provider"`。`Condition` 字段应包含 `"SAML:aud"` 和 `"https://signin.aws.amazon.com/saml"`。  
![\[受信任实体 JSON。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-5.png)

   **Step 2: Add permissions**（步骤 2：添加权限）将显示已附加到该角色的策略。  
![\[附加到角色的策略列表。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-6.png)

1. 选择**创建角色**。横幅消息会确认角色是否创建。

1. 在 **Roles**（角色）页面上，选择您刚刚创建的角色名称。该角色的摘要页面会显示已附加的策略。  
![\[角色的摘要页面。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-7.png)

## 2. 配置 AD FS
<a name="odbc-adfs-saml-configuring-ad-fs"></a>

现在，您可以将 AWS 添加为依赖方并编写 SAML 声明规则，以便将正确的用户属性发送到 AWS 进行授权。

基于 SAML 的联合身份验证有两个参与方：IdP（Active Directory）和依赖方（AWS），后者是使用来自 IdP 的身份验证的服务或应用程序。

要配置 AD FS，请先添加依赖方信任，然后为依赖方配置 SAML 声明规则。AD FS 通过声明规则形成发送给依赖方的 SAML 断言。SAML 断言表明有关 AD 用户的信息是真实信息，并且已对用户进行身份验证。

### 添加依赖方信任
<a name="odbc-adfs-saml-adding-a-relying-party-trust"></a>

要在 AD FS 中添加依赖方信任，您可以使用 AD FS 服务器管理器。

**在 AD FS 中添加依赖方信任**

1. 登录 AD FS 服务器。

1. 在 **Start**（开始）菜单上，打开 **Server Manager**（服务器管理器）。

1. 选择 **Tools**（工具），然后选择 **AD FS Management**（AD FS 管理）。  
![\[依次选择 Tools（工具）、AD FS Management（AD FS 管理）。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-8.png)

1. 在导航窗格中的 **Trust Relationships**（信任关系）下，选择 **Relying Party Trusts**（依赖方信任）。

1. 在 **Actions**（操作）下，选择 **Add Relying Party Trust**（添加依赖方信任）。  
![\[选择 Add Relying Party Trust（添加依赖方信任）。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-9.png)

1. 在**添加信赖方信任向导**页面上，选择**开始**。  
![\[选择启动。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-10.png)

1. 在 **Select Data Source**（选择数据来源）屏幕上，选择 **Import data about the relying party published online or on a local network**（导入有关在线或在本地网络上发布的信赖方的数据）。

1. 对于 **Federation metadata address (host name or URL)** [联合身份验证元数据地址（主机名或 URL）]，请输入 URL ** https://signin.aws.amazon.com/static/saml-metadata.xml**。

1. 选择**下一步**。  
![\[配置数据来源。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-11.png)

1. 在 **Specify Display Name**（指定显示名称）页面上，为 **Display name**（显示名称）输入依赖方的显示名称，然后选择 **Next**（下一步）。  
![\[输入依赖方显示名称。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-12.png)

1. 在 **Configure Multi-factor Authentication Now**（立即配置多重身份验证）页面上，本教程选择 **I do not want to configure multi-factor authentication for this relying party trust at this time**（现在不想为此依赖方信任配置多重身份验证）。

   为增强安全性，我们建议您配置多重身份验证以帮助保护 AWS 资源。由于本教程使用示例数据集，因此不会启用多重身份验证。  
![\[配置多重身份验证。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-13.png)

1. 选择**下一步**。

1. 在 **Choose Issuance Authorization Rules**（选择颁发授权规则）页面上，选择 **Permit all users to access this relying party**（允许所有用户访问此信赖方）。

   此选项允许 Active Directory 中的所有用户将 AD FS 作为依赖方与 AWS 结合使用。您应考虑安全要求并对此配置进行相应调整。  
![\[配置用户对依赖方的访问权限。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-14.png)

1. 选择**下一步**。

1. 在 **Ready to Add Trust**（准备添加信任）页面上，选择 **Next**（下一步）将依赖方信任添加到 AD FS 配置数据库。  
![\[选择下一步。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-15.png)

1. 在 **Finish**（完成）页面上，选择 **Close**（关闭）。  
![\[选择关闭。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-16.png)

### 为依赖方配置 SAML 声明规则
<a name="odbc-adfs-saml-configuring-saml-claim-rules-for-the-relying-party"></a>

在此任务中，您将创建两组声明规则。

第一组规则 1-4 包含 AD FS 声明规则，这些规则需要基于 AD 组成员关系担任 IAM 角色。如果您想建立对 [AWS 管理控制台](https://aws.amazon.com/console) 的联合访问权限，那么这些规则与您创建的规则相同。

第二组规则 5-6 是 Athena 访问控制所需的声明规则。

**创建 AD FS 声明规则**

1. 在“AD FS 管理”控制台导航窗格中，依次选择 **Trust Relationships**（信任关系）、**Relying Party Trusts**（依赖方信任）。

1. 查找您在上一节中创建的依赖方。

1. 右键单击依赖方并选择 **Edit Claim Rules**（编辑声明规则），或从 **Actions**（操作）菜单中选择 **Edit Claim Rules**（编辑声明规则）。  
![\[选择 Edit Claim Rules（编辑声明规则）。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-17.png)

1. 选择**添加规则**。

1. 在“添加转换声明规则向导”的 **Configure Rule**（配置规则）页面上，输入以下信息以创建声明规则 1，然后选择 **Finish**（完成）。
   + 对于 **Claim Rule name**（声明规则名称），输入 **NameID**。
   + 对于 **Rule template**（规则模板），使用 **Transform an Incoming Claim**（转换传入声明）。
   + 对于 **Incoming claim type**（传入声明类型），选择 **Windows account name**（Windows 账户名称）。
   + 对于 **Outgoing claim type**（传出声明类型），选择 **Name ID**（名称 ID）。
   + 对于**传出名称 ID 格式**，请选择**持久性标识符**。
   + 选择 **Pass through all claim values**（传递所有声明值）。  
![\[创建第一条声明规则。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-18.png)

1. 选择 **Add Rule**（添加规则），然后输入以下信息以创建声明规则 2，然后选择 **Finish**（完成）。
   + 对于 **Claim Rule name**（声明规则名称），输入 **RoleSessionName**。
   + 对于 **Rule template**（规则模板），使用 **Send LDAP Attribute as Claims**（将 LDAP 属性作为声明发送）。
   + 对于**特性存储**，请选择 **Active Directory**。
   + 对于 **Mapping of LDAP attributes to outgoing claim types**（将 LDAP 属性映射到传出声明类型），添加属性 **E-Mail-Addresses**。对于 **Outgoing Claim Type**（传出声明类型），输入 ** https://aws.amazon.com/SAML/Attributes/RoleSessionName**。  
![\[创建第二条声明规则。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-19.png)

1. 选择 **Add Rule**（添加规则），然后输入以下信息以创建声明规则 3，然后选择 **Finish**（完成）。
   + 对于 **Claim Rule name**（声明规则名称），输入 **Get AD Groups**。
   + 对于 **Rule template**（规则模板），使用 **Send Claims Using a Custom Rule**（通过自定义规则发送声明）。
   + 对于 **Custom rule**（自定义规则），输入以下代码：

     ```
     c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", 
      Issuer == "AD AUTHORITY"]=> add(store = "Active Directory", types = ("http://temp/variable"),  
      query = ";tokenGroups;{0}", param = c.Value);
     ```  
![\[创建第三条声明规则。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-20.png)

1. 选择**添加规则**。输入以下信息以创建声明规则 4，然后选择 **Finish**（完成）。
   + 对于 **Claim Rule name**（声明规则名称），输入 **Role**。
   + 对于 **Rule template**（规则模板），使用 **Send Claims Using a Custom Rule**（通过自定义规则发送声明）。
   + 对于 **Custom rule**（自定义规则），输入以下代码以及您之前创建的 SAML 提供商的账号和账户名称：

     ```
     c:[Type == "http://temp/variable", Value =~ "(?i)^aws-"]=> issue(Type = "https://aws.amazon.com/SAML/Attributes/Role",  
     Value = RegExReplace(c.Value, "aws-", "arn:aws:iam::AWS_ACCOUNT_NUMBER:saml-provider/adfs-saml-provider,arn:aws:iam:: AWS_ACCOUNT_NUMBER:role/"));
     ```  
![\[创建第四条声明规则。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-21.png)

## 3. 创建 Active Directory 用户和组
<a name="odbc-adfs-saml-creating-active-directory-users-and-groups"></a>

现在，您可以创建要访问 Athena 的 AD 用户以及置放这些用户的 AD 组，以便按组控制访问级别。创建对数据访问模式进行分类的 AD 组后，您可以将用户添加到这些组中。

**创建要访问 Athena 的 AD 用户**

1. 在“服务器管理器”控制面板上，选择 **Tools**（工具），然后选择 **Active Directory Users and Computers**（Active Directory 用户和计算机）。  
![\[依次选择 Tools（工具）、Active Directory Users and Computers（Active Directory 用户和计算机）。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-22.png)

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Active Directory Users and Computers**（Active Directory 用户和计算机）工具栏上，选择 **Create user**（创建用户）选项。  
![\[选择创建用户。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-23.png)

1. 在 **New Object – User**（新对象 – 用户）对话框中，对于 **First name**（名字）、**Last name**（姓氏）和 **Full name**（全名），输入名称。本教程使用的是 **Jane Doe**。  
![\[输入用户名称。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-24.png)

1. 选择**下一步**。

1. 对于 **Password**（密码），输入密码，然后重新键入以确认。

   为简单起见，本教程取消选择 **User must change password at next sign on**（用户下次登录时必须更改密码）。在真实场景中，您应要求新建用户更改其密码。  
![\[输入密码。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-25.png)

1. 选择**下一步**。

1. 选择**结束**。  
![\[选择结束。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-26.png)

1. 在 **Active Directory Users and Computers**（Active Directory 用户和计算机）中，选择用户名称。

1. 在用户的 **Properties**（属性）对话框中，对于 **E-mail**（电子邮件），输入电子邮件地址。本教程使用的是 **jane@example.com**。  
![\[输入电子邮箱地址。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-27.png)

1. 选择**确定**。

### 创建 AD 组来表示数据访问模式
<a name="odbc-adfs-saml-create-ad-groups-to-represent-data-access-patterns"></a>

您可以创建 AD 组，其成员在登录 AWS 时担任 `adfs-data-access` IAM 角色。以下示例创建了一个名为 aws-adfs-data-access 的 AD 组。

**创建 AD 组**

1. 在“服务器管理器”控制面板上，从 **Tools**（工具）菜单中，选择 **Active Directory Users and Computers**（Active Directory 用户和计算机）。

1. 在工具栏上，选择 **Create new group**（创建新组）选项。  
![\[选择 Create New Group（创建新组）。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-28.png)

1. 在 **New Object – Group**（新对象 – 组）对话框中，输入以下信息：
   + 对于 **Group Name**（组名称），输入 **aws-adfs-data-access**。
   + 对于 **Group scope**（组范围），选择 **Global**（全局）。
   + 对于 **Group type**（组类型），选择 **Security**（安全）。  
![\[在 AD 中创建全局安全组。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-29.png)

1. 选择**确定**。

### 将 AD 用户添加到相应的组
<a name="odbc-adfs-saml-add-ad-users-to-appropriate-groups"></a>

现在，您已创建 AD 用户和 AD 组，可将该用户添加到该组。

**将 AD 用户添加到 AD 组**

1. 在“服务器管理器”控制面板上，在 **Tools**（工具）菜单中，选择 **Active Directory Users and Computers**（Active Directory 用户和计算机）。

1. 对于 **First name**（名字）和 **Last name**（姓氏），选择一个用户（例如 **Jane Doe**）。

1. 在用户的 **Properties**（属性）对话框中，在 **Member Of**（隶属于）选项卡上，选择 **Add**（添加）。  
![\[选择添加。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-30.png)

1. 根据要求添加一个或多个 AD FS 组。本教程添加了 **aws-adfs-data-access** 组。

1. 在 **Select Groups**（选择组）对话框中，对于 **Enter the object names to select**（输入要选择的对象名称），输入您创建的 AD FS 组名称（例如 **aws-adfs-data-access**），然后选择 **Check Names**（检查名称）。  
![\[选择 Check Names（检查名称）。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-31.png)

1. 选择**确定**。

   在用户的 **Properties**（属性）对话框中，AD 组名称将在 **Member of**（隶属于）列表中显示。  
![\[AD 组已添加到用户属性。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-32.png)

1. 选择 **Apply**（应用），然后选择 **OK**（确定）。

## 4. 配置 AD FS ODBC 与 Athena 的连接
<a name="odbc-adfs-saml-configuring-the-ad-fs-odbc-connection-to-athena"></a>

创建 AD 用户和组后，您就可以使用 Windows 中的 ODBC 数据来源程序为 AD FS 配置 Athena ODBC 连接。

**配置 AD FS ODBC 与 Athena 的连接**

1. 为 Athena 安装 ODBC 驱动程序。有关下载链接，请参阅 [通过 ODBC 连接到 Amazon Athena](connect-with-odbc.md)。

1. 在 Windows 中，依次选择 **Start**（开始）、**ODBC Data Sources**（ODBC 数据来源）。

1. 在 **ODBC 数据来源管理器**程序中，选择 **Add**（添加）。  
![\[选择 Add（添加）以添加 ODBC 数据来源。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-33.png)

1. 在 **Create New Data Source**（创建新数据来源）对话框中，选择 **Simba Athena ODBC 驱动程序**，然后选择 **Finish**（完成）。  
![\[选择 Simba Athena ODBC Driver（Simba Athena ODBC 驱动程序）。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-34.png)

1. 在 **Simba Athena ODBC Driver DSN Setup**（Simba Athena ODBC 驱动程序 DSN 设置）对话框中，输入下列值：
   + 对于 **Data Source Name**（数据来源名称），输入数据来源的名称（例如，** Athena-odbc-test**）。
   + 在 **Description**（说明）中，为数据来源输入说明。
   + 在 **AWS 区域** 中，输入您正在使用的 AWS 区域（例如 ** us-west-1**）。
   + 在 **S3 Output Location**（S3 输出位置）中，输入要存储输出的 Amazon S3 路径。  
![\[为 Simba Athena ODBC Driver DSN Setup（Simba Athena ODBC 驱动程序 DSN 设置）输入值。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-35.png)

1. 选择 **Authentication Options**（身份验证选项）。

1. 在 **Authentication Options**（身份验证选项）对话框中，指定下列值：
   + 对于 **Authentication Type**（身份验证类型），选择 **ADFS**。
   + 对于 **User**（用户），输入用户的电子邮件地址（例如 **jane@example.com**）。
   + 对于 **Password**（密码），输入用户 ADFS 密码的值。
   + 对于 **IdP Host**（IdP 主机），输入 AD FS 服务器名称（例如 **adfs.example.com**）。
   + 对于 **IdP Port**（IdP 端口），使用默认值 **443**。
   + 选择 **SSL Insecure**（SSL 不安全）选项。  
![\[配置身份验证选项。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/odbc-adfs-saml-37.png)

1. 选择 **OK**（确定）以关闭 **Authentication Options**（身份验证选项）。

1. 选择 **Test**（测试）以测试连接，或者 **OK**（确定）以完成。