附录 - 具有 Apache 示例部署的 Web 层

本主题提供了一个端到端过程,该过程描述了如何在示例 AWS 参考架构中实现 Web 层:示例配置由以下组件组成:

  • AWS 应用程序负载平衡器
  • Apache 代理服务器
  • Mellon 身份验证模块
  • Okta IdP
  • SAML 身份验证

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

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

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

  1. 安装 Apache
  2. 配置反向代理以测试与 Tableau Server 的连接
  3. 在代理上配置负载平衡
  4. 配置 AWS 应用程序负载平衡器

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

安装 Apache

在两个 EC2 主机(代理 1 和代理 2)上运行以下过程。如果您根据参考架构示例在 AWS 中进行部署,那么您应该有两个可用区并在每个可用区中运行单个代理服务器。。

  1. 安装 Apache:

    sudo yum update -y
    sudo yum install -y httpd
  2. 配置在重启时启动 Apache:

    sudo systemctl enable --now httpd

  3. 验证您安装的 httpd 版本是否包括 proxy_hcheck_module

    sudo httpd -M

    proxy_hcheck_module 为必需。如果您的 httpd 版本不包含此模块,则更新到包含它的 httpd 版本。

配置代理以测试与 Tableau Server 的连接

在其中一台代理主机(代理 1)上运行此过程。此步骤的目的是验证 Internet 到您的代理服务器与私有安全组中的 Tableau Server 之间的连接。

  1. 创建一个名为 tableau.conf 的文件,并将其添加到 /etc/httpd/conf.d 目录。

    复制以下代码,并使用 Tableau Server 节点 1 的专用 IP 地址指定 ProxyPassProxyPassReverse 键。

    重要信息:下面显示的配置不安全,不应在生产中使用。此配置仅应在安装过程中用于验证端到端连接。

    举例来说,如果节点 1 的专用 IP 地址是 10.0.30.32,则 tableau.conf 文件的内容将为:

    <VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass "/" "http://10.0.30.32:80/"
    ProxyPassReverse "/" "http://10.0.30.32:80/"
    </VirtualHost>
  2. 重启 httpd:

    sudo systemctl restart httpd

验证:基本拓扑配置

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

如果您的浏览器中未加载 Tableau Server 登录页面,请在代理 1 主机上执行以下故障排除步骤:

  • 作为故障排除的第一步,停止然后启动 httpd。
  • 仔细检查 tableau.conf 文件。验证节点 1 专用 IP 是否正确。验证双引号并仔细检查语法。
  • 使用节点 1 专用 IP 地址在反向代理服务器上运行 curl 命令,例如 curl 10.0.1.90。如果 shell 不返回 html,或者如果返回 Apache 测试网页的 html,请验证“公共”和“专用”安全组之间的协议/端口配置。
  • 使用代理 1 专用 IP 地址运行 curl 命令,例如 curl 10.0.0.163。如果 shell 返回 Apache 测试网页的 html 代码,则说明代理文件配置不正确。
  • 在对代理文件或安全组进行任何配置更改之后,请始终停止/启动 httpd (sudo systemctl restart httpd)。
  • 确保 TSM 在节点 1 上运行。

在代理上配置负载平衡

  1. 在您创建 tableau.conf 文件的同一代理主机(代理 1)上,移除现有的虚拟主机配置,并编辑文件以包含负载平衡逻辑。

    例如:

    <VirtualHost *:80>
    ServerAdmin admin@example.com
    #Load balancing logic.
    ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED 
    <Proxy balancer://tableau>
    #Replace IP addresses below with the IP addresses to the Tableau Servers running the Gateway service.
    BalancerMember http://10.0.3.40/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    BalancerMember http://10.0.4.151/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / balancer://tableau/
    ProxyPassReverse / balancer://tableau/ 
    </VirtualHost>
  2. 停止然后启动 httpd:

    sudo systemctl stop httpd
    sudo systemctl start httpd
  3. 通过浏览到代理 1 的公共 IP 地址来验证配置。

将配置复制到第二个代理服务器

  1. 从代理 1 中复制 tableau.conf 文件,并将其保存到代理 2 主机上的 /etc/httpd/conf.d 目录。
  2. 停止然后启动 httpd:

    sudo systemctl stop httpd
    sudo systemctl start httpd
  3. 通过浏览到代理 2 的公共 IP 地址来验证配置。

配置 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
    • 可用区:
      • 为您的数据中心区域选择 ab
      • 在每个相应的下拉选择器中,选择 Public 子网(您的代理服务器所在的位置)。
    • 单击:“配置安全设置”
  2. “配置安全设置”页面

    • 上载您的公共 SSL 证书。
    • 单击“下一步:配置安全组”
  3. “配置安全组”页面:

    • 选择 Public 安全组。如果选择了“默认”安全组,则清除该选择。
    • 单击“下一步:配置路由”
  4. “配置路由”页面

    • 目标组:现有目标组。
    • 名称:选择您之前创建的目标组
    • 单击“下一步:注册目标”
  5. “注册目标”页面

    • 应会显示您之前配置的两个代理服务器实例。
    • 单击“下一步:审查”
  6. “查看”页面

    单击“创建”

基本配置

  • 指定名称
  • 方案:面向互联网(默认)
  • IP 地址类型:ip1v4(默认)

网络映射

  • VPC:选择您已安装所有内容的 VPC
  • 映射:
    • 为您的数据中心区域选择 ab(或类似的)可用区
    • 在每个相应的下拉选择器中,选择 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。该示例介绍了如何配置 Tableau Server 和 Apache 代理服务器以使用 HTTP。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 开发人员网页(链接在新窗口中打开)

    为 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 进行预身份验证

    1. 在运行 Apache 代理服务器的 EC2 实例上,运行以下命令以安装 PHP 和 Mellon 模块:

      sudo yum install httpd php mod_auth_mellon

    2. 创建 /etc/httpd/mellon 目录

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

    在两个代理服务器上运行此过程。

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

    1. 更改目录:

      cd /etc/httpd/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/httpd/conf.d 目录中创建 mellon.conf 文件:

      sudo nano /etc/httpd/conf.d/mellon.conf

    6. 将以下内容复制到 mellon.conf 中。

      <Location />
      MellonSPPrivateKeyFile /etc/httpd/mellon/mellon.key
      MellonSPCertFile /etc/httpd/mellon/mellon.cert
      MellonSPMetadataFile /etc/httpd/mellon/sp_metadata.xml
      MellonIdPMetadataFile /etc/httpd/mellon/pre-auth_idp_metadata.xml
      MellonEndpointPath /sso
      MellonEnable "info"
      </Location>
    7. 将以下内容添加到现有 tableau.conf 文件中:

      <VirtualHost *:80> 块内部,添加以下内容。使用实体 ID 中的公共主机名更新 ServerName

      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info 

      <VirtualHost *:80> 块外部添加 Location 块。使用顶级域更新 MellonCookieDomain 以保存 Cookie 信息,如下所示:

      <Location />
      AuthType Mellon
      MellonEnable auth
      Require valid-user
      MellonCookieDomain example.com					
      </Location>

      完整的 tableau.conf 文件看起来应类似于以下示例:

      <VirtualHost *:80>
      ServerAdmin admin@example.com
      ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
      Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
      <Proxy balancer://tableau>
      BalancerMember http://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      BalancerMember http://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      ProxySet stickysession=ROUTEID
      </Proxy>
      ProxyPreserveHost On
      ProxyPass / balancer://tableau/
      ProxyPassReverse / balancer://tableau/
      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info 
      </VirtualHost>
      <Location />
      AuthType Mellon
      MellonEnable auth
      Require valid-user
      MellonCookieDomain example.com
      </Location>
    8. 验证配置。运行以下命令:

      sudo apachectl configtest

      如果配置测试返回错误,请修复所有错误并再次运行 configtest。一个成功的配置将返回,Syntax OK

    9. 重启 httpd:

      sudo systemctl restart httpd

    在 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 上为 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(链接在新窗口中打开))”。

      为了简化证书管理和部署,以及作为安全最佳实践,我们建议使用由主要受信任的第三方证书颁发机构 (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.csrserver-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

    验证 SAML 功能

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

    验证故障排除

    错误请求:这种情况下的一个常见错误是来自 Okta 的“错误请求”错误。当浏览器缓存来自先前 Okta 会话的数据时,通常会发生此问题。举例来说,如果您以 Okta 管理员身份管理 Okta 应用程序,然后尝试使用不同的启用 Okta 的帐户访问 Tableau,则来自管理员数据的会话数据可能会导致“错误请求”错误。如果即使在您清除本地浏览器缓存后此错误仍然存在,请尝试通过连接其他浏览器来验证 Tableau 方案。

    “错误请求”错误的另一个原因是您在 Okta、Mellon 和 SAML 配置过程中输入的许多 URL 之一中的拼写错误。仔细检查所有这些 URL。

    通常是 Apache 服务器上的 httpd error.log 文件将指定导致错误的 URL。

    未找到 - 在此服务器上找不到请求的 URL:此错误表示许多配置错误之一。

    如果用户使用 Okta 进行身份验证,然后收到此错误,则很可能是您在配置 SAML 时将 Okta 预身份验证应用程序上载到 Tableau Server。验证您是否在 Tableau Server 上配置了 Okta Tableau Server 应用程序元数据,而不是 Okta 预身份验证应用程序元数据

    其他疑难解答步骤:

    • 仔细检查 tableau.conf 中是否有拼写错误或配置错误
    • 查看 Okta 预身份验证应用程序设置。确保按照本主题中指定的方式设置 HTTP 与 HTTPS 协议。
    • 在两个代理服务器上重新启动 httpd。
    • 验证 sudo apachectl configtest 在两个代理服务器上是否都返回“Syntax OK”。
    • 验证测试用户是否已分配给 Okta 中的两个应用程序。
    • 验证是否在负载平衡器和关联的目标组上设置了粘性

    配置从负载平衡器到 Tableau Server 的 SSL/TLS

    一些组织需要从客户端到后端服务的端到端加密通道。到目前为止所描述的默认参考架构指定了从客户端到在您组织的 Web 层中运行的负载均衡器的 SSL。

    若要配置从从负载平衡器到 Tableau Server 的 SSL,您必须:

    • 在 Tableau 和代理服务器上安装有效的 SSL 证书。
    • 配置从负载平衡器到反向代理服务器的 SSL。
    • 配置从代理服务器到 Tableau Server 的 SSL。
    • 您还可以配置从 Tableau Server 到 PostgreSQL 实例的 SSL。

    本主题的其余部分在示例 AWS 示例参考架构的上下文中描述了此实现。

    示例:在 AWS 参考架构中配置 SSL/TLS

    本节介绍如何在 Tableau 上配置 SSL 以及在 Apache 代理服务器上配置 SSL这些都在示例 AWS 参考架构中运行。

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

    步骤 1:收集证书和相关密钥

    为了简化证书管理和部署,以及作为安全最佳实践,我们建议使用由主要受信任的第三方证书颁发机构 (CA) 生成的证书。

    或者,您可以为 TLS 生成自签名证书或使用 PKI 中的证书。

    以下过程描述如何生成自签名证书。如果您按照我们的建议使用第三方证书,则可以跳过此过程。

    在代理主机之一上运行此过程。生成证书和关联的密钥后,您将与其他代理主机和 Tableau Server 节点 1 共享它。

    1. 生成签名根证书颁发机构 (CA) 密钥:

      openssl genrsa -out rootCAKey.pem 2048

    2. 创建根 CA 证书:

      openssl req -x509 -sha256 -new -nodes -key rootCAKey.pem -days 3650 -out rootCACert.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. 创建证书和相关密钥(在下面的示例中为 serverssl.csrserverssl.key)。证书的使用者名称必须与 Tableau 主机的公共主机名称匹配。使用者名称是使用 -subj 选项以"/CN=<host-name>" 格式设置的,例如:

      openssl req -new -nodes -text -out serverssl.csr -keyout serverssl.key -subj "/CN=tableau.example.com"

    4. 使用您在步骤 2 中创建的 CA 证书签署新证书。以下命令还将以 crt 格式输出证书:

      openssl x509 -req -in serverssl.csr -days 3650 -CA rootCACert.pem -CAkey rootCAKey.pem -CAcreateserial -out serverssl.crt

    步骤 2:为 SSL 配置代理服务器

    在两个代理服务器上运行此过程。

    1. 安装 Apache ssl 模块:

      sudo yum install mod_ssl

    2. 创建 /etc/ssl/private 目录:

      sudo mkdir -p /etc/ssl/private

    3. 将 crt 和 key 文件复制到以下 /etc/ssl/ 路径:

      sudo cp serverssl.crt /etc/ssl/certs/

      sudo cp serverssl.key /etc/ssl/private/

    4. 使用以下更新对现有 tableau.conf 进行更新:

      • 添加 SSL 重写块:
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =tableau.example.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
      • 在 SSL 重写块中,更新 RewriteCond 服务器名称:添加您的公共主机名,例如,tableau.example.com
      • <VirtualHost *:80> 更改为 <VirtualHost *:443>
      • 使用以下内容封装 <VirtualHost *:443> <Location /> 块: <IfModule mod_ssl.c> ...</IfModule>
      • BalancerMember: 将协议从 http 更改为 https
      • <VirtualHost *:443> 块内添加 SSL* 元素:
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/serverssl.crt
        SSLCertificateKeyFile /etc/ssl/private/serverssl.key
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off
      • LogLevel 元素中:添加 ssl:warn
      • 可选:如果您已安装并配置了身份验证模块,则 tableau.conf 文件中可能包含其他元素。例如, <Location /> </Location> 块将包含元素。

      此处显示了针对 SSL 配置的示例 tableau.conf 文件:

      RewriteEngine on
      RewriteCond %{SERVER_NAME} =tableau.example.com
      RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
      
      <IfModule mod_ssl.c>
      <VirtualHost *:443>
      ServerAdmin admin@example.com
      ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
      Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
      <Proxy balancer://tableau>
      BalancerMember https://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      BalancerMember https://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      ProxySet stickysession=ROUTEID
      </Proxy>
      ProxyPreserveHost On
      ProxyPass / balancer://tableau/
      ProxyPassReverse / balancer://tableau/
      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info ssl:warn
      SSLEngine on
      SSLCertificateFile /etc/ssl/certs/serverssl.crt
      SSLCertificateKeyFile /etc/ssl/private/serverssl.key
      SSLProxyEngine on
      SSLProxyVerify none
      SSLProxyCheckPeerName off
      SSLProxyCheckPeerExpire off
      </VirtualHost>
      <Location />
      #If you have configured a pre-auth module (e.g. Mellon) include those elements here.
      </Location>
      </IfModule>
    5. 添加 index.html 文件以抑制 403 错误:

      sudo touch /var/www/html/index.html
    6. 重启 httpd:

      sudo systemctl restart httpd

    步骤 3:为外部 SSL 配置 Tableau Server

    将 serverssl.crt 和 serverssl.key 文件从代理 1 主机复制到初始 Tableau Server(节点 1)。

    在节点 1 上运行以下命令:

    tsm security external-ssl enable --cert-file serverssl.crt --key-file serverssl.key
    tsm pending-changes apply

    步骤 4:可选身份验证配置

    如果您为 Tableau 配置了外部身份提供程序,则您可能需要更新 IdP 管理仪表板中的返回 URL。

    举例来说,如果您使用 Okta 预身份验证应用程序,您将需要更新应用程序以对收件人 URL 和目标 URL 使用 HTTPS 协议。

    步骤 5:为 HTTPS 配置 AWS 负载平衡器

    如果您按照本指南中的说明使用 AWS 负载平衡器进行部署,那么您可以重新配置 AWS 负载平衡器以将 HTTPS 流量发送到代理服务器:

    1. 取消注册现有 HTTP 目标组:

      “目标组”中,选择已为负载平衡器配置的 HTTP 目标组,单击“操作”,然后单击“注册和注销实例”

      “注册和注销目标”页面上,选择当前配置的实例,单击“注销”,然后单击“保存”

    2. 创建 HTTPS 目标组

      “目标组”>“创建目标组”

      • 选择“实例”
      • 输入目标组名称,例如 TG-internal-HTTPS
      • 选择您的 VPC
      • 协议:HTTPS 443
      • “运行状况检查”>“高级运行状况检查设置”>“成功代码”下,将代码列表追加为:200,303
      • 单击“创建”
    3. 选择刚刚创建的目标组,然后单击“目标”选项卡: 

      • 单击“编辑”
      • 选择正在运行代理应用程序的 EC2 实例,然后单击“添加到已注册”
      • 单击“保存”
    4. 创建目标组后,您必须启用粘性:

      • 打开 AWS 目标组页面(“EC2”>“负载平衡”>“目标组”),选择您刚刚设置的目标组实例。在“操作”菜单上,选择“编辑属性”
      • “编辑属性”页面上,选择“粘性” ,指定持续时间 1 day,然后保存更改
    5. 在负载平衡器上,更新侦听器规则。选择您为此部署配置的负载平衡器,然后单击“侦听器”选项卡。

      • 对于“HTTP:80”,单击“查看/编辑规则”。在生成的“规则”页面上,单击编辑图标(一次位于页面顶部,然后再次位于规则旁边)以编辑规则。删除现有 THEN 规则,并通过单击“添加操作”>“重定向至...”替换该规则。在生成的 THEN 配置中,指定 HTTPS 和端口 443,并将其他选项保留为默认设置。保存设置,然后单击“更新”
      • 对于“HTTP:443”,单击“查看/编辑规则”。在生成的“规则”页面上,单击编辑图标(一次位于页面顶部,然后再次位于规则旁边)以编辑规则。在“THEN”配置中的“转发到...”下,将目标组更改为您刚刚创建的 HTTPS 组。在“组级粘性”下,启用粘性并将持续时间设置为 1 天。保存设置,然后单击“更新”

    步骤 6:验证 SSL

    通过浏览到 https://tableau.example.com 来验证配置。

    感谢您的反馈!您的反馈已成功提交。谢谢!