BeeX Technical BlogSAP Analytics CloudのLive Data Connectionを設定する:CORS対応

SAP Analytics CloudのLive Data Connection設定の2回目です。

前回は、Live Data Connectionでシングルサインオンする際の “SAML連携” について説明しました。
今回は、Live Data Connectionを設定する際のもう1つ重要なポイント、ブラウザで異なるオリジン間でHTTPリクエストを許可するための “CORS対応” について説明します。

Live Data Connectionでデータ連携する際の問題点

SAP Analytics Cloud(以降、SACと略)のLive Data Connectionは、前回説明したように、ブラウザ上でデータモデル等の分析ロジックをSACから、分析データを直接ソースシステムから取得します。

この際、1つ問題となるのは、SACとソースシステムのオリジン(ドメイン)が異なることに起因します。

ドメインが異なることによる問題について少し説明します。

Webアプリケーションのセキュリティポリシーの一つにSame-Origin Policy(同一オリジンポリシー)があります。このポリシーでは、最初のWebページに含まれるスクリプトが最初のWebページとは異なるドメインにHTTPリクエストすることを許可しません。
これはXSS(Cross Site Scripting)やCSRF(Cross-Site Request Forgeries)のような脆弱性に対する攻撃を防ぐためですが、今回のLive Data Connectionのように異なるドメインのデータにアクセスしようとする場合、問題となります。

このようなクロスドメインアクセスを安全に実現する仕組みとして、CORS(Cross-Origin Resource Sharing:オリジン間リソース共有)があります。
CORSはクロスドメインアクセスされるサーバー側で下記のようなアクセス制御ルールを設定し、クロスドメインアクセスを許可します。

・ クロスドメインアクセスを許可するオリジンサーバーのドメイン
・ 使用を許可するHTTPメソッド
・ 使用を許可するHTTPヘッダ


出典:SAP

上図ではResource1がSAC、Resource2がソースシステムに対応します。
ブラウザからResource2へクロスドメインアクセス時、下記のようなHTTPヘッダを付与しアクセス制御に関する情報をやり取りします。

(例)HTTPリクエスト(ブラウザ→Resource2)
Origin: http://example.jp1.sapanalytics.cloud
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header

(例)HTTPレスポンス(Resource2→ブラウザ)※クロスドメインアクセスが許可された場合
Access-Control-Allow-Origin: http://example.jp1.sapanalytics.cloud
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: X-Custom-Header

上記についてWebの世界ではごくごく当たり前の話ですが、SAPではなかなかこういった話題が少なく対応することは多くなかったと思います。
ただし、今後はクラウドサービスとSAPの連携が増えてくることが予想されますので、SAPでもCORS対応は当たり前になってくるかもしれません。

※注意
クロスドメインアクセスについて、もう1点注意があります。
セッション管理等の目的でCookie情報をやり取りしますが、クロスドメインアクセス時のCookieの扱いに関するGoogle Chromeブラウザの仕様がバージョン80(2020年2月17日以降)から変わりました。
具体的には、Google Chromeバージョン80以降、デフォルトのSameSite属性の扱いに関する変更により、Cookieのクロスドメインアクセスを制限します。これも、CSRFといった脆弱性への対応を目的とするものです。

これに対応する方法は、ブラウザ側またはサーバー側で対応する方法がありますが、サーバー側対応については下記を参照ください。
ライブデータ接続で SameSite クッキーを設定

SAPのCORS対応

では、SAPシステムのCORSの設定ポイントについて説明します。
前回同様、システム構成は下記になります。CORSの設定対象はソースシステムのSAP BWです。

SAP BW(NetWeaver)にCORS設定をする場合、NetWeaverバージョンにより設定方法が異なります。

・ SAPノート2547381記載のSAP NetWeaver(SAP_BASIS)バージョン以上の場合:UCON(統合コネクティビティ)によるCORS設定
-  SAP_BASIS 740 SP20
-  SAP_BASIS 750 SP12
-  SAP_BASIS 751 SP06
-  SAP_BASIS 752 SP02

・ 上記未満のSAP NetWearverバージョンの場合:ICMスクリプトによるCORS設定
-  Live Data ConnectionをサポートするSAP BW(NetWeaver)バージョン以上で上記未満の場合、SAP Kernel 7.49 PL 315 以降への更新が必要です。Live Data ConnectionをサポートするSAP BW(NetWeaver)バージョンはこちらを参照ください。

詳細な設定手順は、本記事の参考リンクを参照ください。

UCON(統合コネクティビティ)によるCORS設定

プロファイルパラメータ icf/cors_enabled で CORS を有効化し、トランザクションコード: UCONCOCKPITから設定する等ありますが、下記のようにUCONのHTTPホワイトリスト設定画面でクロスドメインアクセスを許可するオリジン、HTTPメソッド、HTTPヘッダを設定します。

–  サービスパス: /sap/bw/ina
–  ホストルール: example.jp10.hanacloudservices.cloud.sap
–  使用可能メソッド: GET、HEAD、POST、OPTIONS
–  使用可能ヘッダ: x-csrf-token,x-sap-cid,authorization,mysapsso2,x-request-with,sap-rewriteurl,sap-url-session-id,content-type,accept-language
–  公開されたヘッダ: x-csrf-token,sap-rewriteurl,sap-url-session-id,sap-perf-fesrec,sap-system

ホストルールにクロスドメインアクセスを許可するSAP Analytics Cloudテナントホストを指定します。メソッド、ヘッダは手順で指定された値を設定します。

ICMスクリプトによるCORS設定

HTTPホワイトリストを記入したCORSリライトファイルを作成し、プロファイルパラメータicm/HTTP/mod_0に作成したファイルを指定し、SAP起動時に反映させます。

if %{HEADER:isSACOriginAllowed} = true
 setHeader isSACOriginAllowed false
if %{HEADER:ORIGIN} regimatch ^(https:\/\/)?<HOSTNAME> [AND]
 if %{PATH} regimatch (\/sap(\(.*\))*\/bw\/ina\/*)
 setHeader isSACOriginAllowed true
if %{HEADER:isSACOriginAllowed} = true [AND]
 if %{REQUEST_METHOD} regimatch (GET|POST)
 begin
 setResponseHeader Access-Control-Allow-Origin %{HEADER:ORIGIN}
 setResponseHeader Access-Control-Expose-Headers x-csrf-token,sap-rewriteurl,sap-url-session-id,sap-perf-fesrec,sap-system
 setResponseHeader Access-Control-Allow-Credentials true
 setResponseHeader Vary origin
 end
if %{HEADER:isSACOriginAllowed} = true [AND]
 if %{REQUEST_METHOD} stricmp OPTIONS
 begin
 regRewriteUrl ^/(.*) /sap/public/ping
 setResponseHeader Access-Control-Allow-Origin %{HEADER:ORIGIN}
 setResponseHeader Access-Control-Allow-Methods GET,POST
 setResponseHeader Access-Control-Allow-Headers x-csrf-token,x-sap-cid,authorization,mysapsso2,x-request-with,sap-rewriteurl,sap-url-session-id,content-type,accept-language
 setResponseHeader Access-Control-Max-Age 600
 setResponseHeader Access-Control-Allow-Credentials true
 setResponseHeader Vary origin
 removeResponseHeader Set-Cookie
 removeResponseHeader Expires
 end

<HOSTNAME>部分にクロスドメインアクセスを許可するSAP Analytics Cloudテナントホストを指定します。

これによりSAP Analytics Cloudをオリジンとしたソースシステムへのクロスドメインアクセスが許可されます。

Live Data Connectionの設定

最後に実際にLive Data Connectionの設定をしSAP BWからデータ取得したいと思います。
SACログイン後、メニューの「接続」からライブデータ接続情報を定義します。

「ホスト」、「HTTPSポート」、「クライアント」を入力後、「認証方法」に”SAMLシングルサインオン”を選択し接続情報を保存します。

次にメニューの「作成」からモデルの作成画面に遷移し、「データソースからデータを取得」>「SAP BW」を選択します。

先に定義した「接続」情報を選択し、接続先から取得する「データソース」を選択します。

SAML連携し認証操作することなくSAP BWからデータを取得できました。

まとめ

2回に渡ってSAP Analytics CloudのLive Data Connection設定で重要と感じた設定ポイントについて説明しました。
公開されているチュートリアル、手順ドキュメントに沿って淡々と設定すると見落としがちですが、それら技術背景を見ていくと、SAP Analytics Cloud自体がそうですがSAPもますますクラウドにシフトしWebの技術が重要になったと改めて感じました。

本記事がご参考になれば幸いです。

参考リンク

直接接続と SSO を使用した SAP BW へのライブデータ接続

カテゴリ

タグ

BeeX Technical Blogについてのお問い合わせ

BeeX Technical Blogのエントリにご質問が御座いましたらお気軽にお問合せください。

お電話でのお問い合わせ

☎ 03-6260-6240

受付時間 平日9:30〜18:00

フォームでのお問い合わせ

お問い合わせフォーム