はじめに
SAP Cloud Identity Services - Identity AuthenticationはNeo環境とCloud Foundry環境で提供されています。
CF環境ではSAP Audit Log Viewerサービスを使用する事でIdentity Authenticationの監査ログをUI上から確認する事が出来ます。
一方、Neo環境ではIdentity Authenticationで提供されているAPI経由でしか監査ログを取得する事が出来ません。
本BlogではSAP Cloud Integrationを使用してIdentity Authenticationの監査ログを取得しファイル形式で出力する手順について説明します。
前提条件
環境面
Identity Authentication環境
Cloud Integration環境
取得した監査ログを出力するSFTPサーバー
知識面
Cloud Integrationにおける基礎的な開発ステップを理解しているレベル
説明の流れ
Identity Authentication認証情報の取得
SFTPサーバー接続設定
Cloud Integration iFlow開発
まとめ
1. Identity Authentication認証情報の取得
ここでは、Identity Authenticationより監査ログを取得する為のCredential情報取得します。
まずはIdentity Authentication管理画面へアクセスしてください。
https://<テナントID>.accounts.com/admin/
次にIdentity Authentication上でMonitoring & Reproting > Audit and Change Logsより +Generateを実行します。
表示されるClient IDとClient Secretをメモ帳等にコピーしておいてください。
2. SFTPサーバ接続設定
*SFTPサーバがオンプレミス環境にある場合は以下の手順を参考にして接続設定を行ってください。そうでない場合は次のセクションCloud Integration iFlow開発まで進んでください。
SFTPサーバをSAP Cloud Connectorを使用して接続します。
Cloud ConnectorインストールとBTPサブアカウントとの接続手順は以下のBlogとHelp portalをご参照ください。
Cloud Connectorインストール手順:
https://blogs.sap.com/2021/09/05/installation-and-configuration-of-sap-cloud-connector/
Initial Configuration セクションまでの手順を参考にCloud ConnectorとBTPサブアカウント接続を完了させてください。
Help portal:
https://help.sap.com/docs/CP_CONNECTIVITY/b865ed651e414196b39f8922db2122c7/5ceb84290d5644638f73d40fd...
続いてCloud ConnectorとSFTPサーバを接続します。
Cloud To On-Premiseをより+Addを実行し新規の接続を定義します。
以下の接続情報を入力してください。
Back-end Type: Non-SAP System
Protocol : TCP
Internal Host: <SFTPサーバホスト名>
Internal Port: <SFTPサーバポート番号>
Virtual Host: <任意のホスト名>
Virtual Port: <任意のポート番号>
Cloud ConnectorとBTPサブアカウントを接続する際に設定した
Location ID とCloud ConnectorとSFTPサーバー接続の際に設定した
Virtual Host と
Virtual Port はCloud Integrationで使用する為メモしておいてください。(Location IDを設定していない場合は空欄で構いません。)
3. Cloud Integration iFlow開発
ここではCloud Integrationを使用して定期的にIdentity Authenticationのログをファイル形式で取得する方法について説明します。
開発するiFlowは以下の通りです。
iFlow全体概要
まずはMonitor画面より各システムの認証情報をdeployします。
Security MaterialタイルよりCreate > User Credentialsを選択してください。
Identity Authentication認証情報とSFTPサーバ認証情報をDeployしてください。
Identity Authenticationの場合
Name: <任意> 本ブログではIASuser
Type: User Credentials
User: <Identity Authenticationより取得したClient ID>
Password: <Identity Authenticationより取得したClient Secret>
SFTPの場合
Name: <任意> 本ブログではsftpuser
Type: User Credentials
User: <SFTPサーバーユーザ名>
Password: <SFTPサーバパスワード>
ここでDeployした認証情報のNameはiFlowより各システムにアクセスする際に使用するのでメモしておいてください。
SFTPサーバのknown hostsを追加する必要があります。
Monitor>Connectivity Testsに移動します。
SSHタブでホストキーを取得します。以下の情報を入力して、sendしてください。成功した後コピーしてテキストエディタでknown_hostsとして保存します。
Host: <Cloud Connectorで設定したVirtual Host>
Port: <Cloud Connectorで設定したVirtual Port>
Proxy Type: On-Premise
Location ID: <Cloud Connectorで設定したLocaion ID>未設定の場合は空欄
Authentication: None
*クラウド版SFTPサーバの場合は
Host: <SFTPサーバ Host>
Port: <SFTPサーバPort>
Proxy Type: Internet
Authentication: None
Security Materialに戻り、Uploadボタンより先程保存したknown_hostsをアップロードします。
Deploy後再度Connectivity Testsへ移動して再度接続テストを行います。
今回はAuthenticationをDeployしたSFTP認証情報を利用します。接続が成功する事を確認します。
Host: <Cloud Connectorで設定したVirtual Host>
Port: <Cloud Connectorで設定したVirtual Port>
Proxy Type: On-Premise
Location ID: <Cloud Connectorで設定したLocaion ID>未設定の場合は空欄
Authentication: User Credential
Credential Name: <Cloud IntegrationでDeployしたSFTPサーバ認証名 > 本ブログではsftpuser
Host Key Verification: Against Tenant
*クラウド版SFTPサーバの場合は
Host: <SFTPサーバ Host>
Port: <SFTPサーバPort>
Proxy Type: Internet
Authentication: User Credential
Credential Name:
<Cloud IntegrationでDeployしたSFTPサーバ認証名 > 本ブログではsftpuser
Host Key Verification: Against Tenant
Designページへ移動して、任意のPackage配下に新規のiFlowを作成してください。
EditボタンよりiFlowを編集していきます。
まずは定期的にiFlowを実行する為に既に設置されているStartTimer削除し、Timerを設置します。
今回はiFlowをdeployした際に一度実行されるようにRun Onceを選択します。
ご自身の要件に合わせて好きなタイミングでiFlowをdeployする様に設定する事が可能です。
(TimerのHelpページ:
https://help.sap.com/docs/CLOUD_INTEGRATION/987273656c2f47d2aca4e0bfce26c594/27f4f030b2cc432f93869f9... )
次にIdentity AuthenticationにAPIリクエストを送信するする為のBearerトークンを取得します。
Request ReplyとReceiverを設置して線を繋ぎます。その際のアダプターはHTTPを選択します。
HTTPの線をクリックして設定を行います。
以下の情報を入力してください。
BTPホストはBTPのサブアカウントのRegionによって変わります。
オーストラリア (Sydney) のテナントの場合は、要求の SAP BTP ホストに ap1.hana.ondemand.com を使用する必要があります。
ブラジル (São Paulo) のテナントの場合は、br1.hana.ondemand.com
ヨーロッパのテナントの場合は、eu1.hana.ondemand.com
日本 (東京) のテナントの場合は、jp1.hana.ondemand.com
ロシア (Moscow) のテナントの場合は、ru1.hana.ondemand.com
米国 (米国東部) のテナントの場合は、us3.hana.ondemand.com
詳細はHelp portal をご参照ください。
Address:
https://api.<BTPホスト>/oauth2/apitoken/v1
Query: grant_type=client_credentials
Proxy Type: Internet
Method: POST
Authentication: Basic
Credential Name: <DeployしたIdentity Authentication認証Name> 本ブログではIASuser
HTTPレスポンスに含まれているBearerトークンをメッセージのHeaderに書き込む作業を行います。Groovy Scriptを設置してCreateを押して新規Scriptを作成してください。
事前に記述してあるScriptを削除して以下のScriptをペーストしてください。OKボタンを押して保存してください。
import groovy.json.*;
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
//Body
def body = message.getBody(String.class);
def jsonSlurper = new JsonSlurper()
def list = jsonSlurper.parseText(body)
def token="Bearer "+list.access_token.toString();
//Headers
def map = message.getHeaders();
message.setHeader("Authorization", token);
return message;
}
次にIdentity Authenticationの監査ログを取得します。
Request Replyを使用してIdentity Authenticationのエンドポイントを呼び出します。
Request ReplyとReceiverを設置して線を繋ぎます。その際のAdaptorはHTTPを選択します。
HTTPアダプターの設定は以下の情報を入力してください。
テナント名はIdentity Authentication管理画面のURLより取得可能です(https://<テナントID>.accounts.com/admin/)。
Query部分にはfilterで日付範囲指定等を行う事が可能です。
Address:
https://api.<BTPホスト>/auditlog/v1/accounts/<テナントID>/AuditLogRecordsIds
Query: $top=10
Proxy Type: Internet
Method: GET
Send Body: チェック無
Authentication: None
Request Headers: *
次にIdentity Authenticationで取得したJSONデータも形式を変換していきます。今回はCSV形式へ変換して出力します。Cloud IntegrationではJSON→CSVに変換するステップがない為、JSON→XML→CSVの2段階で変換します。
まずはJSON→XMLへの変換です。
今回取得するデータには「@」が含まれている為、Cloud Integrationで用意されているConverterでは変換が行えない為、スクリプトで変換します。
Groovy Scriptを設置してCreateを押して新規Scriptを作成してください。
事前に記述してあるScriptを削除して以下のScriptをペーストしてください。OKボタンを押して保存します。
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.json.JsonOutput;
import groovy.json.JsonSlurper;
import groovy.json.JsonBuilder;
import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import net.sf.json.JSON
import net.sf.json.JSONSerializer
import net.sf.json.xml.XMLSerializer
def Message processData(Message message) {
String payload = message.getBody(java.lang.String)
def jsonSlurper = new JsonSlurper();
def object = jsonSlurper.parseText(payload.toString())
JSON json = JSONSerializer.toJSON( payload )
XMLSerializer xmlSerializer = new XMLSerializer()
xmlSerializer.setTypeHintsCompatibility( false )
xmlSerializer.setTypeHintsEnabled( false )
String xml = xmlSerializer.write( json )
message.setBody(xml);
return message;
}
上記のJSON→XML変換スクリプトを実行する為に必要なライブラリをこちら のリンクよりインストールしてiFlowのResourceに追加します。
iFlowの空白部分をクリック後画面下のIntegration iFlowのResource>Add>Archiveより追加してください。
次にXML→CSVへ変換を行います。 XML to CSV Converterを設置します。
以下の設定情報を入力してください。
Path to Source Element in XSD: /o/value/e
Field Separator in CSV: Coma(,)
Include Attribute Values: チェック無 次にSFTPサーバとの接続設定を行います。
End MessegeよりReceiverへ線を繋ぎます。アダプターはSFTPを選択します。
以下の設定情報を入力します。
Directory: <任意のDirectory名> 本ブログではIAS_Audit_Logs
File Name: <任意のファイル名> 本ブログではIAS_Audit_Logs.csv
Address: <SCCで設定したSFTPサーバーVirtual Host>:<SCCで設定したSFTPサーバVirtual Port>
Proxy Type: On-Premise
Location ID: <SCCで設定したLocation ID> 設定してない場合は空欄
Authentication: User Name/Password
Credential Name: <Cloud IntegrationでDeployしたSFTPサーバ認証名 > 本ブログではsftpuser
*クラウド版SFTPサーバの場合は
Directory: <任意のDirectory名> 本ブログではIAS_Audit_Logs
File Name: <任意のファイル名> 本ブログではIAS_Audit_Logs.csv
Address: <SFTPサーバHost> :<SFTPサーバPort>
Proxy Type: Internet
Authentication: User Name/Password
Credential Name: <Cloud IntegrationでDeployしたSFTPサーバ認証名 > 本ブログではsftpuser
ここまででiFlowの開発は以上となります。
iFlowを保存後Deployしてください。
するとSFTPサーバーにIAS_Audit_Logsディレクトリ配下にIAS_Audit_Logs.csvというファイルが生成されます。
中を確認するとAccount,Category,Host,Message,Timeの項目のデータが書き込まれています。
最後に
本ブログではCloud Integrationを利用してIdentity Authenticationの監査ログをファイル出力する手順を紹介しました。
興味がある方はぜひ触ってみてください。