次の方法で共有


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

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

Note

Kerberos SSO を使用する SAP BW ベースのレポートを更新する前に、この記事の手順と、 Kerberos ベースの SSO の構成の手順の両方を完了してください。 セキュリティで保護されたネットワーク通信 (SNC) ライブラリとして CommonCryptoLib を使用すると、SAP BW アプリケーション サーバーと SAP BW メッセージ サーバーの両方への SSO 接続が可能になります。

Note

同じゲートウェイ サーバーで両方のライブラリ (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 コネクタはインストールされていないか、グローバル アセンブリ キャッシュにインストールされていません。

  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 ファイルの両方に対するアクセス許可を付与することをお勧めします。 テスト目的で、これらのアクセス許可をゲートウェイ サービス ユーザーとテストに使用する AD ユーザーの両方に明示的に付与することもできます。 次のスクリーンショットでは、Authenticated Users グループに sapcrypto.dll に対する読み取りと実行のアクセス許可を付与しました。

    認証されたユーザー

  7. SSO 接続をフローさせるゲートウェイに SAP BW データ ソースがまだ関連付けられていない場合は、Power BI サービスの Manage Connections and Gateways ページに追加します。 このようなデータ ソースが既にある場合は、次のように編集します。

    • 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 システム環境変数

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

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

    ゲートウェイ サービスを再起動する

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

トラブルシューティング

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

ゲートウェイ ログ

  1. 問題を再現します。

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

    ゲートウェイ ログをエクスポートする

CPIC トレース

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

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

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

    CPIC トレース

  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 イベント ビューアーで結果の監査ログを調べると、ファイルの読み込みに失敗した原因を特定できることがあります。 偽装された AD ユーザーによって開始されたエラー エントリを探します。 たとえば、偽装したユーザー 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 ログ ファイルを開き、 ユーザー 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]エクスポートに一致しません。

役に立たないエラーのスクリーンショット

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 トレースを確認して問題を確認することもできます。

トレース プログラムにエラーが表示されているスクリーンショット

注意

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

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

次のエラー KRB5KDC_ERR_BADOPTIONとして WireShark トレースに現れる同じエラーではなく、同様のエラーが発生する可能性があります。

WireShark プログラムに別のエラーが表示されているスクリーンショット

このエラーは、 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 の詳細については、次のリソースを参照してください。