SaviyntのIDリポジトリとユーザ管理について

## はじめに
本記事では、SaviyntにおけるIDリポジトリの機能とそれに関連するデータモデルを説明し、その後ユーザ管理としてユーザの作成、更新の方法の１つであるスキーマアップロード方式によるユーザ作成の例を紹介します。

## IDリポジトリ
SaviyntのIDリポジトリは、ユーザ、アカウント、ロール、権限、リソースなど、組織内のアイデンティティに関するデータを保存、管理するデータベースのようなもので、次のような機能を中心に構成されています。

* アイデンティティ管理
* アクセス管理
* アプリケーション管理

Saviyntでは、これらをユーザ、アカウント、権限、セキュリティシステム、エンドポイント、コネクタ、ロール等の基本的なデータモデルによって管理します。機能とデータモデルの対応は下表のとおりです。

|#|機能|データモデル|概要|
|:--|:--|:--|:--|
|1|アイデンティティ管理|ユーザ、アカウント|ユーザ情報（氏名、メールアドレス、役職など）を管理|
|2|アクセス管理|権限、ロール|ユーザがどのアプリケーションや機能にアクセスできるかの権限情報を管理|
|3|アプリケーション管理|セキュリティシステム、エンドポイント、コネクタ|アプリケーションの接続情報の管理|

Sayviyntでは、これらの基本的なデータモデルは、Saviynt Enterprise Identity Cloud (以下EIC)から登録や参照が可能です。EICには様々な機能がありますが、本記事では割愛します。

次にそれぞれのデータモデルについて説明します。

### ユーザ(Users)
ユーザは、人を意味するデータモデルで、従業員(正社員または契約社員)のIDを表す一意の識別子です。ユーザには、名、姓、役職、メールアドレス等の複数の属性があります。

### アカウント(Accounts)
アカウントは、アプリケーション内のユーザに対して作成されたIDです。アカウントはユーザに紐づきます。ユーザはアプリケーション内の異なる権限を持つ1以上のアカウントを持つことが出来ます。これは１人のユーザに対して、GmailやOffice365等のアプリケーションのアカウントを紐づけることができることを意味します。

### 権限(Entitlements)とロール(Roles)
権限は、アプリケーションに対するアクセスを表し、ユーザがアプリケーションで特定のアクションの実行できるようにします。権限はアカウントに紐づきます。
ロールは権限のコレクションです。ロールを用いることで権限の割り当てや割り当ての解除を容易に行うことが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/857744/24b82d9b-97e0-6d0c-76d3-eb5511edb9fd.png)

:::note info
[「Enterprise Identity Cloud Administration Guide」](https://saviynt-prod.zoominsoftware.io/bundle/EIC-Admin-v24x/page/Content/Chapter02-Identity-Repository/Saviynt-Identity-Repository.htm)より引用
:::

### セキュリティシステム(Security Systems)とエンドポイント(Endpoints)
セキュリティシステムは、Saviyntとターゲットとなるシステム間の接続を表します。例えばAD、LDAP、AWS、Azure、Boxなどがセキュリティシステムに相当します。
セキュリティシステムは、エンドポイントの集合として構成されます。エンドポイントとは、実際のアプリケーションです。たとえば、セキュリティシステムをMicrosoft Office365とする場合、エンドポイントに相当するのは、Word、Excel、PowerPointなどです。
セキュリティシステムとエンドポイントの関係については、下図のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/857744/76977e9f-30b6-b87f-5e26-a2014dfb8544.png)

:::note info
画像は[「Enterprise Identity Cloud Administration Guide」](https://saviynt-prod.zoominsoftware.io/bundle/EIC-Admin-v24x/page/Content/Chapter02-Identity-Repository/Saviynt-Identity-Repository.htm)より引用
:::

### コネクタ(Connectors)
コネクタはSaviyntとアプリケーション間の接続を設定するインターフェイスで、アプリケーションからユーザ、アカウント、権限、ロールなどのデータを同期します。
Saviyntで利用できるコネクタには、ほとんどの標準的なアプリケーションに対応できる[認定コネクタ](https://saviynt-prod.zoominsoftware.io/bundle/EIC-Connectors/page/Content/Certified-Connectors.htm#top)や[コミュニティ版のコネクタ](https://saviynt-prod.zoominsoftware.io/bundle/EIC-Connectors/page/Content/Community-Sourced-Connectors.htm)などがあります。また独自でコネクタ開発が可能なSaviyntコネクタフレームワークを使用することでSaviyntがコネクタを提供していないその他のアプリケーション用のカスタムコネクタを開発、構築できます。


## ユーザ管理
Saviyntにおいてユーザとは、組織内の従業員、契約社員などの人情報を識別するための一意のエンティティを表します。ユーザは通常、人事アプリケーションからユーザ情報をインポートすることで作成、更新されます。Saviyntで提供している代表的なユーザの作成、更新方法には以下のようなものがあります。

* EICのUIでユーザを作成
* スキーマアップロード方式によるユーザのインポート
* ファイルからユーザをインポート
* データベースやアプリケーションをEICに統合してインポート
* Access Request System(ARS)を利用したユーザの申請や招待
* APIによるユーザの作成、更新

今回はこれらのうち「スキーマアップロード方式によるユーザ作成」について紹介します。

### スキーマアップロード方式によるユーザのインポート
スキーマアップロード方式によるユーザのインポートとは、源泉となるシステムやアプリケーションからユーザデータをファイルとして受領し、それを取り込むことによってSaviynt上に源泉からのユーザデータを反映する方式のことです。

この方式には2つのファイルが必要になります。1つ目は、savファイルと呼ばれるユーザデータをSaviyntへ反映するために必要なマッピング情報やユーザデータ取り込み時の振る舞いを記載したファイル。2つ目はユーザデータそのものとなるcsvファイルです。

これら2つのファイルの組み合わせでユーザデータをインポートします。
実際には次のような手順でユーザデータをインポートします。

1. savファイルを定義する
1. savファイルをEICにアップロードする
1. スキーマインポートジョブを作成する
1. ユーザデータのcsvファイルを作成する
1. csvファイルをEICにアップロードする

#### savファイルの定義
savファイルのサンプルを以下(sample_users.sav)に示します。

```sav:sample_users.sav
#USER_NOT_IN_FILE_ACTION=NOACTION
#FILENAME=sys01_
#UERTHRESHOLD=2
#DELIMITER=,
#SKIP_NUMBER_OF_LINES=1
#ZERODAYPROVISIONING=TRUE
#userReconcilliationField=customProperty1
#GENERATESYSTEMUSERNAME=FLASE
#GENERATEEMAIL=FALSE
#EMAILTEMPLATE="Email Template Name"
#CHECKRULES=TRUE
#STATUSKEYJSON={"STATUS_ACTIVE":["1","Active","TRUE"],"STATUS_INACTIVE":["0","Inactive","FALSE"]}
EMPLOYEEID,FIRSTNAME,LASTNAME,COMPANYNAME,LOCATION,STATUSKEY,CUSTOMPROPERTY1
```

savファイルを作成する上での注意点として、savファイルのファイル名の末尾は必ずusers.savになっている必要があることと＃（ハッシュ文字)で始まる行が、所謂コメント行のように見えますが、savファイルでは有効な設定なのでご注意ください。

savファイルに設定できる項目の詳細は[Uploading Users Using Schema Upload](https://saviynt-prod.zoominsoftware.io/bundle/EIC-Admin-v24x/page/Content/Chapter03-User-Management/Uploading-Users-using-Schema-Upload.htm)をご確認いただくとして、csvファイルを作成する上で必要となる主要な項目として、#FILENAME、#DELIMITER、#SKIP_NUMBER_OF_LINES、#userReconcilliationFieldがあります。それぞれの簡単な説明は下表のとおりです。

|#|項目名|説明|
|:--|:---|:---|
|1|#FILENAME|savファイルに対応するcsvファイルの接頭辞を指定します。#FILENAMEに指定した接頭辞にマッチするcsvファイルが複数あった場合、全てがインポートの対象になります。|
|2|#DELIMITER|csvファイル内のデータ項目を区切りために使用する区切り文字を指定します。サポートされている区切り文字は、カンマ(,)、パイプ(\|)、タブ(\t)、チルダ(~)です。|
|3|#SKIP_NUMBER_OF_LINES|csvファイル内で読み飛ばす行数を指定します。csvにヘッダ行がある場合は1を指定します。|
|4|#userReconcilliationField|ユーザデータをインポートする際に、Saviyntの既存ユーザとのマッピングに使用する項目を指定。csvファイルのこの項目の値が既存ユーザの属性と一致する場合は更新となり、それ以外の場合は、新しいユーザが作成されます。|

savファイルの最終行には、＃（ハッシュ文字)が無しの行がありますが、これがユーザデータのcsvファイルのフォーマットに相当するものです。Saviyntのusersテーブルの属性名(後述)を列挙する形式で定義します。

:::note info
savファイルはユーザインポートだけでなく、アカウント、ロール、権限、組織をインポートする際にも利用されます。
ユーザインポート用のsavファイルがそうであるように、ファイル名の末尾は、それぞれaccounts.sav、roles.sav、entitylement_values.sav、organization.savとする必要があります。
:::

#### savファイルをEICへアップロード
savファイルをEICへアップロードするには、管理者ユーザでEICへログインし、File Directory画面を使用します。File Directory画面には、アップロードするファイルの種類を選択するタブがありますので、SAV Filesを選択し、アップロードするsavファイルを指定しアップロードします。


#### スキーマインポートジョブの作成
次にsavファイルに対応したcsvファイルを取り込むためのジョブを作成します。ジョブの作成はJob Control Panel画面で行います。
スキーマインポートジョブを作成する上で最低限必要な項目は下表のとおりなので、これらをJob Control Panel画面で設定します。

|#|項目名|設定内容|
|:--|:---|:---|
|1|Job Name|ジョブ名を設定。|
|2|Job Type|Schema based Users Import(SchemaUserJob)を設定。|
|3|SAV Files|EICにアップロードしたユーザインポート用のsavを選択。|
|4|Trigger|ジョブの起動トリガー(日次、毎時、分次など任意）を設定。|

ジョブ作成後、Job Control Panel画面にジョブ一覧の中に作成したジョブが確認できれば無事ジョブを作成できています。

#### ユーザデータ作成
ユーザデータのcsvファイルは、savファイルに定義した項目順で作成します。今回の場合だと、savファイルの定義に従って、以下のsys01_schemaupload.csvのようにヘッダを付与した状態で、EMPLOYEEIDからCUSTOMPROPERTY1までの各項目をカンマ(,)区切りで設定します。

```csv:sys01_schemaupload.csv
"EMPLOYEEID","FIRSTNAME","LASTNAME","COMPANYNAME","LOCATION","STATUSKEY","CUSTOMPROPERTY1"
"EMP0001","FN001","LN001","Company001","Location001","1","SYSUNAME001"
"EMP0002","FN002","LN002","Company002","Location002","1","SYSUNAME002"
"EMP0003","FN003","LN003","Company003","Location003","1","SYSUNAME003"
```

#### ユーザデータcsvをEICへアップロード
csvファイルをEICへアップロードするのは、savファイルと同様でFile Directory画面を使用します。savファイルをアップロードする時と異なり、アップロードするファイルの種別を選択するタブにData Filesを指定しアップロードしてください。

#### ユーザデータインポート
後はジョブを作成した際に、指定したジョブ起動トリガーでジョブが起動するとcsvファイルのインポートが開始されます。ジョブの実行が完了すると、Job Control Panelにジョブの実行結果が `success` または `failure` で表示されています。ジョブの実行が失敗した場合は、詳細画面にエラーメッセージが表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/857744/708a75d7-4c31-ebd3-4a4a-0510dce87a28.png)

ジョブの実行が完了すると、アップロードしたユーザデータのcsvファイルは処理済みとなるため削除されます。csvに設定したユーザがEICにインポートできているか確認するには、ユーザ一覧から参照できます。

:::note info
ユーザは一度作成すると、非アクティブにすることはできますが、削除することはできません。
:::

### usersテーブル
ユーザはIDリポジトリの中核となる主要なオブジェクトです。アカウントや権限などの他のオブジェクトは、ユーザを中心に展開されます。作成方法に寄らずSaviyntへ作成されたユーザはusersテーブルに格納されます。usersテーブルには以下のような項目があります。

<details><summary>usersテーブルの属性</summary>

usersテーブルには下表のような項目があります。

|#|項目|概要|
|:--|:--|:--|
|1|USERKEY|usersテーブルのキー項目|
|2|ACCOUNTEXPIRED||
|3|ACCOUNTLOCKED||
|4|CITY||
|5|COMMENTS||
|6|COMPANYNAME||
|7|COSTCENTER||
|8|COUNTRY||
|9|CREATEDBY|作成者|
|10|CREATEDATE|ユーザーが作成された日時|
|11|CUSTOMER||
|12|CUSTOMPROPERTY1~65|利用目的が特に定められていない任意に利用できる項目|
|13|DEPARTMENTNUMBER||
|14|DEPARTMENTNAME||
|15|DONOTDISTURBDELEGATE||
|16|PIIERASURESTATUS||
|17|EMAIL|メールアドレス|
|18|EMPLOYEETYPE|従業員種別。正社員や契約社員など、ユーザの雇用形態|
|19|EMPLOYEECLASS||
|20|EMPLOYEEID||
|21|ENABLED||
|22|ENDDATE||
|23|ENTITY||
|24|FAILEDTRIES||
|25|FISTNAME|ユーザの名|
|26|HANARULEKEY||
|27|JOBCODE||
|28|JOBDESCRIPTION||
|29|JOBID||
|30|JOB_FUNCTION||
|31|JOBCODEDESC||
|32|LASTCERTIFIEDCAMPAIGNNAME||
|33|LASTCERTIFIEDDATE||
|34|LASTCERTIFIEDUSER||
|35|LASTPASSWORDUPDATEDATE||
|36|LASTNAME|ユーザの姓|
|37|LASTSYNCDATE||
|38|LEAVESTATUS||
|39|LOCALE||
|40|LOCATION||
|41|LOCATIONDESC||
|42|LOCATIONNUMBER||
|43|MANAGER||
|44|MIDDLENAME||
|45|ORGUNITID||
|46|OWNER||
|47|OWNERONTERMINATE||
|48|PASSWORDEXPIRED||
|49|PHONENUMBER||
|50|PREFEREDFIRSTNAME||
|51|REGION||
|52|RISKCORE||
|53|RULEACTION||
|54|SAVUPDATEDATE||
|55|SECONDARYMAIL||
|56|SECONDARYMANAGER||
|57|SECONDARYPHONE||
|58|SITEID||
|59|STARTDATE||
|60|STATE||
|61|STATUSKEY|ユーザのステータス (Active or Inactive)|
|62|STREET||
|63|SYSTEMUSERNAME||
|64|TASKCREATEDFORTERMINATE||
|65|TERMDATE||
|66|TITLE||
|67|UPDATEDATE|ユーザーの最終更新の日時|
|68|UPDATEUSER|更新者|
|69|USERSOURCE||
|70|USERSOURCEKEY||
|71|UESRNAME|usersテーブル内で一意となるユーザ名|
|72|VENDORMANAGER||
</details>

実際に設定された値を確認するには、EICに管理者ユーザでログインし、Data Analyzerを開いてください。 Data Analyzerでは、Saviyntの内部テーブルにアクセスできるので、ここからusersテーブルを検索してみてください。

## さいごに
本記事では、SaviyntのIDリポジトリが提供する基本的な機能をデータモデルの観点から紹介し、ユーザ管理のはじめの一歩となるユーザ作成について、スキーマアップロードによる作成方法を説明しました。ユーザ作成には今回紹介しきれなかったAccess Request System(ARS)を利用したものなど様々な方法があります。ご興味がある方は、EIC Administrator Guideをチェックしてみてください。

https://saviynt-prod.zoominsoftware.io/bundle/EIC-Admin-v24x/page/Content/Chapter13-Access-Requests/Access-Requests.htm