はじめに
Azure Active Directory(以降、Azure AD)を使って kintone や Garoon にシングルサインオンしている場合、Azure AD と cybozu.com のユーザー情報の同期が必要です。
この記事では、Azure Functions を使って、定期的に Azure AD からcybozu.com 環境へ自動でユーザー情報の同期を行う方法を紹介します。
LDAPサーバーとユーザー情報を同期する方法は、次の記事を参照してください。
cybozu.comとLDAP(Active Directory)とのユーザー連携サンプルツール
必要なもの
- cybozu.com 環境
- Microsoft Azure アカウント
システム構成
Azure Functions を使って、Azure AD のユーザー情報を cybozu.com に同期します。
- cybozu.com の情報(ユーザー・組織・利用サービス)を User API を使って取得します。
- Azure AD のユーザー情報を Microsoft Graph API を使って取得します。
1. で取得した cybozu.com の情報と突合し、データが新規登録 or 更新を判定しています。 - さいごに、User API を使って、cybozu.com にユーザー情報を登録・更新します。
同期内容
登録・更新される cybozu.com のユーザー情報の項目は次のとおりです。
Azure AD の項目名 | cybozu.com の項目名 | 備考 |
---|---|---|
ユーザー名 | ログイン名 | |
使用状態 | 利用状況 | |
名前 | 表示名 | |
姓 | 姓 | |
名 | 名 | |
会社電話 | 電話番号 | |
携帯電話 | モバイルフォン | |
メール | Email アドレス | |
部署 | 部署コード | 複数の部署を設定する場合は、半角カンマ区切りで指定します。 cybozu.com に存在する部署コードのみ、ユーザーの所属部署として反映されます。 |
役職 | 役職コード | 複数の役職を設定する場合は、半角カンマ区切りで指定します。 cybozu.com に存在する役職コードのみ、ユーザーの役職として反映されます。 |
ー | 利用するサービスのサービスコード | 後述の環境変数で設定した値を利用します。この記事の例では kintone と Garoon が設定されます。 |
ー | 初期パスワード | 後述の環境変数で設定した値を利用します。この記事の例では「password」が設定されます。 |
cybozu.com のユーザー情報は、Azure AD のユーザーの利用状況に応じて次のように登録・更新されます。
- Azure AD の利用状況が「利用中」のユーザー情報
- 「利用中」のユーザーになる(cybozu.com に存在しない場合は新規登録)
- Azure AD の利用状況が「停止中」のユーザー情報
- 「停止中」のユーザーになる(cybozu.com に存在しない場合は登録されない)
設定手順
次の流れで、Azure Functions を設定します。
手順1: 関数アプリの作成
- Microsoft Azure アカウントで、Azure Portal にログインします。
- Azure Portal のホーム画面から、[その他のサービス]をクリックします。
- [コンピューティング]の[関数アプリ]を選択します。関数アプリ画面が表示されます。
- [追加]をクリックします。
- [基本]タブで、次の内容を入力します。入力が終わったら、[次: ホスト中]ボタンをクリックします。
カテゴリ 項目 値 プロジェクトの詳細 サブスクリプション 任意のサブスクリプション リソースグループ 任意のリソースグループ
新規作成もできます。インスタンスの詳細 関数アプリ名 任意の値
この記事では「cybozu-user-sync-func」とします。公開 「コード」 コード 「Node.js」 バージョン 「12」 地域 任意の値を設定します。
この記事では「Japan East」を選択しています。 - [ホスト中]タブで、次の内容を入力します。入力が終わったら、[次: 監視]ボタンをクリックします。
カテゴリ 項目 値 Storage ストレージアカウント 任意のストレージアカウント
新規作成もできます。オペレーティングシステム オペレーティングシステム 「Windows」 プラン プランの種類 任意のプラン
ここでは、「消費量(サーバレス)」を選択しています。 - [監視]タブで、次の内容を入力します。入力が終わったら、[次: タグ]ボタンをクリックします。
カテゴリ 項目 値 Application Insights Application Insights を有効にする 「はい」 Application Insights 任意の値を選択
新規作成もできます。 - タグを設定する場合は、[タグ]タブで任意のタグを設定します。入力が終わったら、[次: 確認および作成]ボタンをクリックします。
- 入力内容に問題がなければ、[作成]ボタンをクリックします。関数アプリのデプロイが開始されます。
- しばらくすると、デプロイが完了します。[リソースに移動]ボタンをクリックします。
手順2: ランタイムのバージョン変更
- 作成した関数アプリで、[構成済みの機能]の[関数アプリの設定]をクリックします。
- 次の内容に修正します。修正が終わったら、[保存]ボタンをクリックします。
項目 値 ランタイムのバージョン 〜2 host.json 次の内容に書き換えます。
手順3: 関数の追加
- 作成した関数アプリで、左メニューの[関数]をクリックします。
- [+新しい関数]をクリックします。テンプレート選択画面が表示されます。
- [Timer trigger]を選択します。
- 次の内容を入力します。入力が終わったら、[作成]ボタンをクリックします。
項目 値 名前 任意の値
ここでは「AzureUserSyncTimer」とします。スケジュール 関数を実行するスケジュール
「{second} {minute} {hour} {day} {month} {day of week}」の cron 式で指定します。
この記事では毎日0時に実行するとして、「0 0 0 * * *」を指定しています。
その他の指定例は、Microsoft ドキュメントをご参照ください。 - 左メニューの[関数]をクリックし、作成した関数の[状態]のトグルスイッチをオフにします。関数が無効になります。
- 左メニューの[関数]の下にある[統合]をクリックします。
- [詳細エディター]をクリックします。
- 次の内容に修正します。修正が終わったら、[保存]ボタンをクリックします。
項目 値 function.json ※ 7行目の schedule は 手順4. で設定した「スケジュール」の値に書き換えてください。
手順4: バインド拡張機能のインストール
- 左メニューから、作成した関数アプリ名をクリックします。
- [概要]タブで、[■ 停止]ボタンをクリックします。
- [プラットフォーム機能]タブをクリックします。
- [開発者ツール]の[高度なツール]をクリックします。別タブで Kudu Services 画面が表示されます。
- 上部のメニューから[Debug console]をクリックし、[CMD]を選択します。
- 「D:\home\site\wwwroot」に移動するため、次のコマンドを実行します。
実行するコマンド
cd D:\home\site\wwwroot
- 「D:\home\site\wwwroot」の中に「bin」ディレクトリがある場合は、ファイル一覧の[-]をクリックして削除します。
- 「D:\home\site\wwwroot」の中に「extensions.csproj」が無い場合は、次の手順で「extensions.csproj」を作成します。
- 「.../wwwroot」横の[+]をクリックし、[New file]を選択します。
- [ファイル名]に「extensions.csproj」を入力し、エンターキーを押して確定します。
- 「extensions.csproj」横の鉛筆アイコンをクリックします。編集画面が表示されます。
- 次の内容を入力します。入力が終わったら、[Save]ボタンをクリックします。
- 次のコマンドを実行し、バインド拡張機能をインストールします。しばらくして「Build succeeded.」と表示されれば完了です。
実行するコマンド
dotnet build extensions.csproj -o bin --no-incremental --packages D:\home\.nuget
- Kudu Services 画面を閉じて、Azure の関数アプリの画面に戻ります。
手順5: API アクセス許可の設定
- [プラットフォーム機能]タブで、[ネットワーク]の[認証/承認]をクリックします。
- [App Servie認証]を「オン」に変更し、[認証プロパイダー]で「Azure Active Directory」を選択します。
- 次の内容を入力します。入力が終わったら、[OK]ボタンをクリックします。
項目 値 管理モード 簡易 管理モード 「新しいADアプリを作成する」 アプリの作成 初期値のまま(cybozu-user-sync-func)
※変更もできます。Common Data Services に対するアクセス許可を付与する 「オフ」 - [保存]ボタンをクリックします。
手順6. AzureAD からアクセス権の付与
- Azure Portal のホーム画面を開きます。
- [その他のサービス]をクリックします。
- 左メニューから、[ID]を選択し、[Azure Active Directory]をクリックします。
- 左メニューから、[アプリの登録]を選択し、[すべてのアプリケーション]タブをクリックします。
- 手順5. で API アクセス許可を行ったアプリ名をクリックします。
- 左メニューから、[API のアクセス許可]ボタンを選択し、[Azure Active Directory Graph]をクリックします。
- 次のアクセス権にチェックを入れ、[アクセス許可の追加]ボタンをクリックします。
- 委任されたアクセス許可
- Directory.AccessAsUser.All
- Directory.Read.All
- User.Read
- アプリケーションの許可
- Directory.Read.All
- 委任されたアクセス許可
- ボタンをクリックした後の画面は、次のような許可したアクセス権の一覧が表示されます。
- [〜管理者の同意を与えます]ボタンをクリックします。表示されたダイアログで[はい]ボタンをクリックします。
- 各アクセス許可の状態が、「~に付与されました」になっていることを確認します。
手順7: Azure Functions の環境変数の設定
- 手順1. で作成した関数アプリを開きます。
- [構成済みの機能]から[構成]をクリックします。
- タイムゾーンを設定します。
[アプリケーション設定]タブから、[+新しいアプリケーション設定]をクリックします。 - 次の内容を入力します。入力が終わったら、[OK]ボタンをクリックします。
項目 値 備考 名前 「WEBSITE_TIME_ZONE」 値 「Tokyo Standard Time」 「Tokyo Standard Time」以外を指定する場合は、こちらを参考にしてください。 - [アプリケーション設定]タブから、[高度な編集]をクリックします。
- 「WEBSITE_TIME_ZONE」に関する設定の後に、cybozu.com に関する環境変数を追記します。
の「ここに追記」の部分に以下を貼り付けます。貼り付けが終わったら、[OK]ボタンをクリックします。
※ 次の内容は、ご利用環境に合わせて書き換えてください。- 4行目:cybozu.com のドメイン
- 9行目:cybozu.com の管理者アカウントのログイン名
- 14行目:cybozu.com の管理者アカウントのパスワード
- 19行目:登録するユーザーの初期パスワード
- 24行目:登録するユーザーが利用するサービスのサービスコード(複数ある場合は、カンマ区切りで指定)
ki は kintone、gr は Garoon です。サービスコードの詳細はこちらの表を参照してください。
- [保存]ボタンをクリックし、表示されるダイアログで[続行]ボタンをクリックします。
手順8: Azure Functions プログラムの設定
- 手順1. で作成した関数アプリを開きます。
- 左メニューの[関数]の▼をクリックし、手順3.で作った関数を選択します。
- 画面下部の[コンソール]タブをクリックします。コンソールが表示されます。
- コンソール上で、次のコマンドを順番に実行します。
npm init -y
npm install --save-dev csv form-data axios - コード部分にサンプルコードの内容を貼り付けます。貼り付けが終わったら、[保存]ボタンをクリックします。
- 手順1. で作成した関数アプリをクリックします。
- [概要]タブをクリックし、[▶開始]ボタンをクリックします。アプリが起動します。
手順9: 動作確認
動作確認をする前に cybozu.com のユーザー情報のバックアップを行ってください(参考:登録済みのデータをファイルに書き出す)。
関数実行すると、cybozu.com のユーザー情報が更新されます。
- 手順1. で作成した関数アプリを開きます。
- 左メニューの[関数]の▼をクリックし、手順3.で作った関数を選択します。
- [▶実行]ボタンをクリックし、関数を実行します。
しばらくして、ログに「ユーザ連携処理終了」と表示されていれば、成功です。
手順10: 関数の有効化(定期実行の有効化)
左メニューの[関数]をクリックし、作成した関数の[状態]のトグルスイッチをオフにします。
手順3. で設定したスケジュールで、関数が自動で実行されるようになります。
サンプルコード
手順8. Azure Functions プログラムの設定で貼り付けるコードです。
おわりに
この記事で紹介した方法を行うと、Azure AD で管理していたユーザー情報を cybozu.com を同期が楽になります。
利用しているAPI
- User API
- Microsoft Graph API(外部サイト)
このカスタマイズは、サイボウズ オフィシャル SI パートナー クロス・ヘッド株式会社による有償サポートの対象カスタマイズです。
詳細はこちらをご参照ください。
また、クロス・ヘッド株式会社によるサイボウズ製品のシングルサインオンサービスについては、下記のバナー画像よりご参照ください。
このTipsは、2020年3月版 cybozu.comで確認したものになります。
記事に関するフィードバック
記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。