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

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

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

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

4.1. 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

4.2. SQL

Unicorn ID Managerではテーブルの作成は行いませんので、 SQLバックエンドを利用する際は、適切な設定のテーブルを事前に作成する必要があります。

ここでは、Unicorn ID Manager で利用出来るテーブルの作成手順について記載しています。

4.2.1. MySQL

ここではSQLバックエンドとしてMySQLを利用した際の、テーブル作成手順について記載しています。

4.2.1.1. 必要なテーブル

Unicorn ID ManagerでSQLバックエンドを利用するために必要なテーブルは、

  • ユーザー情報を保存するテーブル
  • グループ情報を保存するテーブル
  • メンバー情報を保存するテーブル

の3つになります。 それぞれのテーブル名は unicornidm.conf で指定するので特に制約はありません、管理しやすい名前を指定してください。 今回の例では users,groups,members とします。

4.2.1.2. テーブルの作成

以下は testdb というDBを作成し、 users,groups,members のテーブルを作成するSQL文の例です。

CREATE DATABASE testdb CHARACTER SET utf8mb4;

use testdb;

CREATE TABLE users (
    user_name varchar(768) collate utf8mb4_0900_ai_ci primary key,
    sn text,
    given_name text,
    group_number integer,
    password text,
    mail text,
    description text
);

CREATE TABLE `groups` (
    group_name varchar(768) collate utf8mb4_0900_ai_ci primary key,
    description text
);

CREATE TABLE members (
    group_name text references `groups`(group_name),
    user_name text references users(user_name)
);

user_namegroup_name は主キーとなっています。 Unicorn ID Manager では主キーとなる属性は大文字小文字を区別しない比較をすることを前提としています。 そのため user_namegroup_name には明示的に collate utf8mb4_0900_ai_ci という照合順序の設定をしています。

また、 groups という値が MySQL 8.0.2 から予約語となっているので、バッククオートでエスケープする必要があることにも注意してください。

4.2.2. PostgreSQL

ここではSQLバックエンドとしてPostgreSQLを利用した際の、テーブル作成手順について記載しています。

4.2.2.1. 必要なテーブル

Unicorn ID ManagerでSQLバックエンドを利用するために必要なテーブルは、

  • ユーザー情報を保存するテーブル
  • グループ情報を保存するテーブル
  • メンバー情報を保存するテーブル

の3つになります。 それぞれのテーブル名は unicornidm.conf で指定するので特に制約はありません、管理しやすい名前を指定してください。 今回の例では users,groups,members とします。

4.2.2.2. テーブルの作成

以下は testdb というDBを作成し、 users,groups,members のテーブルを作成するSQL文の例です。

CREATE DATABASE testdb;

\c testdb;
create extension citext;

CREATE TABLE users (
    user_name citext primary key,
    sn text,
    given_name text,
    group_number integer,
    password text,
    mail text,
    description text
);

CREATE TABLE groups (
    group_name citext primary key,
    description text
);

CREATE TABLE members (
    group_name citext references groups(group_name),
    user_name citext references users(user_name)
);

INSERT INTO users VALUES('psqltest0',
                         'psqltest0',
                         'psqltest0',
                         100,
                         'User-6B#',
                         'mail@example.com',
                         'description');

user_namegroup_name は主キーとなっています。 Unicorn ID Manager では主キーとなる属性は大文字小文字を区別しない比較をすることを前提としています。 そのため user_namegroup_name には大文字小文字を区別しない citext という型を利用しています。

4.3. Google G Suite

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

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

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

4.3.1. 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 を実行するプロセス以外から参照できないようにする。
  1. サービスアカウントのクライアント ID を控える。
    • IAM と管理サービスアカウント 画面のサービスアカウント 一覧右の オプション 欄の クライアント ID を表示 を クリックして、 クライアント ID 欄の値 (数字列) を参照する。

4.3.2. 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
    

4.4. Azure Active Directory (Office365)

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

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

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

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

※2019年7月現在の情報です

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

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

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

  4. 画面上部の +新規登録 をクリック

  5. 下記の項目を入力し、画面下部の 登録 をクリック

    • 名前 : unicornidmなど任意の名前を入力
    • サポートされているアカウントの種類 : 「この組織のディレクトリ内のアカウントのみ」を選択
  6. 作成に成功すると指定した名前やアプリケーションの種類、ホームページが表示される

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

    • アプリケーションIDは、UnicornIDMのクライアントIDに設定
    • /opt/osstech/etc/unicornidm/unicornidm.conf の azureバックエンドでの bind_user パラメータに設定
  8. 左ペインの 証明書とシークレット をクリック後、 +新しいクライアントシークレット をクリック。

  9. 下記入力後 追加 をクリック。

    • 説明 : 任意の説明を入力
    • 有効期限 : 期限なし を選択

    追加後、クライアントシークレットの値が表示されるため、コピーして任意のファイルにペーストして厳重に保存 (以降は表示されなくなります)

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

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

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

※2019年7月現在の情報です

4.4.2.1. Azure ポータルページを用いた方法

  1. https://portal.azure.com/ にアクセス
  2. 左ペインの Azure Active Directory をクリック
  3. 左ペインの ロールと管理者 をクリック
  4. ロール一覧の中の ユーザー管理者 をクリック
  5. 画面上部の +割り当ての追加 をクリック
  6. アプリケーション ID の作成 で作成したアプリケーションの名前を検索し、選択。

以上です。

4.4.2.2. PowerShellを用いた方法

  1. Windows 端末にて PowerShell 用の Azure AD モジュールをインストール

    これはAzure ADモジュールを一度インストールしている環境では不要です。

    管理者特権で Windows PowerShell コマンド プロンプトを開きます (Windows PowerShell を管理者として実行)。

    PS C:\> Install-Module -Name AzureAD
    

    信頼されていないリポジトリからモジュールをインストールするようにメッセージが表示されたら、「Y」と入力し、ENTER を押します。

  2. PowerShell を開き、以下のコマンドを実行 (<APPID>アプリケーション ID の作成 の 7. で取得したアプリケーション ID)

    PS C:\> Connect-AzureAD
    PS C:\> $AppId = "<APPID>"
    PS C:\> $roleMember = Get-AzureADServicePrincipal -Filter "AppId eq '$AppId'"
    PS C:\> $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq 'User Account Administrator'}
    PS C:\> if ($role -eq $null) {
    >> $roleTemplate = Get-AzureADDirectoryRoleTemplate | Where-Object {$_.displayName -eq 'User Account Administrator'}
    >> Enable-AzureADDirectoryRole -RoleTemplateId $roleTemplate.ObjectId
    >> $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq 'User Account Administrator'}
    >> }
    PS C:\> Add-AzureADDirectoryRoleMember -ObjectId $role.objectid -RefObjectId $roleMember.ObjectId
    

    なお、指定したアプリケーション ID が[User Account Administrator]ロールに割り当てられているかは下記のコマンドで確認できます

    PS C:\> Connect-AzureAD
    PS C:\> Get-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | Where-object {$_.displayName -eq 'User Account Administrator'}).objectid
    

4.4.3. SKU の名前を取得

  1. Windows 端末にて PowerShell 用の Azure AD モジュールをインストール

    これはAzure ADモジュールを一度インストールしている環境では不要です。

    管理者特権で Windows PowerShell コマンド プロンプトを開きます (Windows PowerShell を管理者として実行)。

    PS C:\> Install-Module -Name AzureAD
    

    信頼されていないリポジトリからモジュールをインストールするようにメッセージが表示されたら、「Y」と入力し、ENTER を押します。

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

    PS C:\> Connect-AzureAD
    PS C:\> Get-AzureADSubscribedSku | Select-Object -Property SkuPartNumber
    
  3. 出力された情報のうち SkuPartNumber の列以下の情報を控える (たとえば、以下のような出力が得られます)

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