4. 各バックエンドを利用するための準備¶
ここでは Unicorn ID Manager で各バックエンドを利用する前に 実施する必要のある作業について説明します。
ここでは、以下のバックエンドの事前準備の作業について記載しています。
- Windows Server の Active Directory
- SQL
- Google G Suite (旧名 Google Apps)
- Azure Active Directory (Office 365)
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_name と group_name は主キーとなっています。
Unicorn ID Manager では主キーとなる属性は大文字小文字を区別しない比較をすることを前提としています。
そのため user_name と group_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_name と group_name は主キーとなっています。
Unicorn ID Manager では主キーとなる属性は大文字小文字を区別しない比較をすることを前提としています。
そのため user_name と group_name には大文字小文字を区別しない citext という型を利用しています。
4.3. Google Workspace¶
Google Workspace (旧名 Google G Suite) を UnicornIDM のバックエンド にするには、Google API コンソールでサービスアカウントを作成し、 Google 管理コンソールでサービスアカウントに対して API アクセスを 承認する必要があります。
以下に作業の概要を示します。
- Google API コンソールでサービスアカウントと API キーを作成する
- Google API コンソールを開く。
- 組織 (Google Workspace ドメイン) にプロジェクトを作成する。
- プロジェクトの Admin SDK の API を有効にする。
- プロジェクトにサービスアカウントと API キーを作成する。
- サービスアカウントのクライアント ID を控える。
- Google 管理コンソールでサービスアカウントに API アクセスを承認する
- Google 管理コンソールを開く。
- サービスアカウントのクライアント ID に対して API アクセスを承認する。
4.3.1. Google API コンソールでサービスアカウントと API キーを作成する¶
Google API コンソール https://console.developers.google.com/ に アクセスして、管理権限を持つ Google アカウントでログインする。
- ほかの Google アカウントでログイン済みの場合は、ページ 上部メニューバー右端のアイコンをクリックして別のアカウントを 選択するか、 ボタンを押して追加して ログインする。
プロジェクトを作成する。名前、ID は任意。
- ページ上部メニューバーの組織 (Google Workspace ドメイン) 選択プルダウン メニュー (「Google Cloud Platform」ロゴの右横) をクリックし、 新しいプロジェクト をクリックする。
- 新しいプロジェクト 画面の プロジェクト名 欄に
- 「Google Workspace」(例) と入力する。プロジェクト ID は一意なものが
自動で決定され プロジェクト ID は google-workspace-<数字列> です と のように表示される。任意の ID を割り当てたい場合は、 その右横の をクリックして プロジェクト ID 欄に 「google-workspace」(例) など他プロジェクトと重複しない ID を入力する。
- 最後に ボタンをクリックする。
プロジェクトの Admin SDK API を有効にする。
- ページ上部メニューバーの組織 (G Suite ドメイン) 選択プルダウン メニューからプロジェクトを選択する。(すでに選択されているなら不要)
- ページ上部メニューバー左のハンバーガーメニュー (「Google Cloud Platform」ロゴの左横) から をクリックし、 カテゴリ 内の Google Workspace 節の をクリックし、 をクリックする。
プロジェクトにサービスアカウントを作成する。名前は任意。
- ページ上部メニューバーの組織 (G Suite ドメイン) 選択プルダウン メニューからプロジェクトを選択する。(すでに選択されているなら不要)
- ページ上部メニューバー左のハンバーガーメニューから をクリックし、 をクリックする。
- サービス アカウントの作成 ダイアログ中の サービス アカウント名 に「UnicornIDM」(例) と入力しする。 サービス アカウント ID は一意なものが自動で決定されるが、 任意の ID を割り当てたい場合は「unicorn-idm」(例) など他サービス アカウントと重複しない ID を入力し、:menuselection:完了をクリックする。
- IAM と管理 の サービスアカウント 画面から先ほど作成したアカウントを選択し、 キー のタブをクリックする。 鍵を追加 を選択し、新しい鍵を作成する。 (キーのタイプは JSON)
- IAM と管理 の サービスアカウント 画面から先ほど作成したアカウントを選択し、 詳細 のタブをクリックする。 ドメイン全体の委任の表示をクリックし、 Google Workspace ドメイン全体を有効にするのチェックボックスにチェックをいれる。 保存 をクリックする。
サービスアカウントのクライアント ID を控える。
- IAM と管理 の サービスアカウント 画面のサービスアカウント クライアントIDを表示 をクリックして、 クライアント ID 欄の値 (数字列) を参照する。
4.3.2. Google 管理コンソールでサービスアカウントに API アクセスを承認する¶
Google 管理コンソール http://admin.google.com/ にアクセスして、 管理権限を持つ Google アカウントでログインする。
ホーム画面もしくは ページ上部メニューバー左のハンバーガーメニュー からすべてを表示するを選択し、 をクリックする。
ドメイン全体の委任の欄の ドメイン全体の委任を管理 をクリックする。
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
4.4. Azure Active Directory (Office 365)¶
Azure Active Directory (Azure AD) をバックエンドにするためには、 以下に示す手順を `SKU の名前を取得`_ 以外をすべて実施してください。
`SKU の名前を取得`_ はユーザーにライセンスを付与する際に必要な情報を取得する ために必要です。
なお、ここではすでに Azure AD の 管理者アカウントが設定済みで、 かつ Azure AD の言語設定が日本語であることを前提とします。
4.4.1. アプリケーション ID の作成¶
※2021年7月現在の情報です
左ペインの をクリック
左ペインの をクリック
画面上部の をクリック
下記の項目を入力し、画面下部の をクリック
- 名前 : unicornidmなど任意の名前を入力
- サポートされているアカウントの種類 : 「この組織のディレクトリ内のアカウントのみ」を選択
作成に成功すると指定した名前やアプリケーションの種類、ホームページが表示される
画面上部に表示されている 「アプリケーション(クライアント)ID」の最後の をクリックすると、 アプリケーションIDをコピー可能
- アプリケーションIDは、UnicornIDMのクライアントIDに設定
/opt/osstech/etc/unicornidm/unicornidm.confの azureバックエンドでのbind_userパラメータに設定
左ペインの をクリック後、 をクリック。
下記入力後 をクリック。
- 説明 : 任意の説明を入力
- 有効期限 : 期限なし を選択
追加後、クライアントシークレットの値が表示されるため、コピーして任意のファイルにペーストして厳重に保存 (以降は表示されなくなります)
保存したキーの値を UnicornIDMのシークレットキーとして設定
/opt/osstech/etc/unicornidm/unicornidm.confの azureバックエンドでのbind_password_fileパラメータで指定しているファイルに記載
4.4.2. アプリケーション ID にロールを割り当て¶
※2019年7月現在の情報です
4.4.2.1. Azure ポータルページを用いた方法¶
- https://portal.azure.com/ にアクセス
- 左ペインの をクリック
- 左ペインの をクリック
- ロール一覧の中の をクリック
- 画面上部の をクリック
- アプリケーション ID の作成 で作成したアプリケーションの名前を検索し、選択。
以上です。
4.4.2.2. PowerShellを用いた方法¶
Windows 端末にて PowerShell 用の Azure AD モジュールをインストール
これはAzure ADモジュールを一度インストールしている環境では不要です。
管理者特権で Windows PowerShell コマンド プロンプトを開きます (Windows PowerShell を管理者として実行)。
PS C:\> Install-Module -Name AzureAD
信頼されていないリポジトリからモジュールをインストールするようにメッセージが表示されたら、「Y」と入力し、ENTER を押します。
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 の名前を取得 (PowerShell)¶
SKU の名前を取得する方法は PoweShell と unicornidm-devtool の二通りありますが、どちらか片方の方法で行えばよいです。
Windows 端末にて PowerShell 用の Azure AD モジュールをインストール
これはAzure ADモジュールを一度インストールしている環境では不要です。
管理者特権で Windows PowerShell コマンド プロンプトを開きます (Windows PowerShell を管理者として実行)。
PS C:\> Install-Module -Name AzureAD
信頼されていないリポジトリからモジュールをインストールするようにメッセージが表示されたら、「Y」と入力し、ENTER を押します。
PowerShell を開きサブスクリプションごとに割り当てられている SKU の名前 を取得
PS C:\> Connect-AzureAD PS C:\> Get-AzureADSubscribedSku | Select-Object -Property SkuPartNumber
出力された情報のうち SkuPartNumber の列以下の情報を控える (たとえば、以下のような出力が得られます)
SkuPartNumber ------------- STANDARDPACK
4.4.4. SKU の名前を取得 (unicornidm-devtool)¶
SKU の名前を取得する方法は unicornidm-devtool と PowerShell の二通りありますが、どちらか片方の方法で行えばよいです。
詳細は unicornidm-devtool に書かれています。