CommonCryptoLib (sapcrypto.dll) を使用して SAP BW への SSO に Kerberos シングル サインオンを使用する

この記事では、CommonCryptoLib (sapcrypto.dll) を使用して Power BI サービスからの SSO を有効にするように SAP BW データ ソースを構成する方法を説明します。

注意

Kerberos SSO を使用する SAP BW ベースのレポートを更新する前に、この記事の手順と Kerberos SSO の構成に関するページの手順を両方済ませておいてください。 SNC ライブラリとして CommonCryptoLib を使用すると、SAP BW アプリケーション サーバーと SAP BW メッセージ サーバーの両方への SSO 接続が可能になります。

注意

同じゲートウェイ サーバーで両方のライブラリ (sapcrypto と gx64krb5) を構成するシナリオは、サポートされていません。 両方のライブラリを同じゲートウェイ サーバーで構成すると、ライブラリが混在するため、お勧めしません。 両方のライブラリを使用する場合は、ゲートウェイ サーバーを完全に分離してください。 たとえば、サーバー A に対して gx64krb5 を構成し、サーバー B に対して sapcrypto を構成します。gx64krb5 は SAP と Microsoft でサポートされなくなったため、gx64krb5 を使用するサーバー A での障害はサポートされないことに注意してください。

CommonCryptoLib を使用する SSO を有効にするように SAP BW を構成する

注意

オンプレミス データ ゲートウェイは 64 ビットのソフトウェアであるため、BW SSO を実行するには 64 ビットバージョンの CommonCryptoLib (sapcrypto.dll) が必要です。 ゲートウェイ経由で SSO 接続を試みる前に、SAP GUI で SAP BW サーバーへの SSO 接続をテストすることを計画している場合 (推奨)、SAP GUI は 32 ビットのソフトウェアであるため、32 ビット版の CommonCryptoLib も必要になります。

  1. お使いの BW サーバーが CommonCryptoLib を使用する Kerberos SSO 用に正しく構成されていることを確認します。 そうである場合は、CommonCryptoLib を使用するように構成されている SAP GUI などの SAP ツールで、SSO を使用して BW サーバーに (直接または SAP BW メッセージ サーバー経由で) アクセスできるはずです。

    設定の手順の詳細については、「SAP Single Sign-On: Authenticate with Kerberos/SPNEGO」 (SAP シングル サインオン: Kerberos/SPNEGO を使用した認証) を参照してください。 自分の BW サーバーでは、SNC ライブラリとして CommonCryptoLib を使用し、CN= で始まる SNC 名 (たとえば CN=BW1) を付ける必要があります。 SNC 名の要件 (具体的には、snc/identity/as パラメーター) の詳細については、「Kerberos 構成の SNC パラメーター」を参照してください。

  2. まだ行っていない場合は、x64 バージョンの SAP .NET Connector を、ゲートウェイがインストールされているコンピューターにインストールしてください。

    コンポーネントがインストールされているかどうかを確認するには、ゲートウェイ コンピューターから Power BI Desktop で自分の BW サーバーに接続します。 2.0 実装を使用して接続できない場合は、.NET コネクタがインストールされていないか、GAC にインストールされていません。

  3. ゲートウェイがインストールされているコンピューター上で、SAP Secure Login Client (SLC) が実行されていないことを確認します。

    SLC は、SSO のために Kerberos を使用するゲートウェイの機能を妨げる可能性がある方法で、Kerberos チケットをキャッシュします。

  4. SLC がインストールされている場合は、アンインストールするか、SAP Secure Login Client を必ず終了します。 ゲートウェイを使用して SSO 接続を試行する前に、システム トレイ内のアイコンを右クリックし、ログ アウトして終了するよう選択します。

    SLC では、Windows Server マシン上での使用はサポートされていません。 詳細については、SAP Note 2780475 を参照してください (s-user が必要)。

    SAP Secure Login Client

  5. SLC をアンインストールするか、ログ アウトして終了するよう選択した場合は、コマンド ウィンドウを開いて「klist purge」と入力して、ゲートウェイ経由で SSO 接続を試行する前に、キャッシュされた Kerberos チケットをクリアします。

  6. SAP スタート パッドから 64 ビット版の CommonCryptoLib (sapcrypto.dll) バージョン 8.5.25 以上をダウンロードし、それを自分のゲートウェイ コンピューター上のフォルダーにコピーします。 sapcrypto.dll をコピーしたのと同じディレクトリに、次の内容が含まれた sapcrypto.ini という名前のファイルを作成します。

    ccl/snc/enable_kerberos_in_client_role = 1
    

    .ini ファイルには、ゲートウェイ シナリオで SSO を有効にするために CommonCryptoLib が必要とする構成情報が含まれています。

    注意

    これらのファイルは同じ場所に格納する必要があります。つまり、/path/to/sapcrypto/ に sapcrypto.ini と sapcrypto.dll の両方を含める必要があります。

    サービス ユーザーが偽装するゲートウェイ サービス ユーザーと Active Directory (AD) ユーザーの両方に、両方のファイルに対する読み取りおよび実行アクセス許可が必要です。 Authenticated Users グループに .ini ファイルと .dll ファイルの両方に対するアクセス許可を付与することをお勧めします。 テスト目的の場合、ゲートウェイ サービス ユーザーと、テストに使用する Active Directory ユーザーの両方に、これらのアクセス許可を明示的に付与することもできます。 次のスクリーンショットでは、Authenticated Users グループに sapcrypto.dll に対する読み取りと実行のアクセス許可を付与しました。

    Authenticated users

  7. SSO 接続を通過させるゲートウェイに関連付けられた SAP BW データ ソースがまだない場合は、Power BI サービスの [ゲートウェイの管理] ページで追加します。 このようなデータ ソースが既にある場合は、次のように編集します。

    • BW アプリケーション サーバーへの SSO 接続を作成する場合は、[データ ソースの種類] として [SAP Business Warehouse] を選択します。
    • BW メッセージ サーバーへの SSO 接続を作成する場合は、[Sap Business Warehouse Message Server](SAP Business Warehouse メッセージ サーバー) を選択します。
  8. SNC ライブラリには、SNC_LIB または SNC_LIB_64 のどちらかの環境変数を選択するか、[カスタム] を選択します。

    • SNC_LIB を選択する場合は、ゲートウェイ マシン上の SNC_LIB_64 環境変数の値を、ゲートウェイ マシン上の sapcrypto.dll の 64 ビット コピーの絶対パスに設定する必要があります。 たとえば、「C:\Users\Test\Desktop\sapcrypto.dll」と設定します。

    • [カスタム] を選択した場合は、[ゲートウェイの管理] ページに表示される [カスタム SNC ライブラリ パス] フィールドに、sapcrypto.dll の絶対パスを貼り付けます。

  9. [SNC パートナー名] には、BW サーバーの SNC 名を入力します。 [詳細設定] で、[DirectQuery クエリには Kerberos 経由で SSO を使用します] チェック ボックスがオンになっていることを確認します。 他のフィールドは、PBI Desktop から Windows 認証接続を確立する場合と同じように入力する必要があります。

  10. CCL_PROFILE システム環境変数を作成し、その値を sapcrypto.ini のパスに設定します。

    CCL_PROFILE system environment variable

    sapcrypto .dll と .ini ファイルは同じ場所に存在する必要があります。 上の例では、sapcrypto.ini と sapcrypto.dll がどちらもデスクトップ上に置かれています。

  11. ゲートウェイ サービスを再起動します。

    Restart gateway service

  12. Power BI レポートを実行する

トラブルシューティング

Power BI サービスでレポートを更新できない場合は、ゲートウェイ トレース、CPIC トレース、および CommonCryptoLib トレースを使用して、問題を診断することができます。 CPIC トレースと CommonCryptoLib は SAP 製品であるため、Microsoft でそれらをサポートすることはできません。

ゲートウェイ ログ

  1. 問題を再現します。

  2. ゲートウェイ アプリを開き、[診断] タブから [ログのエクスポート] を選択します。

    Export gateway logs

CPIC トレース

  1. CPIC トレースを有効にするには、CPIC_TRACE および CPIC_TRACE_DIR という 2 つの環境変数を設定します。

    最初の変数はトレース レベルを設定し、2 番目の変数はトレース ファイルのディレクトリを設定します。 ディレクトリは、Authenticated Users グループのメンバーが書き込み可能な場所にする必要があります。

  2. CPIC_TRACE3 に設定し、CPIC_TRACE_DIR をトレース ファイルの書き込み先となる任意のディレクトリに設定します。 次に例を示します。

    CPIC tracing

  3. 問題を再現し、CPIC_TRACE_DIR にトレース ファイルが含まれていることを確認します。

    CPIC トレースでは、sapcrypto.dll ライブラリの読み込みの失敗など、より高いレベルの問題を診断できます。 たとえば、次に示すのは、.dll の読み込みエラーが発生した CPIC トレース ファイルのスニペットです。

    [Thr 7228] *** ERROR => DlLoadLib()==DLENOACCESS - LoadLibrary("C:\Users\test\Desktop\sapcrypto.dll")
    Error 5 = "Access is denied." [dlnt.c       255]
    

    このようなエラーが発生したが、上記のセクションで説明されているように sapcrypto.dll と sapcrypto.ini に対して読み取りと実行のアクセス許可を設定している場合は、ファイルが格納されているフォルダーに対して同じ読み取りと実行のアクセス許可を設定してみてください。

    それでも .dll を読み込むことができない場合は、ファイルの監査を有効にしてみてください。 Windows イベント ビューアーで結果の監査ログを調べると、ファイルの読み込みに失敗した原因を特定できることがあります。 偽装された Active Directory ユーザーによって開始されたエラー エントリを探します。 たとえば、偽装したユーザー MYDOMAIN\mytestuser の場合、監査ログでのエラーは次のようになります。

    A handle to an object was requested.
    
    Subject:
        Security ID:        MYDOMAIN\mytestuser
        Account Name:       mytestuser
        Account Domain:     MYDOMAIN
        Logon ID:           0xCF23A8
    
    Object:
        Object Server:      Security
        Object Type:        File
        Object Name:        <path information>\sapcrypto.dll
        Handle ID:          0x0
        Resource Attributes:    -
    
    Process Information:
        Process ID:     0x2b4c
        Process Name:   C:\Program Files\On-premises data gateway\Microsoft.Mashup.Container.NetFX45.exe
    
    Access Request Information:
        Transaction ID:     {00000000-0000-0000-0000-000000000000}
        Accesses:           ReadAttributes
    
    Access Reasons:     ReadAttributes: Not granted
    
    Access Mask:        0x80
    Privileges Used for Access Check:   -
    Restricted SID Count:   0
    

CommonCryptoLib トレース

  1. 前に作成した sapcrypto.ini ファイルに次の行を追加して、CommonCryptoLib トレースを有効にします。

    ccl/trace/level=5
    ccl/trace/directory=<drive>:\logs\sectrace
    
  2. ccl/trace/directory オプションを、Authenticated Users グループのメンバーが書き込み可能な場所に変更します。

  3. または、新しい .ini ファイルを作成して、この動作を変更します。 sapcrypto.ini および sapcrypto.dll と同じディレクトリに、次の内容が含まれた sectrace.ini という名前のファイルを作成します。 DIRECTORY オプションを、Authenticated Users グループのメンバーが書き込むことのできる自分のマシン上の場所に置き換えます。

    LEVEL = 5
    DIRECTORY = <drive>:\logs\sectrace
    
  4. 問題を再現し、DIRECTORY が指し示す場所にトレース ファイルが含まれていることを確認します。

  5. 完了したら、CPIC および CCL トレースを無効にします。

    CommonCryptoLib トレースの詳細については、SAP Note 2491573 (SAP s-user が必要) を参照してください。

権限借用

このセクションでは、権限借用の問題について、症状のトラブルシューティングと解決手順について説明します。

症状: GatewayInfo[date].log を見ると、次のようなエントリが見つかります: About to impersonate user DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation)ImpersonationLevel の値が Impersonation と異なる場合、権限借用が正しく行われていません。

解決方法: ゲートウェイ コンピューターに対するゲートウェイ サービス アカウントのローカル ポリシー権限の付与に関する記事に示されている手順に従ってください。 構成を変更した後、ゲートウェイ サービスを再起動します。

検証: レポートを更新または作成し、GatewayInfo[date].log を収集します。 最新の GatewayInfo ログ ファイルを開き、文字列 About to impersonate user DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation) をもう一度確認して、ImpersonationLevel の値が確実に Impersonation と一致するようにします。

委任

通常、委任の問題は、Power BI サービスで一般的なエラーとして表示されます。 委任が問題かどうかを判断するには、Wireshark トレースを収集し、フィルターとして Kerberos を使用すると便利です。 Kerberos エラーのリファレンスについては、ブログ記事を参照してください。 このセクションの残りの部分で、委任の問題について、症状のトラブルシューティングと解決手順について説明します。

症状: Power BI サービスで、次のスクリーンショットのような予期しないエラーが発生することがあります。 GatewayInfo[date].log を見ると、 [DM.GatewayCore]clientPipelineId の Ado クエリ実行試行中に例外を取り込み、 [0D_NW_CHANN] のインポートがエクスポートと一致しないことがわかります。

Screenshot of unhelpful error

Mashup[date].log に、一般的なエラー GSS-API(maj): No credentials were supplied が見つかります。

CPIC トレース (sec-Microsoft.Mashup*.trc) を調べると、次のような内容が表示されます。

[Thr 4896] *** ERROR => SncPEstablishContext() failed for target='p:CN=BW5' [sncxxall.c 3638]
[Thr 4896] *** ERROR => SncPEstablishContext()==SNCERR_GSSAPI [sncxxall.c 3604]
[Thr 4896] GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] <<- SncProcessOutput()==SNCERR_GSSAPI
[Thr 4896]
[Thr 4896] LOCATION CPIC (TCP/IP) on local host HNCL2 with Unicode
[Thr 4896] ERROR GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] TIME Thu Oct 15 20:49:31 2020
[Thr 4896] RELEASE 721
[Thr 4896] COMPONENT SNC (Secure Network Communication)
[Thr 4896] VERSION 6
[Thr 4896] RC -4
[Thr 4896] MODULE sncxxall.c
[Thr 4896] LINE 3604
[Thr 4896] DETAIL SncPEstablishContext
[Thr 4896] SYSTEM CALL gss_init_sec_context
[Thr 4896] COUNTER 3
[Thr 4896]
[Thr 4896] *** ERROR => STISEND:STISncOut failed 20 [r3cpic.c 9834]
[Thr 4896] STISearchConv: found conv without search

このエラーは、ゲートウェイ コンピューターの sectraces sec-Microsoft.Mashup.Con-[].trc でさらに明確になります。

[2020.10.15 20:31:38.396000][4][Microsoft.Mashup.Con][Kerberos ][ 3616] AcquireCredentialsHandleA called successfully.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] InitializeSecurityContextA returned -2146893053 (0x80090303). Preparation for kerberos failed!
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Getting kerberos ticket for 'SAP/BW5' failed (user name is affonso_v@HANABQ.COM)
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 18: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 17: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 23: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 3: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.

WireShark トレースを確認して問題を確認することもできます。

Screenshot of tracing program showing an error

Note

その他のエラー KRB5KDC_ERR_PREAUTH_REQUIRED は無視してもかまいません。

解決方法: SPN SAP/BW5 をサービス アカウントに追加する必要があります。 詳細な情報と手順については、SAP のドキュメントを参照してください。

似ているが同じではないエラーが発生することがあり、WireShark トレースに次のようなエラー KRB5KDC_ERR_BADOPTION が表示されます。

Screenshot of WireShark program showing a different error

このエラーは、SPN SAP/BW5 が見つかるが、ゲートウェイ サービス アカウントの [委任] タブにある [このアカウントが委任された資格情報を提示できるサービス] の中にないことを示しています。 この問題を解決するには、手順に従って標準の Kerberos の制約付き委任用にゲートウェイ サービス アカウントを構成します。

検証: 適切に構成すると、ゲートウェイによる汎用または予期しないエラーが表示されなくなります。 それでもエラーが発生する場合は、ゲートウェイ自体の構成、または BW サーバーの構成を確認してください。

資格情報のエラー

このセクションでは、資格情報のエラーの問題について、症状のトラブルシューティングと解決手順について説明します。 前の「委任」セクションで説明したように、Power BI サービスの一般的なエラーが表示される場合もあります。

データソース (SAP BW) に表示される症状に応じて、異なる解決方法があるため、両方を確認します。

症状 1: BW サーバーの sectraces sec-disp+work[].trc に、次のようなトレースが表示されます。

[2020.05.26 14:21:28.668325][4][disp+work ][SAPCRYPTOLIB][435584] { gss_display_name [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] gss_display_name output buffer (41 bytes) [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] CN=DAVID@XS.CONTOSO.COM@CONTOSO.COM

解決方法: 必要に応じて、ゲートウェイ コンピューターでユーザー マッピングの構成パラメーターを設定するための構成手順を完了します。 Microsoft Entra Connect が既に構成されている場合でも、これらの手順を完了する必要があります。

検証: Power BI サービスでレポートを正常に読み込めるようになります。 成功しない場合は、症状 2 の手順を参照してください。

症状 2: BW サーバーの sectraces sec-disp+work[].trc に、次のようなトレースが表示されます。

[2020.10.19 23:10:15.469000][4][disp+work.EXE ][SAPCRYPTOLIB][ 4460] { gss_display_name
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] gss_display_name output buffer (23 bytes)
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] CN=DAVID@CONTOSO.COM

解決方法: ユーザーの Kerberos 外部 ID が、sectraces に表示されているものと一致するかどうかを確認します。

  1. SAP ログオンを開きます。
  2. SU01 トランザクションを使用します。
  3. ユーザーを編集します。
  4. [SNC] タブに移動し、SNC 名がログに表示されている名前と一致することを確認します。

検証: 正常に完了すると、Power BI サービスでレポートを作成および更新できるようになります。

オンプレミス データ ゲートウェイと DirectQuery の詳細については、次のリソースを参照してください。