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

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

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

  • Windows Server の Active Directory

  • SQL

  • Google G Suite (旧名 Google Apps)

  • Azure Active Directory (Microsoft 365、旧名Office 365)

4.1. Windows Server の Active Directory

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

4.1.1. GUIでのインストール手順

GUIでの証明書サービスインストール手順は以下のドキュメントを参照してください。

ActiveDirectory証明書サービスインストールガイド

4.1.2. PowerShellでのインストール手順

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

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

コマンド実行が完了したら Windows Server を再起動してください。

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 Workspace

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

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

  1. Google API コンソールでサービスアカウントと API キーを作成する
    1. Google API コンソールを開く。

    2. 組織 (Google Workspace ドメイン) にプロジェクトを作成する。

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

    _images/GWs-01.png
  2. プロジェクトを作成する。名前、ID は任意。

    • ページ上部メニューバーの組織 (Google Workspace ドメイン) 選択プルダウン メニュー (「Google Cloud Platform」ロゴの右横) をクリックし、 新しいプロジェクト をクリックする。

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

    _images/GWs-03.png
    • 最後に 作成 ボタンをクリックする。

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

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

    _images/GWs-04.png
    • ページ上部メニューバー左のハンバーガーメニュー (「Google Cloud Platform」ロゴの左横) から APIとサービス ‣ ライブラリ をクリックし、 カテゴリ 内の Google Workspace 節の Admin SDK API をクリックし、 有効にする をクリックする。

    _images/GWs-05.png _images/GWs-06.png _images/GWs-07.png
  4. プロジェクトにサービスアカウントを作成する。名前は任意。

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

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

    _images/GWs-08.png
    • サービス アカウントの作成 ダイアログ中の サービス アカウント名 に「UnicornIDM」(例) と入力しする。 サービス アカウント ID は一意なものが自動で決定されるが、 任意の ID を割り当てたい場合は「unicorn-idm」(例) など他サービス アカウントと重複しない ID を入力し、完了 をクリックする。

    _images/GWs-09.png
    • IAM と管理サービスアカウント 画面から先ほど作成したアカウントを選択し、 キー のタブをクリックする。 鍵を追加 を選択し、新しい鍵を作成する。 (キーのタイプは JSON)

    _images/GWs-10.png
    • IAM と管理サービスアカウント 画面から先ほど作成したアカウントを選択し、 詳細 のタブをクリックする。 ドメイン全体の委任の表示をクリックし、 Google Workspace ドメイン全体を有効にするのチェックボックスにチェックをいれる。 保存 をクリックする。

    _images/GWs-11.png
  1. サービスアカウントのクライアント ID を控える。

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

    _images/GWs-12.png

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

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

  2. ホーム画面もしくは ページ上部メニューバー左のハンバーガーメニュー からすべてを表示するを選択し、 セキュリティ ‣ API制御 をクリックする。

    _images/GWs-13.png
  1. ドメイン全体の委任の欄の ドメイン全体の委任を管理 をクリックする。

    _images/GWs-14.png
  2. APIクライアント 新しく追加 をクリックし、欄に先に控えたサービスアカウントのクライアント ID を、 OAuth スコープ 欄に下記の内容を入力して 承認 ボタンを押す。

    https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.orgunit
    
    _images/GWs-15.png

4.4. Azure Active Directory (Microsoft 365)

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

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

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

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

※2022年2月現在の情報です

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

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

    _images/AAD1.png
  3. 左ペインの アプリの登録 をクリック

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

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

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

    • サポートされているアカウントの種類 : 「この組織のディレクトリ内のアカウントのみ」を選択

    _images/AAD4.png
  6. 作成に成功すると指定した名前やアプリケーションの種類、ホームページが表示される

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

    • アプリケーションIDは、UnicornIDMのクライアントIDに設定

    • /opt/osstech/etc/unicornidm/unicornidm.conf の azureバックエンドでの bind_user パラメータに設定

    _images/AAD5.png
  8. 左ペインの 証明書とシークレット をクリック後、 +新しいクライアントシークレット をクリック。

    _images/AAD6.png
  9. 下記入力後 追加 をクリック。

    • 説明 : 任意の説明を入力

    • 有効期限 : 24ヶ月 を選択

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

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

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

_images/AAD8.png

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 Administrator'}
    PS C:\> if ($role -eq $null) {
    >> $roleTemplate = Get-AzureADDirectoryRoleTemplate | Where-Object {$_.displayName -eq 'User Administrator'}
    >> Enable-AzureADDirectoryRole -RoleTemplateId $roleTemplate.ObjectId
    >> $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq 'User Administrator'}
    >> }
    PS C:\> Add-AzureADDirectoryRoleMember -ObjectId $role.objectid -RefObjectId $roleMember.ObjectId
    

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

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

4.4.3. SKU の名前を取得

SKU の名前を取得する方法は PoweShell と unicornidm-devtool の二通りありますが、どちらか片方の方法で行えばよいです。

4.4.3.1. PowerShellを用いた方法

  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
    

4.4.3.2. unicornidm-devtoolを用いた方法

詳細は unicornidm-devtool に書かれています。