---
schema_version: "1"
id: 7518de533b2ae5ed045b279e0f7c41623e3cda3beb2a7dab22852bd34029999b
title: 附錄 - 具有 Apache 示例部署的 Web 層
collection: tableau
version: current
locale: zh-tw
portal_url: https://docs.salesforce.com/tableau/current/zh-tw/guides/enterprise-deployment/edg_part_app-apache.md
canonical_url: https://help.tableau.com/current/guides/enterprise-deployment/zh-tw/edg_part_app-apache.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 98a46fbaf413d1b7221c137cb8020c9f5293a524cb8cf91310853174ab0cf9e4
description: "appendix: deploy the Tableau Server web tier using Apache as a reverse proxy and load balancer."
---
[跳至主要內容](#main-content)

# 附錄 - 具有 Apache 示例部署的 Web 層

**附註**：Tableau不再更新《企業部署指南》。儘管我們仍然推薦將此處描述的參考架構作為 AWS 中 Tableau Server 的有效部署模型，但自上次更新以來，具體的設定過程可能已變更。請始終將這些步驟與最新的 [Tableau Server 說明](https://help.tableau.com/current/server/zh-tw/get_started_server.htm) 文件進行交叉引用，以確保準確無誤。

本主題的其餘部分會介紹一個端到端的過程，該過程描述如何在範例 AWS 參考架構中實作 Web 層。範例設定由以下元件組成：

- AWS 應用程式負載平衡器
- Apache Proxy 伺服器
- Mellon 驗證模組
- Okta IdP
- SAML 驗證

**附註**：本節中提供的範例 Web 層設定包括部署協力廠商軟體和服務的詳細程序。我們已盡最大努力驗證和記錄啟用 Web 層方案的過程。但是，協力廠商軟體可能會發生變化，或者您的方案可能與此處描述的參考架構不同。權威設定細節和支援請參考協力廠商文件。

整個區段中的 Linux 範例展示了 RHEL-like 發行版的命令。具體來說，這裡的命令是使用 Amazon Linux 2 發行版開發的。若執行的是 Ubuntu 發行版，請編輯相對應的命令。

在此範例中部署 Web 層遵循逐步設定和驗證程序。核心 Web 層設定包含以下步驟，用於在 Tableau 和 Internet 之間啟用 HTTP。Apache 執行並設定為在 AWS 應用程式負載均衡器後面進行反向 proxy/負載均衡：

1. 安裝 Apache
2. 設定反向 Proxy 測試與 Tableau Server 的連線
3. 在 proxy 上設定負載平衡
4. 配置 AWS 應用程式負載均衡器

設定 Web 層並驗證與 Tableau 的連線後，使用外部提供者設定身份驗證。

## 安裝 Apache

在兩個 EC2 主機（proxy 1 和 proxy 2）上執行以下過程。如果根據參考架構範例在 AWS 中進行部署，那麼應該擁有兩個可用區域且在每個區域中執行單個 Proxy 伺服器。

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 版本。

## 配置 Proxy 測試與 Tableau Server 的連線

在其中一台 proxy 主機（proxy 1）上執行此過程。此步驟的目的是驗證 Internet 到Proxy 伺服器與私人安全群組中的 Tableau Server 之間的連線。

1. 建立名為 `tableau.conf` 的檔案，並將其新增到`/etc/httpd/conf.d` 目錄。
    
    複製以下指令碼並指定 `ProxyPass` 和 `ProxyPassReverse` 具有 Tableau Server 節點 1 的私有 IP 位址的金鑰。
    
    **重要提示**：下面顯示的設定不安全，不應在生產中使用。此設定僅應在安裝過程中用於驗證端到端連線。
    
    例如，如果節點 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 登入頁面，請在 Proxy 1 主機上執行以下疑難排解步驟：

- 停止，然後啟動 httpd 作為疑難排解的第一步。
- 仔細檢查 `tableau.conf` 檔案。驗證節點 1 私有 IP是否正確。驗證雙引號並仔細檢查語法。
- 在帶有節點 1 私有 IP 位址的反向 Proxy 伺服器上執行 `curl` 命令，例如 `curl 10.0.1.90`。如果 shell 不返回 html，或者如果 Apache 測試網頁返回 html，則請驗證「公共」和「私有」安全性群組之間的通訊協定/連接埠設定。
- 執行帶有 Proxy 1 私有 IP 位址的 `curl` 命令，例如 `curl 10.0.0.163`。如果 shell 返回 Apache 測試網頁的 html 代碼，則說明 proxy 設定不正確。
- 在對 proxy 檔案或安全性群組進行組態變更之後，請務必重新啟動 httpd (`sudo systemctl restart httpd`)。
- 確保 TSM 在節點 1 上執行。

## 在 proxy 上設定負載平衡

1. 在建立的同一 proxy 主機（proxy 1）上 `tableau.conf` 檔案，移除現有的虛擬主機設定並編輯檔案以包含負載平衡邏輯。
    
    例如：
    
    <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. 瀏覽到 Proxy 1 的公用 IP 位址驗證設定。

## 將設定複製到第二個 proxy 伺服器

1. 從 proxy 1 複製 `tableau.conf`檔案並將其儲存到 proxy 2 主機上的 `/etc/httpd/conf.d` 目錄。
2. 停止，然後啟動 httpd：
    
    sudo systemctl stop httpd
    sudo systemctl start httpd
3. 瀏覽到 Proxy 2 的公用 IP 位址來驗證設定。

## 配置 AWS 應用程式負載均衡器

將負載平衡器設定為 HTTP 偵聽器。此處的過程描述瞭如何在 AWS 中新增負載平衡器。

#### 步驟 1：建立目標群組

目標群組是定義執行 Proxy 伺服器的 EC2 實例的 AWS 配置。這些是來自 LBS 的流量的目標。

1. EC2 > 目標群組 > 建立目標群組
2. 在建立頁面上：
    
    - 輸入目標群組名稱，例如 `TG-internal-HTTP`
    - 目標類型：執行個體
    - 協定：HTTP
    - 連接埠：80
    - VPC：選取您的 VPC
    - 在健康情況檢查\>進階健康情況檢查設定\>成功代碼下，附加代碼清單以讀入：`200,303`。
    - 按一下「建立」
3. 選取剛剛建立的目標群組，然後按一下「目標」索引標籤： 
    
    - 按一下 \[編輯\]。
    - 選取要執行 Proxy 應用程式的 EC2 執行個體（或單個執行個體，如果一次設定一個），然後按一下新增到已註冊。
    - 按一下「儲存」。

#### 步驟 2：啟動負載均衡器精靈

1. EC2 > 負載平衡器 > 建立負載平衡器
2. 在「選取負載平衡器類型」頁面上，建立一個應用程式負載均衡器。

**附註**：為設定負載平衡器而顯示的 UI 在 AWS 資料中心之間不一致。下面的「精靈設定」過程與從**步驟 1 設定負載平衡器**開始的 AWS 設定精靈一致。   
  
如果資料中心在底部包含**建立負載平衡器**按鈕的單個頁面中顯示所有設定，請按照下方「單一頁面設定」過程進行操作。

1. 設定負載平衡器頁面：
    
    - 指定名稱
    - 結構：以網際網路為對象（預設）
    - IP 位址類型：ipv4（預設）
    - 接聽程式（接聽程式和路由）：
        1. 保留預設的 HTTP 接聽程式
        2. 按一下新增接聽程式並新增 `HTTPS:443`
    
    - VPC：選取已安裝所有內容的 VPC
    - 可用區域：
        - 為資料中心區域選取 **a** 和 **b**
        - 在每個相應的下拉式選取器中，選取公用子網路（proxy 伺服器所在位置）。
    - 按一下：設定安全設定
2. 設定安全性設定頁面
    
    - 上傳公用 SSL 憑證。
    - 按一下「下一步：設定安全群組」。
3. 設定安全性群組頁面：
    
    - 選取公用安全性群組。如果選取預設安全性群組，則清除該選取。
    - 按一下「下一步：設定路由」。
4. 設定路由頁面
    
    - 目標群體：現有的目標群體。
    - 名稱：選取之前建立的目標群組
    - 按一下「下一步：註冊目標」。
5. 註冊目標頁面
    
    - 應顯示之前設定的兩個 proxy 伺服器執行個體。
    - 按一下「下一步：檢閱」:。
6. 評論頁面
    
    按一下「建立」。

基本設定

- 指定名稱
- 結構：以網際網路為對象（預設）
- IP 位址類型：ipv4（預設）

網路對應

- VPC：選取已安裝所有內容的 VPC
- 對應：
    - 為您的數據中心區域選擇**a**和**b** （或類似的）「可用區域」
    - 在每個相應的下拉式選取器中，選取公用子網路（proxy 伺服器所在位置）。

安全性群組

- 選取公用安全性群組。如果選取預設安全性群組，則清除該選取。

接聽程式和路由

- 保留預設的 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 級錯誤，那可能需要重新啟動 Proxy 伺服器。

## 使用公用 Tableau URL 更新 DNS

使用 AWS 負載均衡器描述中的網域 DNS 區域名稱在 DNS 中建立 CNAME 值。流向您的 URL (tableau.example.com) 的流量應傳送到 AWS 公用 DNS 名稱。

## 驗證連線

DNS 更新完成後，應該能夠輸入公用 URL 巡覽到 Tableau Server 登入頁面，例如，`https://tableau.example.com`。

## 身份驗證組態範例：帶有外部 IdP 的 SAML

以下範例介紹如何為 AWS 參考架構中執行的 Tableau 部署，設定和配置帶有 Okta IdP 跟 Mellon 驗證模組的 SAML。該範例介紹如何設定 Tableau Server 和 Apache proxy 伺服器以使用 HTTP。Okta 將以 HTTPS 向 AWS 負載均衡器傳送請求，但所有內部流量都將以 HTTP 傳輸。在為此案例進行設定時，請在設定 URL 字串時注意 HTTP 與 HTTPS 協定。

此範例使用 Mellon 作為反向 proxy 伺服器上的預先身份驗證服務提供者模組。此設定可確保只有經過身份驗證的流量連線到 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 應用程式

這些應用程式都與您需要分別在反向 proxy 和 Tableau Server 上設定的不同中繼資料關聯。

此過程描述如何建立和設定 Okta 預身份驗證應用程式。在本主題的後面，您將建立 Okta Tableau Server 應用程式。有關使用者受限的免費測試 Okta 帳戶，請參閱[Okta 開發者網頁](https://developer.okta.com/signup/)。

為 Mellon 預先身份驗證服務提供者建立 SAML 應用程式整合。

1. 打開 Okta 管理儀表板 >應用程式\>建立 App 集合。
2. 在新建 app 集合頁面上，選擇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 中：應用程式\>應用程式\>您的新應用程式（例如 `Tableau Pre-Auth`）>登入
    - 在 SAML 簽署憑證旁邊，按一下檢視 SAML 設定說明。
    - 在如何為<預授權>應用程式設定 SAML 2.0 頁面上，向下捲動到可選部分，向您的 SP 提供者提供以下 IDP 中繼資料。
    - 複製 XML 欄位的內容，並將它們儲存在名為 `pre-auth_idp_metadata.xml` 的檔案中。
7. （可選）設定多重要素驗證：
    
    - 在 Okta 中：應用程式\>應用程式\>您的新應用程式（例如 `Tableau Pre-Auth`）>登入
    - 在「登入原則」下，按一下「新增規則」。
    - 在「應用程式登入規則」上，指定名稱和不同 MFA 選項。要測試功能，可以將所有選項保留為預設值。但是，在「動作」下，必須選取「提示要素」，然後指定使用者必須登入的頻率。按一下「儲存」。

### 建立和指派 Okta 使用者

1. 在 Okta 中，使用在 Tableau 中建立的相同使用者名稱建立一個使用者 (user@example.com)：「目錄」\>「人員」\>「新增人員」。
2. 建立使用者後，將新的 Okta 應用程式指派給該人員：按一下使用者名稱，然後在「指派應用程式」中指派應用程式。

## 安裝 Mellon 進行預身份驗證

1. 在執行 Apache proxy 伺服器的 EC2 執行個體上以下命令以安裝 PHP 和 Mellon 模組：
    
    sudo yum install httpd php mod\_auth\_mellon
2. 建立 `/etc/httpd/mellon` 目錄

## 將 Mellon 設定為預身份驗證模組

在兩個 proxy 伺服器上執行此過程。

您必須擁有從 Okta 設定建立的 `pre-auth_idp_metadata.xml` 檔案複本。

1. 變更目錄：
    
    cd /etc/httpd/mellon
2. 建立服務提供者後設資料。執行 `mellon_create_metadata.sh` 指令碼。命令中必須包含您組織的實體 ID 和返回 URL。
    
    在 Okta 中，返回 URL 被稱為_單一登入 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>` 區塊外新增「位置」區塊。使用頂層網域更新 `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
    
    如果組態測試回傳錯誤，請修復所有錯誤並再次執行組態測試。成功的組態會回傳，`Syntax OK` 。
9. 重新啟動 httpd：
    
    sudo systemctl restart httpd

## 在 Okta 中建立 Tableau Server 應用程式

1. 在 Okta 儀表板中：「應用程式」\>「應用程式」\>「瀏覽應用程式目錄」
2. 在瀏覽應用程式整合目錄中，搜尋 `Tableau`，選取 Tableau 伺服器 動態磚，然後按一下 「新增」。
3. 在「新增 Tableau Server」\>「一般設定」上，輸入標籤，然後按一下「下一步」。
4. 在登入選項中，選取 SAML 2.0 並向下滾動到進階登入設定：
    - SAML 實體 ID：輸入公用 URL，例如 https://tableau.example.com。
    - 應用程式使用者名稱格式：Email
5. 按一下「身份提供者中繼資料」連結以啟動瀏覽器。複製瀏覽器連結。這是在以下過程中設定 Tableau 時將使用的連結。
6. 按一下 \[完成\]。
7. 將新的 Tableau Server Okta 應用程式指派給您的使用者 (user@example.com)：按一下使用者名稱，然後在「指派應用程式」中指派應用程式。

### 在 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-tw/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 或更高版本，則必須執行以下命令啟用透過反向 proxy 伺服器的驗證。
    
    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 之一中發生拼寫錯誤。請仔細檢查所有這些輸入。

通常 Apache 伺服器上的 httpd `error.log` 檔案會指定導致錯誤的 URL。

**找不到 - 在此伺服器上找不到請求的 URL** ：此錯誤代表許多設定錯誤的其中一種。

如果使用者使用 Okta 進行身份驗證，然後收到此錯誤，則很可能是在設定 SAML 時將 Okta 預身份驗證應用程式上傳到 Tableau Server。驗證出您在 Tableau Server 上設定了 Okta Tableau Server 應用程式中繼資料，而不是 Okta 預身份驗證應用程式中繼資料

其他疑難排解步驟:

- 仔細檢查 `tableau.conf` 是否有錯字或設定錯誤
- 檢查 Okta 預身份驗證應用程式設定。確定 HTTP 與 HTTPS 協定按照此主題指定步驟設定。
- 在兩個 proxy 伺服器上皆重新啟動 httpd。
- 驗證 `sudo apachectl configtest` 在兩個 proxy 伺服器上都傳回「語法正常」。
- 驗證測試使用者是否已指派給 Okta 中的兩個應用程式。
- 驗證是否在負載平衡器和關聯的目標群組上設定綁定

## 設定從負載平衡器到 Tableau Server 的 SSL/TLS

一些組織需要從用戶端到後端服務的端到端加密通道。到目前為止所述的預設參考架構可指定從用戶端到在您組織的 Web 層中執行的負載平衡器的 SSL。

要設定從負載平衡器到 Tableau Server 的 SSL，必須：

- 在 Tableau 和 Proxy 伺服器上安裝有效的 SSL 憑證。
- 設定從負載平衡器到反向 Proxy 伺服器的 SSL。
- 設定從 Proxy 伺服器到 Tableau Server 的 SSL。
- 還可以設定從 Tableau Server 到 PostgreSQL 執行個體的 SSL。

本主題的其餘部分在範例 AWS 範例參考架構的內容中描述了此實作。

## 範例：在 AWS 參考架構中設定 SSL/TLS

本節介紹如何在 Tableau 上設定 SSL 以及如何在 Apache proxy 伺服器上設定 SSL，這些都在範例 AWS 參考架構中執行。

此範例的整個 Linux 程序展示了 RHEL-like 發行版的命令。具體來說，這裡的命令是使用 Amazon Linux 2 發行版開發的。若執行的是 Ubuntu 發行版，請編輯相對應的命令。

### 第 1 步：收集憑證和相關金輪

為簡化憑證管理和部署，並作為安全性最佳做法，我們建議使用由受信任的主要協力廠商憑證頒發授權單位 (CA) 產生的憑證。

或者，您可以產生自我簽署憑證或使用針對 TLS 的 PKI 憑證。

以下過程如何產生自我簽署憑證。如果按照我們的建議使用協力廠商憑證，則可以跳過此過程。

在其中一台 proxy 主機上執行此過程。生成憑證和相關金鑰後，會將它們分享到其他 proxy 主機和 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.csr` 和 `serverssl.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 設定 proxy 伺服器

在兩個 proxy 伺服器上執行此過程。

1. 安裝 Apache ssl 模組：
    
    `sudo yum install mod_ssl`
2. 建立`/etc/ssl/private`目錄：
    
    `sudo mkdir -p /etc/ssl/private`
3. 將 crt 和金鑰檔複製到以下`/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>` 和具有 `<IfModule mod_ssl.c>` 的 `<Location />` 區塊回繞。`</IfModule>`.
    - `BalancerMember`：將協定`http`變更到`https`。
    - 將`SSL*`元素加入到 `<VirtualHost *:443>`區塊：
        
        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. 新增 索引.html 檔以抑制 403 錯誤：
    
    sudo touch /var/www/html/index.html
6. 重新啟動 httpd：
    
    sudo systemctl restart httpd

### 步驟 3：為外部 SSL 設定 Tableau Server

將 serverssl.crt 和 serverssl.key 檔從 Proxy 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 流量發送到 proxy 伺服器：

1. 註銷現有的 HTTP 目標群組：
    
    在目標群組中，選擇已為負載平衡器設定的 HTTP 目標群組，按一下動作，然後按一下註冊和註銷執行個體。
    
    在註冊和註銷目標頁面，選擇目前設定的執行個體，按一下註銷，然後按一下儲存。
2. 建立 HTTPS 目標群組：
    
    目標群組 > 建立目標群組
    
    - 選取「執行個體」
    - 輸入目標群組名稱，例如 `TG-internal-HTTPS`
    - 選取 VPC
    - 協定：HTTPS 443
    - 在健康情況檢查\>進階健康情況檢查設定\>成功代碼下，附加代碼清單以讀入：`200,303`。
    - 按一下「建立」。
3. 選取剛剛建立的目標群組，然後按一下「目標」索引標籤： 
    
    - 按一下 編輯
    - 選取正在執行 Proxy 應用程式的 EC2 執行個體，然後按一下新增至已註冊。
    - 按一下「儲存」。
4. 建立目標群組後，必須啟用相黏：
    
    - 開啟 AWS 目標群組頁面（EC2\> 負載平衡\> 目標群組），選取剛剛設定的目標群組執行個體。在「動作」功能表上，選取「編輯屬性」。
    - 在「編輯屬性」頁面上，選取「綁定」，指定持續時間為 `1 day`，然後儲存變更。
5. 在負載平衡器上，更新收聽器規則。選擇為此部署設定的負載平衡器，然後按一下收聽器索引標籤。
    
    - 對於 HTTP:80，按一下「檢視/編輯規則」。在產生的「規則」頁面上，按一下編輯圖示（原本位於頁面頂端，然後接著位於規則旁邊）以編輯規則。刪除現有 THEN 規則並按一下新增動作 > 重新導向至...來替換它。在生成的 THEN 組態中，指定`HTTPS`和連接埠`443`並將其他選項保留為預設值。儲存設定然後按一下「更新」。
    - 如果是 HTTP:443，請按一下「檢視/編輯規則」。在產生的「規則」頁面上，按一下編輯圖示（原本位於頁面頂端，然後接著位於規則旁邊）以編輯規則。在 THEN 設定中的傳送至...下，將目標群組變更為剛剛建立的 HTTPS 群組。在群組層級綁定下，啟用綁定並將持續時間設定為 1 天。儲存設定然後按一下「更新」。

#### 步驟 6：驗證 SSL

透過瀏覽到 https://tableau.example.com 來驗證組態。