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

本主題的其餘部分會介紹一個端到端的過程,該過程描述如何在範例 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 目錄。

    複製以下指令碼並指定 ProxyPassProxyPassReverse 具有 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
    • 可用區域:
      • 為資料中心區域選取 ab
      • 在每個相應的下拉式選取器中,選取公用子網路(proxy 伺服器所在位置)。
    • 按一下:設定安全設定
  2. 設定安全性設定頁面

    • 上傳公用 SSL 憑證。
    • 按一下「下一步:設定安全群組」
  3. 設定安全性群組頁面:

    • 選取公用安全性群組。如果選取預設安全性群組,則清除該選取。
    • 按一下「下一步:設定路由」
  4. 設定路由頁面

    • 目標群體:現有的目標群體。
    • 名稱:選取之前建立的目標群組
    • 按一下「下一步:註冊目標」
  5. 註冊目標頁面

    • 應顯示之前設定的兩個 proxy 伺服器執行個體。
    • 按一下「下一步:檢閱」:。
  6. 評論頁面

    按一下「建立」

基本設定

  • 指定名稱
  • 結構:以網際網路為對象(預設)
  • IP 位址類型:ipv4(預設)

網路對應

  • VPC:選取已安裝所有內容的 VPC
  • 對應:
    • 為您的數據中心區域選擇ab (或類似的)「可用區域」
    • 在每個相應的下拉式選取器中,選取公用子網路(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 開發者網頁(連結在新視窗開啟)

    為 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(連結在新視窗開啟))。

      為簡化憑證管理和部署,並作為安全性最佳做法,我們建議使用由受信任的主要協力廠商憑證頒發授權單位 (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 或更高版本,則必須執行以下命令以用反向 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.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 設定 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 來驗證組態。

    感謝您的意見反應!已成功提交您的意見回饋。謝謝!