各バックエンドを利用するための準備
************************************

ここでは Unicorn ID Manager で各バックエンドを利用する前に
実施する必要のある作業について説明します。

ここでは、以下のバックエンドの事前準備の作業について記載しています。

* Windows Server の Active Directory
* Google G Suite (旧名 Google Apps)
* Azure Active Directory (Office365)

Windows Server の Active Directory
=====================================

Windows Server の Active Directory をバックエンドにするためには、
Windows Server に **証明書サービス** をインストールし、
インストール後に Windows Server の再起動が必要となります。

**証明書サービス** は PowerShell から以下のコマンドを
実行することでインストールできます。
証明書の有効期限等は運用ポリシーに合わせて任意の値を指定してください。

::

    PS > Add-WindowsFeature ADCS-Cert-Authority -IncludeManagementTools
    PS > Install-AdcsCertificationAuthority -CAType EnterpriseRootCA `
         -ValidityPeriod Years -ValidityPeriodUnits 10 `
         -HashAlgorithmName SHA256 `
         -KeyLength 2048

Google G Suite
==============

Google G Suite (旧名 Google Apps) を Unicorn IDM のバックエンド
にするには、Google API コンソールでサービスアカウントを作成し、
Google 管理コンソールでサービスアカウントに対して API アクセスを
承認する必要があります。

以下に作業の概要を示します。

a. Google API コンソールでサービスアカウントと API キーを作成する
    1. Google API コンソールを開く。
    2. 組織 (G Suite ドメイン) にプロジェクトを作成する。
    3. プロジェクトの Admin SDK の API を有効にする。
    4. プロジェクトにサービスアカウントと API キーを作成する。
    5. サービスアカウントのクライアント ID を控える。
b. Google 管理コンソールでサービスアカウントに API アクセスを承認する
    1. Google 管理コンソールを開く。
    2. サービスアカウントのクライアント ID に対して API アクセスを承認する。

Google API コンソールでサービスアカウントと API キーを作成する
--------------------------------------------------------------

1. Google API コンソール https://console.developers.google.com/ に
   アクセスして、管理権限を持つ Google アカウントでログインする。

   - ほかの Google アカウントでログイン済みの場合は、ページ
     上部メニューバー右端のアイコンをクリックして別のアカウントを
     選択するか、 **アカウントを追加** ボタンを押して追加して
     ログインする。

2. プロジェクトを作成する。名前、ID は任意。

   - ページ上部メニューバーの組織 (G Suite ドメイン) 選択プルダウン
     メニュー (「Google APIs」ロゴの右横) をクリックし、 **選択**
     ダイアログ中の **＋** ボタン (プロジェクトを作成) をクリックする。

   - **新しいプロジェクト** 画面の **プロジェクト名** 欄に
     「G Suite」(例) と入力する。プロジェクト ID は一意なものが
     自動で決定され **プロジェクト ID は g-suite-<数字列> です** と
     のように表示される。任意の ID を割り当てたい場合は、
     その右横の **編集** をクリックして **プロジェクト ID** 欄に
     「g-suite」(例) など他プロジェクトと重複しない ID を入力する。

   - 最後に **作成** ボタンをクリックする。

3. プロジェクトの Admin SDK API を有効にする。

   - ページ上部メニューバーの組織 (G Suite ドメイン) 選択プルダウン
     メニューからプロジェクトを選択する。(すでに選択されているなら不要)

   - ページ上部メニューバー左のハンバーガーメニュー (「Google APIs」ロゴの左横)
     から **API Manager** > **ライブラリ** をクリックし、 **よく使われる API**
     内の **G Suite APIs** 節の **Admin SDK** をクリックし、 **有効にする**
     をクリックする。

4. プロジェクトにサービスアカウントを作成する。名前は任意。

   - ページ上部メニューバーの組織 (G Suite ドメイン) 選択プルダウン
     メニューからプロジェクトを選択する。(すでに選択されているなら不要)

   - ページ上部メニューバー左のハンバーガーメニューから **IAM と管理**
     > **サービス アカウント** をクリックし、 **サービス アカウントを作成**
     をクリックする。

   - **サービス アカウントの作成** ダイアログ中の **サービス アカウント名**
     に「Unicorn IDM」(例) と入力し、 **役割** を「役割を選択」のままにする。
     **サービス アカウント ID** は一意なものが自動で決定されるが、
     任意の ID を割り当てたい場合は「unicorn-idm」(例) など他サービス
     アカウントと重複しない ID を入力する。

   - 同ダイアログ中の **新しい秘密鍵の提供** チェックボックスをオンにして、
     **キーのタイプ** から「JSON」選択する。

   - 同ダイアログ中の **G Suite ドメイン全体の委任を有効にする**
     チェックボックスをオンにして、 **同意画面のサービス名** 欄に
     「Unicorn IDM Service」(例) と入力する。

   - 最後に **作成** ボタンをクリックする。

   - アカウント作成が完了するとサービスアカウントの API キー (JSON キー)
     がダウンロードされるので、Unicorn IDM の設定ディレクトリ下に保存する。
     このファイルには Google G Suite API の管理権限を持つサービス
     アカウントの秘密鍵が格納されているため、漏洩しないように注意が必要。
     Unicorn ID Manager を実行するプロセス以外から参照できないようにする。

7. サービスアカウントのクライアント ID を控える。

   - **IAM と管理** の **サービスアカウント** 画面のサービスアカウント
     一覧右の **オプション** 欄の **クライアント ID を表示** を
     クリックして、 **クライアント ID** 欄の値 (数字列) を参照する。

Google 管理コンソールでサービスアカウントに API アクセスを承認する
------------------------------------------------------------------

1. Google 管理コンソール http://admin.google.com/ にアクセスして、
   管理権限を持つ Google アカウントでログインする。

2. ホーム画面もしくは ページ上部メニューバー左のハンバーガーメニュー
   から **セキュリティ** > **詳細設定** をクリックして、 **認証** 節の
   **API クライアント アクセスを管理する** をクリックする。

3. **クライアント名** 欄に先に控えたサービスアカウントのクライアント ID を、
   **1 つ以上の API の範囲** 欄に下記の内容を入力して **承認**
   ボタンを押す。

   ::

       https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.orgunit


Azure Active Directory (Office365)
====================================

Azure Active Directory (Azure AD) をバックエンドにするためには、
以下に示す手順を `SKU の名前を取得`_ 以外をすべて実施してください。

`SKU の名前を取得`_ はユーザーにライセンスを付与する際に必要な情報を取得する
ために必要です。

なお、ここではすでに Azure AD の 管理者アカウントが設定済みで、
かつ Azure AD の言語設定が日本語であることを前提とします。

アプリケーション ID の作成
---------------------------

1. https://portal.azure.com/ にアクセス

2. 左ペインの **Azure Active Directory** をクリック

3. 左ペインの **アプリの登録** をクリック

4. 画面上部の **＋追加** をクリック

5. 下記の項目を入力し、画面下部の **作成** をクリック

   - **名前** : unicornidmなど任意の名前を入力

   - **アプリケーションの種類** : 「Webアプリ/API」を選択

   - **サインオンURL** : http://localhost などを入力 

6. 作成したアプリケーション名をクリック 

   - 指定した名前やアプリケーションの種類、ホームページが表示される

7. 画面上部に表示されている 「アプリケーションID」の **最後の・・・** をクリックすると、
   アプリケーションIDをコピー可能

   - アプリケーションIDは、UnicornIDMのクライアントIDに設定 
   - ``/opt/osstech/etc/unicornidm/unicornidm.conf`` の azureバックエンドでの ``bind_user`` パラメータに設定

8. 画面の **「設定」 - 「API アクセス」 - 「キー」** をクリック後、 **「キー」** セクションにて下記を入力後、
   画面上部にある **「保存」** アイコンをクリック

   - 「キーの説明」: 任意の説明を入力

   - 「時間の選択」:「期限なし」を選択 

   - 保存後、キーの値が表示されるため、コピーして任意のファイルにペーストして厳重に保存  **（以降は表示されなくなります）**

9. 保存したキーの値を UnicornIDMのシークレットキーとして設定 

   - ``/opt/osstech/etc/unicornidm/unicornidm.conf`` の azureバックエンドでの ``bind_password_file`` パラメータで指定しているファイルに記載

アプリケーション ID にロールを割り当て
----------------------------------------

1. Windows 端末にて PowerShell 用の Azure AD モジュールをインストール
   (http://msdn.microsoft.com/library/azure/jj151815.aspx からダウンロード)

2. PowerShell を開き、以下のコマンドを実行
   (*<APPNAME>* は `アプリケーション ID の作成`_ の 3. で作成した名前)

   ::

       $APPNAME = "<APPNAME>"
       Import-Module MSOnline
       Connect-MsolService
       Add-MsolRoleMember -RoleName "User Account Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId (Get-MsolServicePrincipal -SearchString $APPNAME).ObjectId

SKU の名前を取得
------------------

1. Windows 端末にて PowerShell 用の Azure AD モジュールをインストール
   (http://msdn.microsoft.com/library/azure/jj151815.aspx からダウンロード)

2. PowerShell を開きサブスクリプションごとに割り当てられている SKU の名前 を取得

   ::

       Import-Module MSOnline
       Connect-MsolService
       Get-MsolAccountSku | Select-Object -Property SkuPartNumber

3. 出力された情報のうち SkuPartNumber の列以下の情報を控える
   (たとえば、以下のような出力が得られます)

   ::

       SkuPartNumber
       -------------
       STANDARDPACK
