【SAP】SAPCPサブアカウントの監査ログを取得する

# はじめに
SAPCPサブアカウントのログイン履歴等のログを取得する仕組みを実装する機会があり、その際の実装方法や手順について、備忘録として記載します。

実装環境
　・Neo環境
　・Windows10

# 目次
[1. 実装方法の概要](https://qiita.com/drafts/2d345a1a270e3e5a04db/edit#1-%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95%E3%81%AE%E6%A6%82%E8%A6%81)
[2. 実装の手順](https://qiita.com/drafts/2d345a1a270e3e5a04db/edit#2-%E5%AE%9F%E8%A3%85%E3%81%AE%E6%89%8B%E9%A0%86)
　[2-1. OAuthアカウント作成](https://qiita.com/drafts/2d345a1a270e3e5a04db/edit#2-1-oauth%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90)
　[2-2. アクセストークン取得](https://qiita.com/drafts/2d345a1a270e3e5a04db/edit#2-2-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8F%96%E5%BE%97)
　[2-3. 監査ログ取得](https://qiita.com/drafts/2d345a1a270e3e5a04db/edit#2-3-%E7%9B%A3%E6%9F%BB%E3%83%AD%E3%82%B0%E5%8F%96%E5%BE%97%E5%BF%85%E8%A6%81%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6json%E5%BD%A2%E5%BC%8F%E3%82%92%E6%95%B4%E3%81%88%E3%81%9F%E3%82%8Acsv%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%9F%E3%82%8A%E3%81%99%E3%82%8B)
[さいごに](https://qiita.com/drafts/2d345a1a270e3e5a04db/edit#%E3%81%95%E3%81%84%E3%81%94%E3%81%AB)
[参考](https://qiita.com/drafts/2d345a1a270e3e5a04db/edit#%E5%8F%82%E8%80%83)

# 1. 実装方法の概要
SAPが提供しているプラットフォームAPI「The audit log retrieval API」を使用して、ログを取得します。
今回は、PC端末から「The audit log retrieval API」を実行し、対象のサブアカウントの監査ログをテキストファイルで取得する方法をご紹介します。

# 2. 実装の手順
大まかな実装の手順としては、「OAuthアカウント作成 →アクセストークン取得 →監査ログ取得」となります。

### 2-1. OAuthアカウント作成
① Cockpitにて、対象のサブアカウントへログインし、[Security] > [OAuth]を開く。
② [Platform API]タブをクリックする。
③ [Create API Client]をクリックする。
![OAuth_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1255237/e31b2c26-dab0-71a5-5259-79b4adeb9e98.png)
④ Audit Log Serviceのチェックボックスをクリックする。
⑤ [Save]をクリックする。
![OAuth_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1255237/e147aeec-ef56-c8df-81f4-b283bd27ee59.png)
⑥ 表示される『client ID』と『client Secret』をメモしておく。
　（2-2. アクセストークン取得にて使用）
⑦ [OK]をクリックする。
![OAuth_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1255237/d025b9d5-680a-f4d7-743c-6e19913bdda0.png)

### 2-2. アクセストークン取得
① Cockpitにて、対象のサブアカウントへログインし、『HOST』と『ACCOUNT_NAME』をメモしておく。
　（アクセストークン取得時に使用）
![AccessToken_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1255237/20c7f575-982f-8369-7e24-74621316a230.png)
② PC端末のコマンドプロンプトを起動し、下記を実行する。

```
CURL -X POST -u "【OAUTH_NAME】:【OAUTH_PASSWORD】" "【ACCESS_TOKEN_URL】?grant_type=client_credentials"
```
|項目|値|
|:---|:---|
|【OAUTH_NAME】|2-1-⑥にてメモした『client ID』|
|【OAUTH_PASSWORD】|2-1-⑥にてメモした『client Secret』|
|【ACCESS_TOKEN_URL】|https\://api.【HOST】/oauth2/apitoken/v1|
|【HOST】|2-2-①にてメモした『HOST』|

③ 取得した『ACCESS_TOKEN』をメモしておく。
　 ※『ACCESS_TOKEN』の末尾が「\u003d」の場合、「=」へ置換する。

### 2-3. 監査ログ取得
① PC端末のコマンドプロンプトにて、下記を実行する。
・ログを整形せずに取得する場合

```
CURL -G -H "Authorization: Bearer 【ACCESS_TOKEN】" -H "accept: application/json" "【AUDIT_LOG_URL】"
```
・ログをCSV形式で取得する場合

```
CURL -G -H "Authorization: Bearer 【ACCESS_TOKEN】" -H "accept: application/json" "【AUDIT_LOG_URL】" | jq -r ".value[] | [.Uuid, .Category, .User, .Tenant, .Account, .Application, .Time, .Message, .InstanceId, .FormatVersion] | @csv"
```
|項目|値|
|:---|:---|
|【ACCESS_TOKEN】|2-2-③にてメモした『ACCESS_TOKEN』|
|【AUDIT_LOG_URL】|https\://api.【HOST】/auditlog/v1/accounts/【ACCOUNT_NAME】/AuditLogRecords|
|【HOST】|2-2-①にてメモした『HOST』|
|【ACCOUNT_NAME】|2-2-①にてメモした『ACCOUNT_NAME』|

# さいごに
監査ログ取得時に、取得件数や特定時刻のログなどを指定することも可能です。
また、2-2〜2-3の処理を記載したbatファイルを指定のタイミングで実行するようにスケジューリングすることで、監査ログファイルを指定のタイミングで自動取得することができます。

# 参考
[プラットフォーム API の使用](https://help.sap.com/viewer/ea72206b834e4ace9cd834feed6c0e09/Cloud/ja-JP/392af9d162694d6595499f1549978aa6.html)
[Neo 環境の監査ログ取得 API の使用](https://help.sap.com/viewer/ea72206b834e4ace9cd834feed6c0e09/Cloud/ja-JP/e4d818da43af43e1983df8e9e5caadb2.html)