---
schema_version: "1"
id: 074a8075abcae64a2235534bd77c474174d1c45afce5a3cfc1ddba95516c957b
title: 第 5 部分 - 配置 Web 层
collection: tableau
version: current
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/current/zh-cn/guides/enterprise-deployment/edg_part5.md
canonical_url: https://help.tableau.com/current/guides/enterprise-deployment/zh-cn/edg_part5.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 929a6eb35e62460c5e18b70d6e9c2c0020ffc1a247e14e674d6532bc6a13da77
description: "Part 5: configure the web tier with Tableau Server Independent Gateway and reverse proxies."
---
[跳转到主要内容](#main-content)

# 第 5 部分 - 配置 Web 层

**注意**：Tableau 不再更新《Enterprise 部署指南》。尽管我们仍然推荐将此处描述的参考架构作为 AWS 中 Tableau Server 的有效部署模型，但自上次更新以来，特定的配置过程可能已更改。请始终将这些步骤与最新的 [Tableau Server 帮助](https://help.tableau.com/current/server/zh-cn/get_started_server.htm)文档进行交叉引用，以确保准确性。

参考架构的 Web 层应包括以下组件：

- 面向 Web 的应用程序负载平衡器，它接受来自 Tableau 客户端的 HTTPS 请求并与反向代理服务器进行通信。
- 反向代理： 
    - 我们建议部署 Tableau Server 独立网关。
    - 我们建议至少使用两个代理服务器以实现冗余和处理客户端负载。
    - 从负载平衡器接收 HTTPS 流量。
    - 支持 Tableau 主机的粘性会话。
    - 为运行网关进程的每个 Tableau Server 配置循环负载平衡代理。
    - 处理来自外部 IdP 的身份验证请求。
- 转发代理：Tableau Server 需要访问 Internet 以获得许可和地图功能。您必须为 Tableau 服务 URL 配置转发代理安全列表。请参见_“与 Internet 通信_ ([Linux](https://help.tableau.com/current/server-linux/zh-cn/plan_network.htm))”。
- 所有与客户端相关的流量都可以通过 HTTPS 加密：
    - 客户端到应用程序负载平衡器
    - 应用程序负载平衡器到反向代理服务器
    - 代理服务器到 Tableau Server
    - 反向代理上运行的身份验证处理程序到 IdP
    - Tableau Server 到 IdP

### Tableau Server 独立网关

Tableau Server 版本 2022.1 引入了 Tableau Server 独立网关。独立网关是 Tableau 网关进程的独立实例，用作 Tableau 感知反向代理。

独立网关支持对后端 Tableau Server 的简单循环负载平衡。然而，独立网关并不打算作为企业应用负载平衡器。我们建议在企业级应用程序负载平衡器后运行独立网关。

独立网关需要 Advanced Management 许可证。

## 身份验证和授权

默认参考架构指定安装 Tableau Server 并配置本地身份验证。在此模型中，客户端必须连接到 Tableau Server 才能通过本机 Tableau Server 本地身份验证过程进行身份验证。我们不建议在参考架构中使用此身份验证方法，因为该场景要求未经身份验证的客户端与应用程序层通信，这存在安全风险。

相反，我们建议配置一个企业级外部身份提供程序和一个 AuthN 模块对所有进入应用程序层的流量进行预身份验证。使用外部 IdP 配置时，不使用本机 Tableau Server 本地身份验证过程。在 IdP 对用户进行身份验证后，Tableau Server 会授权访问部署中的资源。

### 使用 AuthN 模块进行预身份验证

在本指南中记录的示例中，配置了 SAML SSO，但可以使用大多数外部身份提供程序和 AuthN 模块配置预身份验证过程。

在参考架构中，反向代理配置为在将这些请求通过代理传送到 Tableau Server 之前创建与 IdP 的客户端身份验证会话。我们将此过程称为_预身份验证_阶段。反向代理只会将经过身份验证的客户端会话重定向到 Tableau Server。然后，Tableau Server 将创建一个会话，使用 IdP 验证会话的身份验证，然后返回客户端请求。

下图显示了配置了 AuthN 模块的预身份验证和身份验证过程的分步详细信息。反向代理可能是通用的第三方解决方案或 Tableau Server 独立网关：

![上图所示的步骤。步骤 1：Tableau 客户端请求 Tableau Server 上的资源。步骤 2：反向代理创建一个身份验证请求，并将 URL 重定向到身份提供程序。步骤 3：身份提供程序向用户发送登录表单。步骤 4：系统提示用户输入凭据。步骤 5：身份提供程序验证用户提交的凭据。步骤 6：身份提供程序使用发布到反向代理服务提供程序的嵌入式 SAML 断言响应客户端。步骤 7：代理上的服务提供程序验证断言，创建会话，然后重定向到 Tableau Server 上的服务提供程序。步骤 8：Tableau Server 上的服务提供程序创建发送给身份提供程序的身份验证请求。步骤 9：身份提供程序验证当前会话。步骤 10：Tableau Server 上的服务提供程序验证并创建自己的会话，并将响应发送给用户。步骤 11：用户连接到 Tableau Server 以获取对指定资源的授权。](/tableau/current/zh-cn/guides/enterprise-deployment/zh-cn/Img/pixel-transparent.png)

## 配置概览

这是配置 Web 层的过程的概述。在每个步骤之后验证连接：

1. 配置两个反向代理以提供对 Tableau Server 的 HTTP 访问。
2. 在代理服务器上使用粘性会话配置负载平衡逻辑，以连接到运行网关进程的每个 Tableau Server 实例。
3. 在 Internet 网关处使用粘性会话配置应用程序负载平衡，以将请求转发到反向代理服务器。
4. 使用外部 IdP 配置身份验证。您可以通过在反向代理服务器上安装身份验证处理程序来配置 SSO 或 SAML。AuthN 模块管理外部 IdP 和您的 Tableau 部署之间的身份验证握手。Tableau 还将充当 IdP 服务提供商并使用 IdP 对用户进行身份验证。
5. 若要在此部署中使用 Tableau Desktop 进行身份验证，您的客户端必须运行 Tableau Desktop 2021.2.1 或更高版本。

## 使用 Tableau Server 独立网关的示例 Web 层配置

本主题的其余部分提供了一个端到端过程，该过程描述了如何使用 Tableau Server 独立网关在示例 AWS 参考架构中实现 Web 层：有关使用 Apache 作为反向代理的示例配置，请参见[附录 - 具有 Apache 示例部署的 Web 层](https://help.tableau.com/current/guides/enterprise-deployment/zh-cn/edg_part_app-apache.htm)。

示例配置由以下组件组成：

- AWS 应用程序负载平衡器
- Tableau Server 独立网关
- Mellon 身份验证模块
- Okta IdP
- SAML 身份验证

**注意**：本部分中提供的示例 Web 层配置包括部署第三方软件和服务的详细过程。我们已尽最大努力验证和记录启用 Web 层方案的过程。但是，第三方软件可能会发生变化，或者您的方案可能与此处描述的参考架构不同。请参考第三方文档以获得权威的配置详细信息和支持。

此部分中的 Linux 示例显示了类似 RHEL 的发行版的命令。具体来说，这里的命令是使用 Amazon Linux 2 发行版开发的。如果您运行的是 Ubuntu 发行版，请相应地编辑命令。

在此示例中部署 Web 层遵循逐步配置和验证过程。核心 Web 层配置包含以下用于在 Tableau 和 Internet 之间启用 HTTP 的步骤。独立网关运行并配置为在 AWS 应用程序负载平衡器后面进行反向代理/负载平衡：

1. 准备环境
2. 安装独立网关
3. 配置独立网关服务器
4. 配置 AWS 应用程序负载平衡器

设置 Web 层并验证与 Tableau 的连接后，使用外部提供程序配置身份验证。

### 准备环境

在部署独立网关之前完成以下任务。

1. AWS 安全组更改。将公共安全组配置为允许来自专用安全组的入站独立网关整理流量 (TCP 21319)。
2. 如[第 4 部分 - 安装并配置 Tableau Server](https://help.tableau.com/current/guides/enterprise-deployment/zh-cn/edg_part4.htm)中所述，在四节点 Tableau Server 群集上安装版本 22.1.1（或更高版本）。
3. 如[配置主机计算机](https://help.tableau.com/current/guides/enterprise-deployment/zh-cn/edg_part3.htm#Install)中所述，在 Public 安全组中配置两个代理 EC2 实例。

### 安装独立网关

Tableau Server 独立网关需要 Advanced Management 许可证。

部署 Tableau Server 独立网关包括安装和运行 .rpm 包，然后配置初始状态。本指南中包含的过程为部署到参考架构中提供了说明性指导。

如果您的部署与参考架构不同，请参见核心 Tableau Server 文档“_安装带有独立网关_的 Tableau Server ([Linux](https://help.tableau.com/current/server-linux/zh-cn/server_tsig_new_install.htm))”。

**重要信息**：配置独立网关可能是一个容易出错的过程。跨独立网关服务器的两个实例对配置问题进行故障排除非常困难。因此，我们建议一次配置一个独立网关服务器。配置第一台服务器并验证功能后，您应该配置第二台独立网关服务器。

尽管您将分别配置每个独立网关服务器，但在您安装到公共安全组中的两个 EC2 实例上运行此安装过程： 

1. 运行更新以将最新修复应用到 Linux 操作系统：
    
    sudo yum update
2. 如果安装了 Apache，请将其移除：
    
     sudo yum remove httpd
3. 将版本 2022.1.1（或更高版本）的独立网关安装包从 [Tableau 下载页面](https://www.tableau.com/zh-cn/support/releases/server)复制到将运行 Tableau Server 的主机计算机。
    
    例如，在运行类似 Linux RHEL 的操作系统的计算机上，运行：
    
    wget https://downloads.tableau.com/esdalt/2022<version>/tableau-server-tsig-<version>.x86\_64.rpm
4. 运行安装程序。例如，在类似 Linux RHEL 的操作系统上，运行：
    
    sudo yum install <tableau-tsig-version>.x86\_64.rpm
5. 切换到 `/opt/tableau/tableau_tsig/packages/scripts.<version_code>/` 目录，并运行位于该处的 `initialize-tsig` 脚本：除了 `--accepteula` 标志外，您还必须包括运行 Tableau Server 部署的子网的 IP 范围。使用 `-c` 选项指定 IP 范围。下面的示例显示了指定了示例 AWS 子网的命令：
    
    sudo ./initialize-tsig --accepteula -c "ip 10.0.30.0/24 10.0.31.0/24"
6. 初始化完成后，打开 `tsighk-auth.conf` 文件并复制文件中的身份验证密文。作为后端 Tableau Server 配置的一部分，您需要为每个独立网关实例提交此代码：
    
    sudo less /var/opt/tableau/tableau\_tsig/config/tsighk-auth.conf
7. 在独立网关的两个实例上运行上述步骤后，准备 `tsig.json` 配置文件。配置文件由一个“independentGateways”数组组成。该数组包含配置对象，每个对象定义独立网关实例的连接详细信息。
    
    复制以下 JSON 并根据您的部署环境对其进行自定义。此处的示例显示了示例 AWS 参考架构的文件。
    
    下面的示例 JSON 文件仅包含一个独立网关的连接信息。在此过程的稍后部分，您将包括第二个独立网关服务器的连接信息。
    
    为接下来的程序将文件另存为 `tsig.json`。
    
    {
    "independentGateways": \[
     {
     	"id": "ip-10-0-1-169.ec2.internal",
     	"host": "ip-10-0-1-169.ec2.internal",
     	"port": "21319",
     	"protocol" : "http",
     	"authsecret": "13660-27118-29070-25482-9518-22453"
     	}\]
     }
    
    - `"id"` - 运行独立网关的 AWS EC2 实例的私有 DNS 名称。
    - `"host"` - 与 `"id"` 相同。
    - `"port"`\- 整理端口，默认情况下为 `"21319"`。
    - `"protocol"` - 客户端流量协议。为初始配置将此项保留为 `http`。
    - `"authsecret"` - 您在上一步中复制的密文。

### 独立网关：直接连接与中继连接

在继续之前，您必须决定在部署中配置哪种连接方案：直接连接或中继连接。此处简要描述了每个选项以及相关的决策数据点。

**中继连接**：您可以将独立网关配置为通过单个端口将客户端通信中继到 Tableau Server 上的网关进程。我们将此称为_中继_连接:

- 中继进程导致从独立网关到后端 Tableau Server 网关进程的额外跃点。与直接连接配置相比，额外的跃点会降低性能。
- 中继模式支持 TLS。中继模式下的所有通信都仅限于单一协议（HTTP 或 HTTPS），因此可以使用 TLS 进行加密和身份验证。

**直接连接**：独立网关可以通过多个端口直接与后端 Tableau Server 进程通信。我们将这种通信称为_直接_连接:

- 由于直接连接到后端 Tableau Server，因此与中继连接选项相比，客户端性能显着提高。
- 需要打开 16 个以上从公共子网到私有子网的端口，以便直接处理从独立网关到 Tableau Server 计算机的通信。
- 从独立网关到 Tableau Server 的进程尚不支持 TLS。

若要在 Tableau Server 和独立网关之间运行 TLS，您必须配置中继连接。EDG 中的示例场景配置有中继连接。

1. 将 `tsig.json` 复制到 Tableau Server 部署的节点 1。
2. 在节点 1 上运行以下命令以启用独立网关。
    
    tsm stop
    tsm configuration set -k gateway.tsig.proxy\_tls\_optional -v none
    tsm pending-changes apply
    tsm topology external-services gateway enable -c tsig.json
    tsm start

由于直接连接不支持 TLS，我们建议只有当您能够通过其他方式保护所有网络流量时，才配置直接连接。若要在 Tableau Server 和独立网关之间运行 TLS，您必须配置中继连接。EDG 中的示例场景配置有中继连接。

如果您将独立网关配置为直接连接到 Tableau Server，则必须启用配置以触发通信。Tableau Server 与独立网关通信后，将建立协议目标。然后，您必须从独立网关计算机检索 `proxy_targets.csv`，并打开 AWS 中从 Public 安全组到 Private 安全组的相应端口。

1. 将 `tsig.json` 复制到 Tableau Server 部署的节点 1。
2. 在节点 1 上运行以下命令以启用独立网关。
    
    tsm stop
    tsm topology external-services gateway enable -c tsig.json
    tsm start
3. 在独立网关计算机上运行以下命令以查看 Tableau Server 群集正在使用的端口：
    
    less /var/opt/tableau/tableau\_tsig/config/httpd/proxy\_targets.csv
4. 配置 AWS 安全组。添加 `proxy_targets.csv` 中列出的 TCP 端口，以允许从 Public 安全组到 Private 安全组的通信。
    
    我们建议自动化端口入口配置，因为如果 Tableau Server 部署发生更改，端口可能会更改。在 Tableau Server 部署上添加节点或重新配置进程将触发对独立网关所需的端口访问的更改。

### 验证：基本拓扑配置

您应该能够通过浏览到 `http://<gateway-public-IP-address>` 来访问 Tableau Server 管理员页面。

如果 Tableau Server 登录页面未加载，或者如果 Tableau Server 未启动，请遵循以下故障诊断步骤：

网络： 

- 通过从 Tableau Server 节点 1 运行以下 `wget` 命令，验证 Tableau 部署和独立网关实例之间的连接：wget http://<独立网关的内部 IP 地址>:21319，例如：
    
     wget http://ip-10-0-1-38:21319
    
    如果连接被拒绝或失败，请验证公共安全组是否配置为允许来自私有安全组的独立网关整理流量 (TCP 21319)。
    
    如果安全组配置正确，则验证您在独立网关初始化期间指定了正确的 IP 地址或 IP 范围。您可以在位于 `/etc/opt/tableau/tableau_tsig/environment.bash` 的 `environment.bash` 文件中查看和更改此配置。如果您对此文件进行了更改，请按如下所述重新启动 tsig-http 服务。

在代理 1 主机上：

1. 用独立的网关存根文件覆盖 httpd.conf 文件：
    
    cp /var/opt/tableau/tableau\_tsig/config/httpd.conf.stub /var/opt/tableau/tableau\_tsig/config/httpd.conf
2. 作为故障排除的第一步，重新启动 tsig-httpd：
    
    sudo su - tableau-tsig
    systemctl --user restart tsig-httpd
    exit

在 Tableau 节点 1 上

- 仔细检查 `tsig.json` 文件。如果发现错误，请修复它们，然后运行 `tsm topology external-services gateway update -c tsig.json`。
- 如果运行直接连接，请验证 `proxy_targets.csv` 中列出的 TCP 端口配置为从 Public 安全组到 Private 安全组的入口端口。

### 配置 AWS 应用程序负载平衡器

将负载平衡器配置为 HTTP 侦听器。此处的过程描述了如何在 AWS 中添加负载平衡器。

#### 步骤 1：创建目标组

标组是定义运行代理服务器的 EC2 实例的 AWS 配置。这些是来自 LBS 的流量的目标。

1. “EC2”>“目标组”\>“创建目标组”
2. 在“创建”页面上：
    
    - 输入目标组名称，例如 `TG-internal-HTTP`
    - 目标类型：实例
    - 协议：HTTP
    - 端口：80
    - VPC：选择您的 VPC
    - 在“运行状况检查”\>“高级运行状况检查设置”\>“成功代码”下，将代码列表追加为：`200,303`。
    - 单击“创建”
3. 选择刚刚创建的目标组，然后单击“目标”选项卡： 
    
    - 单击“编辑”。
    - 选择正在运行代理应用程序的 EC2 实例（或单个实例，如果您一次配置一个），然后单击“添加到已注册”。
    - 单击“保存”。

#### 步骤 2：启动负载平衡器向导

1. “EC2”>“负载平衡器”\>“创建负载平衡器”
2. 在“选择负载平衡器类型”页面上，创建一个应用程序负载平衡器。

**注意**：为配置负载均衡器而显示的 UI 在 AWS 数据中心之间不一致。下面的过程“向导配置”映射到从**“步骤 1 配置负载均衡器”**开始的 AWS 配置向导。   
  
如果您的数据中心在页面底部包含**“创建负载均衡器”**按钮的单个页面中显示所有配置，请按照下面的“单页面配置”过程进行操作。

1. “配置负载平衡器”页面：
    
    - 指定名称
    - 方案：面向互联网（默认）
    - IP 地址类型：ip1v4（默认）
    - 侦听器（侦听器和路由）：
        1. 保留默认的 HTTP 侦听器
        2. 单击“添加侦听器”并添加 `HTTPS:443`
    
    - VPC：选择您已安装所有内容的 VPC
    - 可用区：
        - 为您的数据中心区域选择 **a** 和 **b**
        - 在每个相应的下拉选择器中，选择 Public 子网（您的代理服务器所在的位置）。
    - 单击：“配置安全设置”
2. “配置安全设置”页面
    
    - 上载您的公共 SSL 证书。
    - 单击“下一步：配置安全组”。
3. “配置安全组”页面：
    
    - 选择 Public 安全组。如果选择了“默认”安全组，则清除该选择。
    - 单击“下一步：配置路由”。
4. “配置路由”页面
    
    - 目标组：现有目标组。
    - 名称：选择您之前创建的目标组
    - 单击“下一步：注册目标”。
5. “注册目标”页面
    
    - 应会显示您之前配置的两个代理服务器实例。
    - 单击“下一步：审查”。
6. “查看”页面
    
    单击“创建”。

基本配置

- 指定名称
- 方案：面向互联网（默认）
- IP 地址类型：ip1v4（默认）

网络映射

- VPC：选择您已安装所有内容的 VPC
- 映射：
    - 为您的数据中心区域选择 **a** 和 **b**（或类似的）可用区
    - 在每个相应的下拉选择器中，选择 Public 子网（您的代理服务器所在的位置）。

安全组

- 选择 Public 安全组。如果选择了“默认”安全组，则清除该选择。

侦听器和路由

- 保留默认的 HTTP 侦听器。对于“默认操作”，指定您之前设置的目标组。
- 单击“添加侦听器”并添加 `HTTPS:443`。对于“默认操作”，指定您之前设置的目标组。

安全侦听器设置

- 上载您的公共 SSL 证书。

单击“创建负载平衡器”。

#### 步骤 3：启用粘性

1. 创建负载平衡器后，您必须在目标组上启用粘性。
    
    - 打开 AWS 目标组页面（“EC2”\>“负载平衡”\>“目标组”），选择您刚刚设置的目标组实例。在“操作”菜单上，选择“编辑属性”。
    - 在“编辑属性”页面上，选择“粘性” ，指定持续时间 `1 day`，然后保存更改。
2. 在负载平衡器上，在 HTTP 侦听器上启用粘性。选择您刚刚配置的负载平衡器，然后单击“侦听器”选项卡：
    
    - 对于“HTTP:80”，单击“查看/编辑规则”。在生成的“规则”页面上，单击编辑图标（一次位于页面顶部，然后再次位于规则旁边）以编辑规则。删除现有 THEN 规则，并通过单击“添加操作”\>“转发至...”替换该规则。在生成的 THEN 配置中，指定您创建的相同目标组。在“组级粘性”下，启用粘性并将持续时间设置为 1 天。保存设置，然后单击“更新”。

#### 步骤 4：在负载平衡器上设置空闲超时

在负载平衡器上，将空闲超时更新为 400 秒。

选择您为此部署配置的负载平衡器，然后单击“操作”\>“编辑属性”。将“空闲超时”设置为 `400` 秒，然后单击“保存”。

#### 步骤 5：验证 LBS 连接

打开 AWS 负载平衡器页面（“EC2”\>“负载平衡器”），选择您刚刚设置的负载平衡器实例。

在“描述”下，复制 DNS 名称并将其粘贴到浏览器中以访问 Tableau Server 登录页面。

如果您收到 500 级错误，那么您可能需要重新启动代理服务器。

### 使用公共 Tableau URL 更新 DNS

使用 AWS 负载平衡器描述中的域 DNS 区域名称在您的 DNS 中创建 CNAME 值。流向您的 URL (tableau.example.com) 的流量应发送到 AWS 公共 DNS 名称。

### 验证连接

DNS 更新完成后，您应该能够通过输入您的公共 URL（例如 `https://tableau.example.com`）导航到 Tableau Server 登录页面。

## 示例身份验证配置：带有外部 IdP 的 SAML

以下示例介绍如何使用 Okta IdP 和 Mellon 身份验证模块为在 AWS 参考架构中运行的 Tableau 部署设置和配置 SAML。

此示例取自上一节，并假设您一次配置一个独立网关。

该示例介绍了如何通过 HTTP 配置 Tableau Server 和独立网关。Okta 将通过 HTTPS 向 AWS 负载平衡器发送请求，但所有内部流量都将通过 HTTP 传输。针对此场景进行配置时，请在设置 URL 字符串时注意 HTTP 与 HTTPS 协议。

此示例使用 Mellon 作为独立网关服务器上的预身份验证服务提供程序模块。此配置可确保只有经过身份验证的流量连接到 Tableau Server，Tableau Server 还充当 Okta IdP 的服务提供商。因此，您必须配置两个 IdP 应用程序：一个用于 Mellon 服务提供商，另一个用于 Tableau 服务提供商。

### 创建 Tableau 管理员帐户

配置 SAML 时的一个常见错误是在启用 SSO 之前忘记在 Tableau Server 上创建管理员帐户。

第一步是在 Tableau Server 上创建一个具有服务器管理员角色的帐户。对于示例 Okta 场景，用户名必须采用有效电子邮件地址格式，例如 user@example.com。您必须为此用户设置密码，但在配置 SAML 后将不再使用该密码。

### 配置 Okta 预身份验证应用程序

本部分描述的端到端场景需要两个 Okta 应用程序：

- Okta 预认证应用程序
- Okta Tableau Server 应用程序

这些应用程序中的每一个都与您需要分别在反向代理和 Tableau Server 上配置的不同元数据相关联。

此过程描述了如何创建和配置 Okta 预身份验证应用程序。在本主题的后面，您将创建 Okta Tableau Server 应用程序。有关用户受限的免费测试 Okta 帐户，请参见 [Okta 开发人员网页](https://developer.okta.com/signup/)。

为 Mellon 预身份验证服务提供商创建 SAML 应用程序集成。

1. 打开 Okta 管理仪表板 >“应用程序”\>“创建应用程序集成”。
2. 在“创建新的应用程序集成”页面上，选择“SAML 2.0”，然后单击“下一步”。
3. 在“常规设置”选项卡上，输入应用程序名称（例如 `Tableau Pre-Auth`），然后单击“下一步”。
4. 在“配置 SAML”选项卡上：
    
    - 单点登录 (SSO) URL。单点登录 URL 中路径的最后一个元素在 `mellon.conf` 配置文件称为 `MellonEndpointPath` ，该配置文件将在本过程的后面进行介绍。您可以指定您想要的任何端点。在此示例中，`sso` 是端点。最后一个元素 `postResponse` 是必须的：`https://tableau.example.com/sso/postResponse`。
    - 清除复选框：“将此用于收件人 URL 和目标 URL”。
    - 收件人 URL：与 SSO URL 相同，但使用 HTTP。例如，`http://tableau.example.com/sso/postResponse`。
    - 目标 URL：与 SSO URL 相同，但带有 HTTP。例如，`http://tableau.example.com/sso/postResponse`。
    - 受众 URI（SP 实体 ID）。例如，`https://tableau.example.com`。
    - 名称 ID 格式：`EmailAddress`
    - 应用程序用户名：`Email`
    - 属性声明：名称 = `mail`；名称格式 = `Unspecified`；值 = `user.email`。
    
    单击“下一步”。
5. 在“反馈”选项卡上，选择：
    
    - 我是添加内部应用程序的 Okta 客户
    - 这是我们创建的内部应用程序
    - 单击“完成”。
6. 创建预授权 IdP 元数据文件：
    
    - 在 Okta 中：“Applications”（应用程序）\>“Applications”（应用程序）\> 您的新应用程序（例如，`Tableau Pre-Auth`）>“Sign On”（登录）
    - 在“SAML 签名证书”旁边，单击“查看 SAML 设置说明”。
    - 在“如何针对 <预授权> 应用程序配置 SAML 2.0”页面上，向下滚动到“可选”部分，向您的 SP 提供商提供以下 IDP 元数据。
    - 复制 XML 字段的内容并将它们保存在一个名为 `pre-auth_idp_metadata.xml` 的文件中。
7. （可选）配置多重身份验证：
    
    - 在 Okta 中：“Applications”（应用程序）\>“Applications”（应用程序）\> 您的新应用程序（例如，`Tableau Pre-Auth`）>“Sign On”（登录）
    - 在“Sign On Policy”（登录策略）下，单击“Add Rule”（添加规则）。
    - 在“App Sign On Rule”（应用程序登录规则）上，指定名称和不同的 MFA 选项。若要测试功能，您可以将所有选项保留为默认值。但是，在“Actions”（操作）下，您必须选择“Prompt for factor”（因素提示），然后指定用户必须登录的频率。单击“Save”（保存）。

### 创建和分配 Okta 用户

1. 在 Okta 中，使用您在 Tableau 中创建的相同用户名 (user@example.com) 创建一个用户：“Directory”（目录）\>“People”（人员）\>“Add person”（添加人员）。
2. 创建用户后，将新的 Okta 应用程序分配给该人员：单击用户名，然后在“Assign Application”（分配应用程序）中分配应用程序。

### 安装 Mellon 进行预身份验证

此示例使用常用的开源模块 mod\_auth\_mellon。一些 Linux 发行版从较旧的存储库中打包了过时的 mod\_auth\_mellon 版本。这些过时的版本可能包含未知的安全漏洞或功能问题。如果您选择使用 mod\_auth\_mellon，请检查您使用的是当前版本。

mod\_auth\_mellon 模块是第三方软件。我们已尽最大努力验证和记录启用此方案的过程。但是，第三方软件可能会发生变化，或者您的方案可能与此处描述的参考架构不同。请参考第三方文档以获得权威的配置详细信息和支持。

1. 在运行独立网关的活动 EC2 实例上，安装 Mellon 身份验证模块的当前版本。
2. 创建 `/etc/mellon` 目录：
    
    sudo mkdir /etc/mellon

### 将 Mellon 配置为预身份验证模块

在独立网关的第一个实例上运行此过程。

您必须有依据 Okta 配置创建的 `pre-auth_idp_metadata.xml` 文件的副本。

1. 更改目录：
    
    cd /etc/mellon
2. 创建服务提供程序元数据。运行 `mellon_create_metadata.sh` 脚本。您必须在命令中包含您组织的实体 ID 和返回 URL。
    
    返回 URL 在 Okta 中称为_单点登录 URL_。返回 URL 中路径的最后一个元素在 `mellon.conf` 配置文件中称为 `MellonEndpointPath`，该配置文件将在本过程的后面进行介绍。在此示例中，我们指定 `sso` 作为端点路径。
    
    例如：
    
    sudo /usr/libexec/mod\_auth\_mellon/mellon\_create\_metadata.sh https://tableau.example.com "https://tableau.example.com/sso"
    
    该脚本返回服务提供商证书、密钥和元数据文件。
3. 重命名 `mellon` 目录中的服务提供商文件以便于阅读。我们将在文档中使用以下名称来引用这些文件：
    
    sudo mv \*.key mellon.key  
    sudo mv \*.cert mellon.cert  
    sudo mv \*.xml sp\_metadata.xml
4. 将 `pre-auth_idp_metadata.xml` 文件复制到同一文件夹。
5. 更改 `/etc/mellon` 目录中所有文件的所有权和权限：
    
    sudo chown tableau-tsig mellon.key
    sudo chown tableau-tsig mellon.cert
    sudo chown tableau-tsig sp\_metadata.xml
    sudo chown tableau-tsig pre-auth\_idp\_metadata.xml 
    sudo chmod +r \* mellon.key
    sudo chmod +r \* mellon.cert
    sudo chmod +r \* sp\_metadata.xml
    sudo chmod +r \* pre-auth\_idp\_metadata.xml
6. 创建 `/etc/mellon/conf.d` 目录：
    
    sudo mkdir /etc/mellon/conf.d
7. 在 `/etc/mellon/conf.d` 目录中创建 `global.conf` 文件。
    
    复制如下所示的文件内容，但使用您的根域名更新 `MellonCookieDomain`。举例来说，如果 Tableau 的域名是 `tableau.example.com`，请为根域输入 `example.com`。
    
    <Location "/">
    AuthType Mellon
    MellonEnable auth
    Require valid-user
    MellonCookieDomain <root domain>
    MellonSPPrivateKeyFile /etc/mellon/mellon.key
    MellonSPCertFile /etc/mellon/mellon.cert
    MellonSPMetadataFile /etc/mellon/sp\_metadata.xml
    MellonIdPMetadataFile /etc/mellon/pre-auth\_idp\_metadata.xml
    MellonEndpointPath /sso
    </Location>
    
    <Location "/tsighk">
    MellonEnable Off
    </Location>
8. 在 `/etc/mellon/conf.d` 目录中创建 `mellonmod.conf` 文件。
    
    该文件包含一个指令，该指令指定 `mod_auth_mellon.so` 文件的位置。此处示例中的位置是文件的默认位置。验证文件是否在此位置，或更改此指令中的路径以匹配 `mod_auth_mellon.so` 的实际位置：
    
    LoadModule auth\_mellon\_module /usr/lib64/httpd/modules/mod\_auth\_mellon.so

### 在 Okta 中创建 Tableau Server 应用程序

1. 在 Okta 仪表板中：“Applications”（应用程序）\>“Applications”（应用程序）\>“Browse App Catalog”（浏览应用程序目录）
2. 在“Browse App Integration Catalog”（浏览应用程序集成目录）中，搜索 `Tableau`，选择“Tableau Server”磁贴，然后单击“Add”（添加）。
3. 在“Add Tableau Server”（添加 Tableau Server） >“General Settings”（常规设置）”上，输入标签，然后单击“Next”（下一步）。
4. 在“Sign-On Options”（登录选项）中，选择“SAML 2.0”，然后向下滚动到“Advanced Sign-on Settings”（高级登录设置）：
    - “SAML Entity ID”（SAML 实体 ID）：输入公共 URL，例如 https://tableau.example.com。
    - “Application user name format”（应用程序用户名格式）：“Email”（电子邮件）
5. 单击“Identity Provider metadata”（身份提供程序元数据）链接以启动浏览器。复制浏览器链接。这是您在以下过程中配置 Tableau 时将使用的链接。
6. 单击“Done”（完成）。
7. 将新的 Tableau Server Okta 应用程序分配给您的用户 (user@example.com)：单击用户名，然后在“Assign Application”（分配应用程序）中分配应用程序。

### 在 Tableau Server 上设置身份验证模块配置

在 Tableau Server 节点 1 上运行以下命令。这些命令指定 Mellon 配置文件在远程独立网关计算机上的文件位置。仔细检查这些命令中指定的文件路径是否映射到远程独立网关计算机上的路径和文件位置。

tsm configuration set -k gateway.tsig.authn\_module\_block -v "/etc/mellon/conf.d/mellonmod.conf" --force-keys
tsm configuration set -k gateway.tsig.authn\_global\_block -v "/etc/mellon/conf.d/global.conf" --force-keys

为了减少停机时间，在启用 SAML 之前请不要应用更改，如下一部分所述。

### 在 Tableau Server 上为 IdP 启用 SAML

在 Tableau Server 节点 1 上运行此过程。

1. 从 Okta 下载 Tableau Server 应用程序元数据。使用您在上一过程中保存的链接：
    
    wget https://dev-66144217.okta.com/app/exk1egxgt1fhjkSeS5d7/sso/saml/metadata -O idp\_metadata.xml
2. 将 TLS 证书和相关密钥文件复制到 Tableau Server。密钥文件必须是 RSA 密钥。有关 SAML 证书和 IdP 要求的详细信息，请参见“_SAML 要求_ ([Linux](https://help.tableau.com/current/server-linux/zh-cn/saml_requ.htm))”。
    
    为了简化证书管理和部署，以及作为安全最佳实践，我们建议使用由主要受信任的第三方证书颁发机构 (CA) 生成的证书。或者，您可以为 TLS 生成自签名证书或使用 PKI 中的证书。
    
    如果您没有 TLS 证书，则可以使用下面的嵌入式过程生成自签名证书。
    
    生成自签名证书
    
    在 Tableau Server 节点 1 上运行此过程。
    
    1. 生成签名根证书颁发机构 (CA) 密钥：
        
        openssl genrsa -out rootCAKey-saml.pem 2048
    2. 创建根 CA 证书：
        
        openssl req -x509 -sha256 -new -nodes -key rootCAKey-saml.pem -days 3650 -out rootCACert-saml.pem
        
        系统将提示您输入证书字段的值。例如：
        
        Country Name (2 letter code) \[XX\]:US
        State or Province Name (full name) \[\]:Washington
        Locality Name (eg, city) \[Default City\]:Seattle
        Organization Name (eg, company) \[Default Company Ltd\]:Tableau
        Organizational Unit Name (eg, section) \[\]:Operations
        Common Name (eg, your name or your server's hostname) \[\]:tableau.example.com
        Email Address \[\]:example@tableau.com
    3. 创建证书和相关密钥（在下面的示例中为 `server-saml.csr` 和 `server-saml.key`）。证书的使用者名称必须与 Tableau 主机的公共主机名称匹配。使用者名称是使用 `-subj` 选项以`"/CN=<host-name>"` 格式设置的，例如：
        
        openssl req -new -nodes -text -out server-saml.csr -keyout server-saml.key -subj "/CN=tableau.example.com"
    4. 使用您在上面创建的 CA 证书签署新证书。以下命令还将以 `crt` 格式输出证书：
        
        openssl x509 -req -in server-saml.csr -days 3650 -CA rootCACert-saml.pem -CAkey rootCAKey-saml.pem -CAcreateserial -out server-saml.crt
    5. 将密钥文件转换为 RSA。Tableau 需要用于 SAML 的 RSA 密钥文件。若要转换密钥，请运行以下命令：
        
        openssl rsa -in server-saml.key -out server-saml-rsa.key
3. 配置 SAML。运行以下命令，指定您的实体 ID 和返回 URL，以及元数据文件、证书文件和密钥文件的路径：
    
    tsm authentication saml configure --idp-entity-id "https://tableau.example.com" --idp-return-url "https://tableau.example.com" --idp-metadata idp\_metadata.xml --cert-file "server-saml.crt" --key-file "server-saml-rsa.key"
    
    tsm authentication saml enable
4. 如果您的组织运行的是 Tableau Desktop 2021.4 或更高版本，则您必须运行以下命令以通过反向代理服务器启用身份验证。
    
    Tableau Desktop 2021.2.1 - 2021.3 的版本无需运行此命令也可工作，前提是您的预身份验证模块（例如 Mellon）配置为允许保留顶级域 Cookie。
    
    tsm configuration set -k features.ExternalBrowserOAuth -v false
5. 应用配置更改：
    
    tsm pending-changes apply

#### 重新启动 tsig-httpd 服务

当您的 Tableau Server 部署应用更改时，重新登录到 Tableau Server 独立网关计算机并运行以下命令以重新启动 tsig-httpd 服务：

sudo su - tableau-tsig
systemctl --user restart tsig-httpd
exit

### 验证 SAML 功能

若要验证端到端 SAML 功能，请使用您在此过程开始时创建的 Tableau 管理员帐户通过公共 URL（例如 https://tableau.example.com）登录到 Tableau Server。

如果 TSM 不启动（“网关错误”），或者在尝试连接时出现浏览器错误，请参见[Tableau Server 独立网关故障排除](https://help.tableau.com/current/guides/enterprise-deployment/zh-cn/edg_part7.htm#Troubles)。

## 配置独立网关的第二个实例上的身份验证模块

成功配置独立网关的第一个实例后，部署第二个实例。此处的示例是安装本主题中描述的 AWS/Mellon/Okta 方案的最终过程。该过程假定您已经在第二个实例上安装了独立网关，如本主题前面所述（[安装独立网关](#Install)）。

部署第二个独立网关的过程需要以下步骤：

1. 在独立网关的第二个实例上：安装 Mellon 身份验证模块。
    
    不要按照本主题前面的描述配置 Mellon 身份验证模块，而是必须按照后续步骤中的描述克隆配置。
2. 在已配置的（第一个）独立网关实例上：
    
    获取现有 Mellon 配置的 tar 副本。tar 备份将保留所有目录层次结构和权限。运行以下命令：
    
    cd /etc
    
    sudo tar -cvf mellon.tar mellon
    
    将 `mellon.tar` 复制到独立网关的第二个实例。
3. 在独立网关的第二个实例上：
    
    将 tar 文件提取（“解压缩”）到 `/etc` 目录中的第二个实例中。运行以下命令：
    
    cd /etc
    
    sudo tar -xvf mellon.tar
4. 在 Tableau Server 部署的节点 1 上：使用来自第二个独立网关的连接信息更新连接文件 (`tsig.json`)。您将需要按照本主题前面（[安装独立网关](#Install)）中的描述检索身份验证密钥。
    
    此处显示了一个示例连接文件 (`tsig.json`)：
    
    {
    "independentGateways": \[
     {
       "id": "ip-10-0-1-169.ec2.internal",
       "host": "ip-10-0-1-169.ec2.internal",
       "port": "21319",
       "protocol" : "http",
       "authsecret": "13660-27118-29070-25482-9518-22453"
     },
     {
       "id": "ip-10-0-2-230.ec2.internal",
       "host": "ip-10-0-2-230.ec2.internal",
       "port": "21319",
       "protocol" : "http",
       "authsecret": "9055-27834-16487-27455-30409-7292"
     }\]
     }
5. 在 Tableau Server 部署的节点 1 上：运行以下命令以更新配置：
    
    tsm stop
    
    tsm topology external-services gateway update -c tsig.json
    
    tsm start
6. 在独立网关的两个实例上：在 Tableau Server 启动时，重新启动 `tsig-httpd` 进程：
    
    sudo su - tableau-tsig
    
    systemctl --user restart tsig-httpd
    
    exit
7. 在 AWS 的“EC2”>“目标组”中：更新目标组以包含运行第二个独立网关实例的 EC2 实例。
    
    选择刚刚创建的目标组，然后单击“目标”选项卡： 
    
    - 单击“编辑”。
    - 选择第二台独立网关计算机的 EC2 实例，然后单击“添加到已注册”。单击“保存”。