Technical Articles
Identity Authenticationの監査ログをCloud Integrationを利用して読み込む方法
はじめに
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サブアカウント接続を完了させてください。
続いてCloud ConnectorとSFTPサーバを接続します。
Cloud To On-Premiseをより+Addを実行し新規の接続を定義します。
以下の接続情報を入力してください。
Cloud ConnectorとBTPサブアカウントを接続する際に設定したLocation IDとCloud ConnectorとSFTPサーバー接続の際に設定したVirtual HostとVirtual PortはCloud Integrationで使用する為メモしておいてください。(Location IDを設定していない場合は空欄で構いません。)
3. Cloud Integration iFlow開発
iFlow全体概要
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サーバパスワード>
SSHタブでホストキーを取得します。以下の情報を入力して、sendしてください。成功した後コピーしてテキストエディタでknown_hostsとして保存します。
*クラウド版SFTPサーバの場合は
Host: <SFTPサーバ Host>
Port: <SFTPサーバPort>
Proxy Type: Internet
Authentication: None
Security Materialに戻り、Uploadボタンより先程保存したknown_hostsをアップロードします。
*クラウド版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/27f4f030b2cc432f93869f9692f5f5c2.html )
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
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;
}
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段階で変換します。
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;
}
End MessegeよりReceiverへ線を繋ぎます。アダプターはSFTPを選択します。

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
Address: <SFTPサーバHost>:<SFTPサーバPort>
Proxy Type: Internet
Authentication: User Name/Password
Credential Name: <Cloud IntegrationでDeployしたSFTPサーバ認証名> 本ブログではsftpuser
iFlowを保存後Deployしてください。
するとSFTPサーバーにIAS_Audit_Logsディレクトリ配下にIAS_Audit_Logs.csvというファイルが生成されます。

中を確認するとAccount,Category,Host,Message,Timeの項目のデータが書き込まれています。

最後に
本ブログではCloud Integrationを利用してIdentity Authenticationの監査ログをファイル出力する手順を紹介しました。
興味がある方はぜひ触ってみてください。
Hi Kazuaki Horimoto
Hi Muthaiah-san
Thanks for pointing this out. I have addressed your advice.
Superb Kazuaki Horimoto 謝謝你