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

ここでは 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) をバックエンドにするためには、
Google API コンソールでサービスアカウントにキーを作成し、
Google 管理コンソールでサービスアカウントのクライアント ID に
対して API のアクセスを承認する必要があります。

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

a. Google API コンソール
    1. Google API コンソールを開く。
    2. 組織 (G Suite ドメイン) にプロジェクトを作成する。
    3. プロジェクトの Admin SDK の API を有効にする。
    4. プロジェクトにサービスアカウントを作成する。
    5. サービスアカウントの G Suite ドメイン全体の委任を有効にする。
    6. サービスアカウントのサービスアカウントキー (JSON キー) を作成する。
    7. サービスアカウントのクライアント ID を控える。
b. Google 管理コンソール
    1. セキュリティの詳細設定の API クライアントのアクセス管理で
       クライアント ID に対して API の範囲を承認する。

以下に作業の詳細を示します。なお、ここではすでに Google G Suite の
管理者アカウントが設定済みであることを前提とします。


API サービスアカウントとキーの作成
----------------------------------

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

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

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

   - ページ上部メニューバーの組織 (G Suite ドメイン) 選択プルダウン
     メニューからドメインを選択してから、同じくページ上部メニューバー
     内のプロジェクト選択プルダウンメニューを開いて
     **プロジェクトを作成** を開く。

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

   - ページ上部メニューバー左のハンバーガーメニューから **API Manager**
     を開き、左ペインの **ライブラリ** を開き、**Google Apps API** 節の
     **Admin SDK** を開き、**有効にする** を実行する。

4. プロジェクトにサービスアカウントを作成する。名前は任意、
   役割りは不要、**G Suite ドメイン全体の委任を有効にする**
   チェックボックスを有効にして作成。

   - ページ上部メニューバー左のハンバーガーメニューから **IAM と管理**
     を開き、左ペインの **サービス アカウント** を開き、
     **サービス アカウントを作成** を実行する。

5. 既存のサービスアカウントの **G Suite ドメイン全体の委任を有効にする**
   場合は、**IAM と管理** の **サービスアカウント** 画面の
   サービスアカウント一覧右のハンバーガーメニューから **編集** する。

6. サービスアカウントのサービスアカウントキーを作成する。

   - **IAM と管理** の **サービスアカウント** 画面のサービスアカウント
     一覧右のハンバーガーメニューから **キーを作成** する。
     **キーのタイプ** は **JSON** を選択する。

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

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

   - **IAM と管理** の **サービスアカウント** 画面のサービスアカウント
     一覧右の **オプション** 欄の **クライアント ID を表示** を参照する。

Google G Suite ドメインの権限を 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
