分享方式:


針對從 Power BI 到內部部署資料來源的 SSO,使用安全性聲明標記語言

藉由啟用單一登入 (SSO),您可以輕鬆地讓 Power BI 報表和儀表板重新整理來自內部部署來源的資料,同時遵守這些來源上所設定的使用者層級權限。 為了啟用無縫 SSO 連線,您會使用安全性聲明標記語言 (SAML)

注意

搭配內部部署資料閘道使用單一登入 SAML 時,只能連線到一個資料來源。 若要使用單一登入 SAML 來連線到其他資料來源,則必須使用不同的內部部署資料閘道。

SAML 支援的資料來源

Microsoft 目前支援具有 SAML 的 SAP HANA。 如需使用 SAML 來安裝和設定 SAP HANA 單一登入的詳細資訊,請參閱從 BI 平台到 HANA 的 SAML SSO

我們使用 Kerberos 支援其他資料來源 (包含 SAP HANA)。

針對 SAP HANA,建議您先啟用加密再建立 SAML SSO 連線。 若要啟用加密,請將 HANA 伺服器設定為接受加密連線,然後將閘道設定為使用加密來與您的 HANA 伺服器進行通訊。 因為 HANA ODBC 驅動程式預設不會加密 SAML 判斷提示,所以已簽署之 SAML 判斷提示會從閘道傳送到「沒有問題」的 HANA 伺服器,且很容易被第三方攔截並重複使用。

重要

由於 SAP 已不再支援 OpenSSL,因此 Microsoft 也已中止其支援。 您現有的連線可繼續運作,但您無法再建立新的連線。 請改用 SAP 密碼編譯程式庫 (又稱 CommonCryptoLib 或 sapcrypto)。

設定閘道和資料來源

若要使用 SAML,您必須在要啟用 SSO 的 HANA 伺服器與閘道之間建立信任關係。 在本案例中,閘道可作為 SAML 識別提供者 (IdP)。 您可以透過各種方式建立此關聯性。 SAP 建議您使用 CommonCryptoLib 來完成設定步驟。 如需詳細資訊,請參閱官方的 SAP 文件。

建立憑證

您可以使用 HANA 伺服器所信任的根憑證授權單位 (CA) 來簽署閘道 IdP 的 X509 憑證,以建立 HANA 伺服器與閘道 IdP 之間的信任關係。

若要建立憑證,請執行下列動作:

  1. 在執行 SAP HANA 的裝置上,建立空的資料夾來儲存憑證,然後移至該資料夾。

  2. 執行下列命令來建立根憑證:

    openssl req -new -x509 -newkey rsa:2048 -days 3650 -sha256 -keyout CA_Key.pem -out CA_Cert.pem -extensions v3_ca'''
    

    請務必複製並儲存複雜密碼,以使用此憑證來簽署其他憑證。 您應該會看到 CA_Cert.pem 和 CA_Key.pem 檔案正在進行建立。

  3. 執行下列命令來建立 IdP 憑證:

    openssl req -newkey rsa:2048 -days 365 -sha256 -keyout IdP_Key.pem -out IdP_Req.pem -nodes
    

    您應該會看到 IdP_Key.pem 和 IdP_Req.pem 檔案正在進行建立。

  4. 使用根憑證簽署 IdP 憑證:

    openssl x509 -req -days 365 -in IdP_Req.pem -sha256 -extensions usr_cert -CA CA_Cert.pem -CAkey CA_Key.pem -CAcreateserial -out IdP_Cert.pem
    

    您應該會看到 CA_Cert.srl 和 IdP_Cert.pem 檔案正在進行建立。 目前,您只要關心 IdP_Cert.pem 檔案即可。

為 SAML 識別提供者憑證建立對應

若要為 SAML 識別提供者憑證建立對應,請執行下列動作:

  1. 在 SAP HANA Studio 中,以滑鼠右鍵按一下您的 SAP HANA 伺服器名稱,然後選取 [安全性]>[開啟安全性主控台]>[SAML 識別提供者]

  2. 選取 [SAP 密碼編譯程式庫] 選項。 請「不要」使用 SAP 已淘汰的 [OpenSSL 密碼編譯程式庫] 選項。

    [SAML 識別提供者] 窗格的螢幕擷取畫面,其中已選取 [SAP 密碼編譯程式庫] 選項。

  3. 若要匯入已簽署的憑證 IdP_Cert.pem,請選取藍色的 [匯入] 按鈕 (如下圖所示):

    [SAML 識別提供者] 窗格上 [匯入] 按鈕的螢幕擷取畫面。

  4. 請記得為識別提供者指派名稱。

在 HANA 中匯入並建立已簽署的憑證

若要在 HANA 中匯入並建立已簽署的憑證,請執行下列動作:

  1. 在 SAP HANA Studio 中,執行下列查詢:

    CREATE CERTIFICATE FROM '<idp_cert_pem_certificate_content>'
    

    以下是範例:

    CREATE CERTIFICATE FROM
    '-----BEGIN CERTIFICATE-----
    MIIDyDCCArCgA...veryLongString...0WkC5deeawTyMje6
    -----END CERTIFICATE-----
    '
    
  2. 如果沒有具有 SAML 用途的個人安全性環境 (PSE),請在 SAP HANA Studio 中執行下列查詢來加以建立:

    CREATE PSE SAMLCOLLECTION;
    set pse SAMLCOLLECTION purpose SAML;
    
  3. 執行下列命令,將新建立的已簽署憑證新增至 PSE:

    alter pse SAMLCOLLECTION add CERTIFICATE <certificate_id>;
    

    例如:

    alter pse SAMLCOLLECTION add CERTIFICATE 1978320;
    

    您可以執行下列查詢來檢查已建立的憑證清單:

    select * from PUBLIC"."CERTIFICATES"
    

    憑證現在已正確安裝。 若要確認安裝,您可以執行下列查詢:

    select * from "PUBLIC"."PSE_CERTIFICATES"
    

對應使用者

若要對應使用者,請執行下列動作:

  1. 在 SAP HANA Studio 中,選取 [安全性] 資料夾。

    左窗格上 [安全性] 資料夾結構的螢幕擷取畫面。

  2. 展開 [使用者],然後選取要作為 Power BI 使用者對應目標的使用者。

  3. 選取 [SAML] 核取方塊,然後選取 [設定],如下圖所示:

    [使用者參數] 窗格的螢幕擷取畫面,該窗格可用於選取 [SAML] 核取方塊和 [設定] 連結。

  4. 選取您在為 SAML 識別提供者憑證建立對應一節中建立的識別提供者。 針對 [外部身分識別],輸入 Power BI 使用者的 UPN (通常是使用者用來登入 Power BI 的電子郵件地址),然後選取 [新增]

    [設定外部 SAML 身分識別] 視窗的螢幕擷取畫面。

    若您設定閘道使用 ADUserNameReplacementProperty 設定選項,則請輸入將取代 Power BI 使用者原始 UPN 的值。 例如,若將 ADUserNameReplacementProperty 設為 SAMAccountName,則請輸入使用者的 SAMAccountName

設定閘道

現在您已設定閘道的憑證和身分識別,接下來即可執行下列動作,將憑證轉換為 PFX 檔案格式,然後將閘道設定為使用該憑證:

  1. 請執行下列命令來將憑證轉換成 PFX 格式。 此命令會將產生的檔案命名為 samlcert.pfx,並設定以 root 作為其密碼,如下所示:

    openssl pkcs12 -export -out samltest.pfx -in IdP_Cert.pem -inkey IdP_Key.pem -passin pass:root -passout pass:root
    
  2. 將 PFX 檔案複製到閘道電腦:

    a. 按兩下 [samltest.pfx],然後選取 [本機電腦]>[下一步]

    b. 輸入密碼,然後選取 [下一步]

    c. 選取 [將所有憑證放在下列存放區],然後選取 [瀏覽]>[個人]>[確定]

    憑證匯入精靈中 [將所有憑證放在下列存放區] 選項的螢幕擷取畫面。

    d. 選取 [下一步],然後選取 [完成]

  3. 若要向閘道服務帳戶授與該憑證私密金鑰的存取權,請執行下列動作:

    a. 在閘道電腦上,執行 Microsoft Management Console (MMC)。

    用於執行 Microsoft Management Console 之閘道電腦 [執行] 視窗的螢幕擷取畫面。

    b. 在 MMC 中,選取 [檔案]>[新增/移除嵌入式管理單元]

    Microsoft Management Console 中 [新增/移除嵌入式管理單元] 命令的螢幕擷取畫面。

    c. 選取 [憑證]>[新增],然後選取 [電腦帳戶]>[下一步]

    d. 選取 [本機電腦]>[完成]>[確定]

    e. 展開 [憑證]>[個人]>[憑證],然後尋找該憑證。

    f. 以滑鼠右鍵按一下該憑證,然後選取 [所有工作]>[管理私密金鑰]

    [管理私密金鑰] 命令的螢幕擷取畫面。

    .g 將閘道服務帳戶新增至清單。 根據預設,此帳戶是 NT SERVICE\PBIEgwService。 您可以藉由執行 services.msc 並尋找內部部署資料閘道服務,來了解哪個帳戶正在執行閘道服務。

    [內部部署資料閘道服務] 清單的螢幕擷取畫面。

最後,將憑證指紋新增至閘道設定:

  1. 若要列出您電腦上的憑證,請執行下列 PowerShell 命令:

    Get-ChildItem -path cert:\LocalMachine\My
    
  2. 複製您所建立憑證的指紋。

  3. 移至閘道目錄,其預設為「C:\Program Files\On-premises data gateway」

  4. 開啟「PowerBI.DataMovement.Pipeline.GatewayCore.dll.config」,然後尋找「SapHanaSAMLCertThumbprint」區段。 貼上您在步驟 2 複製的指紋。

  5. 重新啟動閘道服務。

執行 Power BI 報表

現在您可以使用 Power BI 中的 [管理閘道] 頁面來設定 SAP HANA 資料來源。 在 [進階設定] 下方,透過 SAML 啟用 SSO。 如此一來,您就可以發佈繫結至該資料來源的報表和資料集。

SAML 單一登入進階設定的螢幕擷取畫面。

注意

SSO 會使用 Windows 驗證,因此請確定 Windows 帳戶可以存取閘道電腦。 如果您不確定,請務必將 NT-AUTHORITY\Authenticated Users (S-1-5-11) 新增至本機電腦的 [使用者] 群組。

針對使用 SAML 進行 SAP HANA 單一登入的問題進行疑難排解

本節提供針對使用 SAML 進行 SAP HANA 單一登入的問題進行疑難排解的廣泛步驟。 使用這些步驟可協助您自行診斷並修正可能遇到的任何問題。

認證遭拒

在設定 SAML 型 SSO 之後,您可能會在 Power BI 入口網站中看到下列錯誤:「提供的認證無法用於 SapHana 來源」。此錯誤表示 SAP HANA 拒絕了該 SAML 認證。

伺服器端驗證會追蹤提供的詳細資訊,以針對 SAP HANA 上的認證問題進行疑難排解。 若要為 SAP HANA 伺服器設定追蹤,請執行下列動作:

  1. 在 SAP HANA 伺服器上,透過執行下列查詢來開啟驗證追蹤:

    ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'SYSTEM') set ('trace', 'authentication') = 'debug' with reconfigure 
    
  2. 重現問題。

  3. 在 SAP HANA Studio 中,開啟管理主控台,然後選取 [診斷檔案] 索引標籤。

  4. 開啟最新的索引伺服器追蹤,然後搜尋「SAMLAuthenticator.cpp」

    您應該就會找到指出根本原因的詳細錯誤訊息,如以下範例所示:

    [3957]{-1}[-1/-1] 2018-09-11 21:40:23.815797 d Authentication   SAMLAuthenticator.cpp(00091) : Element '{urn:oasis:names:tc:SAML:2.0:assertion}Assertion', attribute 'ID': '123123123123123' is not a valid value of the atomic type 'xs:ID'.
    [3957]{-1}[-1/-1] 2018-09-11 21:40:23.815914 i Authentication   SAMLAuthenticator.cpp(00403) : No valid SAML Assertion or SAML Protocol detected
    
  5. 在完成疑難排解之後,請執行下列查詢來關閉驗證追蹤:

    ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'SYSTEM') UNSET ('trace', 'authentication');
    

驗證閘道錯誤並進行疑難排解

若要遵循本節中的程序,您必須收集閘道記錄

SSL 錯誤 (憑證)

錯誤徵兆

此問題有多個徵兆。 當您嘗試新增資料來源時,您可能會看到如下的錯誤訊息:

Unable to connect: We encountered an error while trying to connect to . Details: "We could not register this data source for any gateway instances within this cluster. Please find more details below about specific errors for each gateway instance."

當您嘗試建立或重新整理報表時,您可能會看到類似下圖內容的錯誤訊息:

[無法載入模型] 疑難排解 SSL 錯誤視窗的螢幕擷取畫面。

當您調查 Mashup[date]*.log 時,您會看到下列錯誤訊息:

A connection was successfully established with the server, but then an error occurred during the login process and the certificate chain was issued by an authority that is not trusted

解決方法

若要解決此 SSL 錯誤,請移至資料來源連線,然後在 [驗證伺服器憑證] 下拉式清單中,選取 [否],如下圖所示:

顯示 [資料來源設定] 窗格上要解決之 SSL 錯誤的螢幕擷取畫面。

選取此設定之後,便不會再顯示錯誤訊息。

閘道 SignXML 錯誤

閘道 SignXML 錯誤可能是 SapHanaSAMLCertThumbprint 設定不正確的結果,也可能是 HANA 伺服器有問題。 閘道記錄中的項目有助於識別問題所在,以及如何加以解決。

錯誤徵兆

SignXML: Found the cert... 的記錄項目:如果您的 GatewayInfo[date].log 檔案包含此錯誤,則會找到 SignXML 憑證,而且疑難排解工作應著重於驗證 HANA 伺服器端並進行疑難排解一節中找到的步驟。

Couldn't find saml cert 的記錄項目:如果您的 GatewayInfo[date].log 檔案包含此錯誤,則表示 SapHanaSAMLCertThumbprint 的設定不正確。 下面的<解決方案>區段會說明如何解決此問題。

解決方法

若要正確設定 SapHanaSAMLCertThumbprint,請遵循設定閘道一節中的指示。 指示始於「最後,將憑證指紋新增至閘道設定」

在變更設定檔後,您必須重新啟動閘道服務,變更才會生效。

驗證

正確設定 SapHanaSAMLCertThumbprint 時,您的閘道記錄會有包含 SignXML: Found the cert... 的項目。 目前,您應該能夠繼續進行驗證 HANA 伺服器端並進行疑難排解一節。

如果閘道無法使用憑證來簽署 SAML 判斷提示,您可能會在記錄中看到類似下列內容的錯誤:

GatewayPipelineErrorCode=DM_GWPipeline_UnknownError GatewayVersion= InnerType=CryptographicException InnerMessage=<pi>Signing key is not loaded.</pi> InnerToString=<pi>System.Security.Cryptography.CryptographicException: Signing key is not loaded.

若要解決此錯誤,請遵循設定閘道一節中的步驟 3 開始的指示。

在變更設定後,請重新啟動閘道服務,以讓變更生效。

驗證 HANA 伺服器端並進行疑難排解

如果閘道可以找到憑證並簽署 SAML 判斷提示,但仍發生錯誤,請使用本節中的解決方案。 您必須收集 HANA 驗證追蹤,如先前認證遭拒一節所述。

SAML 識別提供者

HANA 驗證追蹤內若存在 Found SAML provider 字串,就表示 SAML 識別提供者已正確設定。 如果不存在該字串,則表示設定不正確。

解決方法

首先,判斷組織是使用 OpenSSL 還是 commoncrypto 來作為 sslcryptoprovider。 若要判斷所使用的是哪一個提供者,請執行下列動作:

  1. 開啟 SAP HANA Studio。

  2. 開啟所使用租用戶的管理主控台。

  3. 選取 [設定] 索引標籤,然後使用 [sslcryptoprovider] 作為篩選條件,如下圖所示:

    SAP HANA Studio 中 sslcryptoprovider 資訊的螢幕擷取畫面。

接下來,執行下列動作來驗證密碼編譯程式庫是否已正確設定:

  1. 選取 [SAML 識別提供者] 索引標籤,然後執行下列其中一項動作,以移至 SAP HANA Studio 中的安全性主控台:

    • 如果 sslcryptoprovider 是 OpenSSL,請選取 [OpenSSL 密碼編譯程式庫]
    • 如果 sslcryptoprovider 是 commonCrypto,則請選取 [SAP 密碼編譯程式庫]

    在下圖中,選取的是 [SAP 密碼編譯程式庫]

    SAP HANA Studio 的螢幕擷取畫面,其中已選取 [SAP 密碼編譯程式庫] 作為 sslcryptoprovider。

  2. 選取右上方的 [部署] 按鈕來部署變更,如下圖所示:

    用於部署解決方案變更之 [部署] 按鈕的螢幕擷取畫面。

驗證

若有正確設定追蹤,追蹤便會報告 Found SAML provider,而「不會」報告 SAML Provider not found。 您可以繼續進行下一節針對 SAML 判斷提示簽章進行疑難排解

如果已設定密碼編譯提供者,但仍報告 SAML Provider not found,請在追蹤內搜尋以下列文字開頭的字串:

Search SAML provider for certificate with subject =

在該字串中,請確定主體和簽發者與安全性主控台中 [SAML 識別提供者] 索引標籤所顯示的內容完全相同。 即使只差一個字元也會造成問題。 如果您發現差異,您可以在 SAP 密碼編譯程式庫中修正問題,讓項目完全相符。

如果變更 SAP 密碼編譯程式庫無法修正問題,只要對 [發行對象] 和 [發行者] 欄位按兩下即可手動編輯。

針對 SAML 判斷提示簽章進行疑難排解

您可能會發現包含類似下列內容之項目的 HANA 驗證追蹤:

[48163]{-1}[-1/-1] 2020-09-11 21:15:18.896165 i Authentication SAMLAuthenticator.cpp(00398) : Unable to verify XML signature [48163]{-1}[-1/-1] 2020-09-11 21:15:18.896168 i Authentication MethodSAML.cpp(00103) : unsuccessful login attempt with SAML ticket!

存在這類項目表示簽章不受信任。

解決方法

如果您使用 OpenSSL 作為 sslcryptoprovider,請檢查 SSL 目錄中是否有 trust.pem 和 key.pem 檔案。 如需詳細資訊,請參閱 SAP 部落格:透過 SSL 保護 SAP HANA Studio 與 SAP HANA 伺服器之間的通訊 (英文)。

如果您使用 commoncrypto 作為 sslcryptoprovider,請檢查租用戶中是否有具有您憑證的集合。

驗證

若有正確設定追蹤,追蹤便會報告 Found valid XML signature

針對 UPN 對應進行疑難排解

您可能會發現包含類似下列內容之項目的 HANA 追蹤:

SAMLAuthenticator.cpp(00886) : Assertion Subject NameID: `johnny@contoso.com` SAMLAuthenticator.cpp(00398) : Database user does not exist

該錯誤指出在 SAML 判斷提示中找到 nameId johnny@contoso.com,但在 HANA 伺服器中,其並不存在或未正確對應。

解決方法

移至 HANA 資料庫使用者,然後在選取的 [SAML] 核取方塊下,選取 [設定] 連結。 隨即會出現下列視窗:

螢幕擷取畫面:顯示了不正確的使用者名稱。

如錯誤訊息所述,HANA 嘗試尋找 johnny@contoso.com,但外部身分識別只顯示為 johnny。 這兩個值必須相符。 若要解決此問題,請在 [外部身分識別] 底下,將值變更為 johnny@contoso.com。 請注意,此值有區分大小寫。

如需內部部署資料閘道和 DirectQuery 的詳細資訊,請參閱下列資源: