midPointにおける「アクセス認定」

midPointアドベントカレンダー13日目は、IGAの主要な要素である**アクセス認定**について解説させて頂きます。

# アクセス認定とは
退社、異動、などの理由により、組織内のシステムを利用する権限の無くなったIDは、削除や権限（ロール）のはく奪を行う必要があります。これを怠ると本来は権限の無い人が組織内のシステムにアクセスできてしまうという問題が起きかねません。実際、つい最近の2019年11月にも元従業員が社内のデータを消去してしまう[事件](https://www.itmedia.co.jp/news/articles/1911/26/news041.html)が発生しています。

通常は、[midPointにおける「エンタイトルメント管理」「ポリシーとロール管理」](https://qiita.com/zakiyamac09/private/f95a013a06152248a2b6)により自動的にIDの削除や権限のはく奪が行われますが、自動化が難しい例外的なケースの場合は人手を介して行う必要があります。（例えば、短期間のプロジェクトで既存のロールポリシーに当てはまらないような場合）

この作業は**アクセス認定（Access Certification）**と呼ばれており、商品の棚卸作業に似ているため、**ID棚卸**と言われることもあります。

# IGAで定義されている「アクセス認定」とは

ガートナーではIGAにおけるアクセス認定を以下のように説明しています。

(日本語訳)
"ユーザーのアクセス権限がポリシーに従っていることを保証し続けるために、定期的に管理者やリソース所有者にユーザーのアクセス権限の認定を要求すること（認証と呼ばれることもあります）"

(原文)
Requiring people such as managers and resource owners to certify the access rights that users have on a periodic basis, to ensure that access continues to comply with policies. (This is sometimes called "attestation.")

※ 出典 Gartner社「Gartner, [Definition: Identity Governance and Administration](https://www.gartner.com/en/documents/3885381/definition-identity-governance-and-administration)」, Felix Gaehtgens, Refreshed 11 September 2019, Published 7 August 2018 (2018年9月の記事-閲覧は有料)

##アクセス認定時に監査すべき内容

一般的には以下のような内容について確認する必要があります。

**監査すべき内容**
・元従業員など無効化または削除するのを忘れているIDがないか
・誤ったロールや組織がアサインされたIDがないか

IDライフサイクルの形態によっては以下のような内容についても注意する必要があります。

**正社員などの無期限雇用形態の場合**
・IDが正社員として正しく登録されているか
・同じ内容のIDが重複して登録されていないか

**パートナーや派遣社員のような有限雇用形態の場合**
・有効期限が正しく設定されているか
・正しい承認者が設定されているか

**複数の顧客や個人のIDを管理する権限を窓口となる外部の代表者に委譲している場合**
・正しい代表者が設定されているか
・権限委譲側の承認者は正しく設定されているか

**ユーザーが自分自身でIDの登録を行う場合**
・一定期間内（過去1年以内など）にIDに紐づいた連携システムを使用した形跡があるか




# midPointにおける「アクセス認定」を解説する

midPoint のアクセス認定は**キャンペーン**という形で定義して実行します。1回のレビュー手続きは**ステージ**として定義され、**キャンペーン**には一つ以上の**ステージ**が含まれています。アクセス認定（キャンペーン）はサーバタスクのスケジューラー機能を使用して定期的に実施されます。

## アクセス認定のプロセス

アクセス認定のプロセスは、組織の業務形態やポリシーにより異なります。今回はシンプルな例として、以下のようなフローで行うこととします。

![アクセス認定フロー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/ec1465cf-cda0-b248-7f33-bf0a471b3773.png)

このフローは、以下の登場人物により実施されます。

* **システム管理者:** キャンペーンのオーナーです。キャンペーン定義の作成、キャンペーンのスケジューリング、キャンペーン結果をレポート出力を担当します。
* **レビュアー:** IDのレビューを担当します。複数で担当する場合もあります。レビューを行い以下のいずれかの判断を行います。

`Accept（承諾）:` 現在の状態を正しいものとして受け入れます。
`Revoke（取り消し）:` 削除または無効化する必要があります。
`Reduce（削減）:` 削除する必要は無いが修整する必要があります。
`Not Decided（未定）:` レビュアーが判断できなかったため保留します。
`No Response（応答なし）:` キャンペーン期限内に判断されなかった。

それぞれのステップの詳細は以下のようになります。

## 準備
キャンペーン定義は、変更の必要がある場合を除いて、最初に一度だけ行えばよいです。
設定内容の詳細については、[midPoint by OpenStandia Advent Calendar 2019](https://qiita.com/advent-calendar/2019/midpoint-by-openstandia)、14日目の [midPointにおける「アクセス認定」実践編](https://qiita.com/yoko-ss/items/0acbc0bb541cbe04085b) をご参照ください。

###キャンペーン定義作成
システム管理者がキャンペーン定義を作成します。キャンペーン定義は、**基本情報**、**スコープ定義**、**ステージ定義**で構成されており、**基本情報**は、キャンペーンの名前、オーナー、キャンペーン実施時期などの基本的な情報を設定し、**スコープ定義**は、アクセス認定を行う対象を設定、**ステージ定義**は、レビュー期間、レビュアーの決定をどのように反映するかなどについて設定します。キャンペーンは定期的に（例えば、年に1回、年に2回、月に1回）実行されることを前提としています。


参考：[Access Certification](https://wiki.evolveum.com/display/midPoint/Access+Certification)
参考：[Configuring certification campaign stages](https://wiki.evolveum.com/display/midPoint/Configuring+certification+campaign+stages)
参考：[Determining Certification Case Outcome](https://wiki.evolveum.com/display/midPoint/Determining+Certification+Case+Outcome)


###キャンペーンスケジューリング
サーバタスクのスケジューリング機能を使用し、定期的にキャンペーンが実施されるようにします。実施間隔は自由に設定可能ですので、組織内のポリシーにより決定することになると思います。スケジューリングは Linux の cron のような形式で細かく設定することができます。

参考：[Automated scheduling of campaigns](https://wiki.evolveum.com/display/midPoint/Access+Certification#AccessCertification-Automatedschedulingofcampaigns)


## 実施
###ステージ開始
スケジューラーによりキャンペーンの最初のステージが開始されます。ステージの開始や終了などの情報はキャンペーンオーナー（本記事ではシステム管理者）とレビュアーにメールで通知することが出来ます。

参考：[Access Certification Notifications](https://wiki.evolveum.com/display/midPoint/Access+Certification+Notifications)

###IDのレビュー
midPoint の画面上は以下のような操作になります。

![レビュー開始](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/354ae119-17e2-919f-5f07-048700bef501.gif)

###ステージ締切
ステージの実施期間が過ぎたのでスケジューラーがキャンペーンを締め切ります。ステージが一つの場合はここで終了ですが、複数ある場合は次のステージに進みます。ステージの期間を設定しないことも出来ますが、その場合はシステム管理者が手動でステージをクローズして終了させる必要があります。

## 反映/証跡
midPoint ではレビュー結果をIDに反映させる動作を**間違っている状態を修正する**という意味で**修復（Remediation）**と呼びます。自動的に修正を行う設定`自動リコンシリエーション（automated）`または通知のみ行う`手動リコンシリエーション（reportOnly）`を設定できます。レビュアーがいない場合の動作を`Revoke（取り消し）`にしておくことで、レビュアーがいなくなった孤立したIDを発見して停止させることも可能です。


###レビュー結果をシステムに反映
キャンペーンの終了に伴い、レビュー結果をもとにシステムを正しい状態に**修復**します。どのように修復するかはキャンペーン／ステージの定義によります。

###キャンペーン結果をレポート出力
キャンペーンオーナーであるシステム管理者が結果をレポート出力します。midPoint の画面上は以下のようになります。


![キャンペーン終了](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/79666663-f629-d78b-be91-6b2f60df1e46.gif)

## その他のアクセス認定
スケジューラーによる定期的なアクセス認定以外に、アドホック認定(Ad-hoc certification)というものがあります。これは、ユーザーの属性変更などをトリガーにしてキャンペーンを開始するものです。例として、新しく配属されたユーザーのアクセス権限を組織の管理者が確認する必要がある場合、対象のIDに組織がアサインされたことをトリガーにアクセス認定を自動的に開始する。のような使い方ができます。

参考：[Ad-hoc certification HOWTO](https://wiki.evolveum.com/display/midPoint/Ad-hoc+certification+HOWTO)


# まとめ

今回ご紹介した midPoint におけるアクセス認定の機能は、ごく[初歩的](https://wiki.evolveum.com/display/midPoint/Access+Certification+-+a+very+quick+tutorial)なものに留めています。
midpoint インストールディレクトリの doc/samples には某有名魔法学校の物語を思わせる物などの様々なサンプルが付属していますので、参考になると思います。
ただ、更新が追い付いていない物もあるようなので、[最新版](https://github.com/Evolveum/midpoint-samples)もチェックしてみて下さい。

※次の記事[midPoint by OpenStandia Advent Calendar 2019](https://qiita.com/advent-calendar/2019/midpoint-by-openstandia)、14日目の[midPointにおける「アクセス認定」実践編](https://qiita.com/yoko-ss/items/0acbc0bb541cbe04085b)も併せてご参照下さい。

# 参考URL

[Access Certification](https://wiki.evolveum.com/display/midPoint/Access+Certification)
※アクセス認定概要

[Configuring certification campaign stages](https://wiki.evolveum.com/display/midPoint/Configuring+certification+campaign+stages)
※認定キャンペーンステージの設定について

[Access Certification - a very quick tutorial](https://wiki.evolveum.com/display/midPoint/Access+Certification+-+a+very+quick+tutorial)
※アクセス認定の簡単なチュートリアル

[Access Certification - requirements draft](https://wiki.evolveum.com/display/midPoint/Access+Certification+-+requirements+draft)
※アクセス認定の機能要件

[Ad-hoc certification HOWTO](https://wiki.evolveum.com/display/midPoint/Ad-hoc+certification+HOWTO)
※Ad-Hoc 認定について

[Approvals terminology](https://wiki.evolveum.com/display/midPoint/Approvals+terminology)
※承認関連の用語について