はじめに
Microsoft Entra ID(以降、Entra ID)を使ってkintoneやGaroonにシングルサインオンしている場合
、Entra IDとcybozu.comのユーザー情報の同期が必要です。
この記事では、Azure Functionsを使って、定期的にEntra IDからcybozu.com環境へ自動でユーザー情報の同期を行う方法を紹介します。
関連記事
- ユーザープロビジョニングの機能を使うと、Entra IDからcybozu.comにユーザー情報を連携できます。
Microsoft Entra IDのユーザープロビジョニング機能を使ってcybozu.comにユーザー情報を同期する
必要なもの
- cybozu.com環境
- Microsoft Azureアカウント
- 構築済みのEntra ID
システム構成
Azure Functionsを使って、Entra IDのユーザー情報をcybozu.comに同期します。
- cybozu.comの情報(ユーザー・組織・利用サービス)をUser APIを使って取得します。
- Entra IDのユーザー情報をMicrosoft Graph APIを使って取得します。
1. で取得したcybozu.comの情報と突合し、データが新規登録or更新を判定しています。 - さいごに、User APIを使って、cybozu.comにユーザー情報を登録・更新します。
同期内容
登録・更新されるcybozu.comのユーザー情報の項目は次のとおりです。
| Entra IDの項目名 | cybozu.comの項目名 | 備考 |
|---|---|---|
| ユーザー名 | ログイン名 | |
| 使用状態 | 利用状況 | |
| 名前 | 表示名 | |
| 姓 | 姓 | |
| 名 | 名 | |
| 会社電話 | 電話番号 | |
| 携帯電話 | モバイルフォン | |
| メール | Emailアドレス | |
| 部署 | 部署コード | 複数の部署を設定する場合は、半角カンマ区切りで指定します。 cybozu.comに存在する部署コードのみ、ユーザーの所属部署として反映されます。 |
| 役職 | 役職コード | 複数の役職を設定する場合は、半角カンマ区切りで指定します。 cybozu.comに存在する役職コードのみ、ユーザーの役職として反映されます。 |
| ー | 利用するサービスのサービスコード | 後述の環境変数で設定した値 を利用します。この記事の例ではkintoneとGaroonが設定されます。 |
| ー | 初期パスワード | 後述の環境変数で設定した値 を利用します。この記事の例では「password」が設定されます。 |
cybozu.comのユーザー情報は、Entra IDのユーザーの利用状況に応じて次のように登録・更新されます。
- Entra IDの利用状況が「利用中」のユーザー情報
- 「利用中」のユーザーになる(cybozu.comに存在しない場合は新規登録)
- Entra IDの利用状況が「停止中」のユーザー情報
- 「停止中」のユーザーになる(cybozu.comに存在しない場合は登録されない)
設定手順
次の流れで、Azure Functionsを設定します。
- 関数アプリの作成
- 関数の追加
- 拡張機能のインストール
- Node.jsパッケージのインストール
- Azure Functionsの環境変数の設定
- IDプロバイダーの追加
- クライアントIDのメモとアクセス許可の追加
- クライアントIDとシークレットの設定
- Azure Functionsプログラムの設定
- 動作確認
- 関数の有効化(定期実行の有効化)
手順1:関数アプリの作成
-
Microsoft Azureアカウントで、 Azure Portal
にログインします。
-
Azure Portalのホーム画面で、[リソースの作成]をクリックします。
-
「関数アプリ」を検索します。
-
「関数アプリ」の[作成]をクリックします。
-
「ホスティング オプションの選択」で「従量課金」を選択し、[選択]をクリックします。
-
「基本」タブで、次の内容を入力します。
カテゴリ 項目 値 プロジェクトの詳細 サブスクリプション 任意のサブスクリプション リソースグループ 任意のリソースグループ
新規作成もできます。インスタンスの詳細 関数アプリ名 任意のアプリ名
この記事では「cybozu-users-sync」とします。
安全な一意の既定のホスト名 (プレビュー)をオンにします。オペレーティングシステム 「Windows」 ランタイム スタック 「Node.js」 バージョン 「20 LTS」 リージョン 任意の地域 -
[次: Storage]をクリックします。
カテゴリ 項目 値 Storage ストレージ アカウント 必要に応じて変更します。
新規作成もできます。 -
[次: ネットワーク]をクリックします。
-
必要に応じて設定を変更し、[次: 監視]をクリックします。
-
「監視」タブで、次の内容を入力します。
カテゴリ 項目 値 Application Insights Application Insightsを有効にする はい Application Insights 必要に応じて変更します -
[次: デプロイ]をクリックします。
-
必要に応じて設定を変更し、[次: 認証]をクリックします。
-
必要に応じて設定を変更し、[次: タグ]をクリックします。
-
必要に応じて設定を変更し、[次: 確認および作成]をクリックします。
-
[作成]をクリックします。
関数アプリのデプロイが始まります。デプロイが完了すると「デプロイが完了しました」が表示されます。 -
[リソースに移動]をクリックします。
手順2:関数の追加
-
[関数の作成]をクリックします。
-
テンプレートの選択タブで「Timer trigger」を選択し、[次へ]をクリックします。
-
テンプレートの詳細タブで、次の内容を入力します。
項目 値 関数名 任意の値
この記事では「CybozuUserSyncTimer」とします。Schedule 関数を実行するスケジュール
「{second} {minute} {hour} {day} {month} {day of week}」のcron式で指定します。
この記事では毎日0時に実行するとして、「0 0 0 * * *」を指定しています。
指定例は、 Microsoftドキュメント|NCRONTAB式を参照してください。
-
[作成]をクリックします。
関数が作成されると、作成した関数の詳細画面が表示されます。 -
[無効にする]をクリックします。
無効化することで、関数の定期実行を停止できます。 -
画面右上の[X]をクリックして、関数の画面を閉じます。
手順3:拡張機能のインストール
-
サイドメニューから[概要]をクリックします。
-
[■ 停止]をクリックします。
-
「<アプリ名>を停止しますか?」メッセージで、[はい]をクリックします。
-
サイドメニューの[開発ツール]>[高度なツール]をクリックします。
-
[移動]をクリックします。
ブラウザーの新規タブが開きます。 -
ヘッダーメニューの[Debug console]をクリックし、[CMD]を選択します。
-
画面上部のエクスプローラーで、「site」>「wwwroot」の順にクリックします。
-
「bin」ディレクトリがある場合は、ファイル一覧の[-]をクリックして削除します。
-
上部の「.../wwwroot」横にある[+]をクリックし、[New file]を選択します。
-
「extensions.csproj」と入力し、エンターキーを押します。
-
「extensions.csproj」横の鉛筆の形をしたアイコンをクリックします。
-
エディターに、次の内容を入力します。
1 2 3 4 5 6 7 8 9 10 11<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <WarningsAsErrors /> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="4.0.1" /> <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph" Version="1.0.0-beta6" /> <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.AuthTokens" Version="1.0.0-beta6" /> </ItemGroup> </Project> -
[Save]をクリックします。
-
画面下部のコンソール画面で次のコマンドを実行し、拡張機能をインストールします。
1dotnet build extensions.csproj -o bin --no-incremental --packages D:\home\.nuget
しばらくして「Build succeeded.」と表示されれば完了です。
タブは開いたままで手順4に進みます。
手順4:Node.jsパッケージのインストール
-
追加した関数名(この記事では「CybozuUserSyncTimer」)のディレクトリを開きます。
-
画面下部のコンソールで次のコマンドを1行ずつ実行します。
1 2 3npm init -y npm install csv@6 form-data@4 axios@1 npm install @azure/identity@3 @microsoft/microsoft-graph-client@3 isomorphic-fetch@3 -
ブラウザーのタブを閉じます。
手順5:Azure Functionsの環境変数の設定
-
サイドメニューから[設定]>[環境変数]をクリックします。
-
[高度な編集]をクリックします。
-
最終行とその前の行を次のように書き換えます。
修正前:1 2} ]修正後:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96}, { "name": "WEBSITE_TIME_ZONE", "value": "Tokyo Standard Time", "slotSetting": false }, { "name": "AZURE_CLIENT_ID", "value": "", "slotSetting": false }, { "name": "AZURE_CLIENT_SECRET", "value": "", "slotSetting": false }, { "name": "AZURE_TENANT_ID", "value": "", "slotSetting": false }, { "name": "Cybozu Sub Domain Name", "value": "example.cybozu.com", "slotSetting": false }, { "name": "Cybozu Api Token", "value": "Bearer your-api-token-here", "slotSetting": false }, { "name": "Password", "value": "password", "slotSetting": false }, { "name": "Cybozu Services", "value": "ki,gr", "slotSetting": false }, { "name": "Login Name", "value": "userPrincipalName", "slotSetting": false }, { "name": "New Login Name", "value": "userPrincipalName", "slotSetting": false }, { "name": "Display Name", "value": "displayName", "slotSetting": false }, { "name": "Status", "value": "accountEnabled", "slotSetting": false }, { "name": "Surname", "value": "surname", "slotSetting": false }, { "name": "Given Name", "value": "givenName", "slotSetting": false }, { "name": "E-mail Address", "value": "mail", "slotSetting": false }, { "name": "Phone", "value": "businessPhones", "slotSetting": false }, { "name": "Mobile Phone", "value": "mobilePhone", "slotSetting": false }, { "name": "Department Code", "value": "department", "slotSetting": false }, { "name": "Job Title Code", "value": "jobTitle", "slotSetting": false } ] -
[OK]をクリックします。
-
次の項目の名前をクリックし、利用する環境に合わせて編集します。編集したら [OK]をクリックします。
- WEBSITE_TIME_ZONE:タイムゾーン
タイムゾーンの詳細は タイムゾーンを参照してください。
- AZURE_TENANT_ID:AzureのテナントID
テナントIDは「Microsoft Entra ID」から確認できます。詳細は テナントIDを見つける方法を参照してください。
- Cybozu Sub Domain Name:cybozu.comのドメイン
- Cybozu Api Token:cybozu.comのAPIトークン
「Dangerous Zone」スコープを指定してください。
生成したトークンの前にBearerと半角スペースをつけてください。
APIトークン認証についての詳細は 認証|APIトークン認証 を参照してください。
- Password:登録するユーザーの初期パスワード
- Cybozu Services:登録するユーザーが利用するサービスのサービスコード
複数ある場合は、半角カンマ区切りで指定します。
サービスコードの詳細は サービスコード一覧 を参照してください。
- WEBSITE_TIME_ZONE:タイムゾーン
-
[適用]をクリックします。
-
「変更の保存」メッセージで、[確認]をクリックします。
手順6:IDプロバイダーの追加
-
サイドメニューから[設定]>[認証]をクリックします。
-
[IDプロバイダーを追加]をクリックします。
-
「IDプロバイダー」で「Microsoft」を選択します。
-
次の内容を入力します。
項目 値 アプリの登録の種類 「アプリの登録を新規に作成する」 名前 任意の名前
この記事では「cybozu-users-sync」です。クライアント シークレットの有効期限 任意の日数を選択 サポートされているアカウントの種類 任意のアカウントの種類を選択 アクセスを制限する 「認証されていないアクセスを許可する」 トークンストア 選択 -
[次へ: アクセス許可]をクリックします。
アクセス許可は、手順7で設定するため、ここでは行いません。 -
[追加]をクリックします。
手順7:クライアントIDのメモとアクセス許可の追加
- 追加したIDプロバイダー名で、鉛筆の形をしたアイコンをクリックします。
- [基本]タブで次の値をメモします。後述の環境変数の設定で利用します。
- アプリケーション(クライアント)ID
この値が、クライアントIDです。
- アプリケーション(クライアント)ID
- [アクセス許可]タブをクリックします。
- [APIアクセス許可にアクセスするには、こちらをクリックします。]をクリックします。
- [アクセス許可の追加]をクリックします。
- [Microsoft Graph]をクリックします。
- 次の項目のチェックボックスを選択します。
- 委任されたアクセス許可
- Directory.AccessAsUser.All
- Directory.Read.All
- User.Read
- アプリケーションの許可
- Directory.Read.All
- 委任されたアクセス許可
- [アクセス許可の追加]をクリックします。
- [既定のディレクトリー に管理者の同意を与えます]をクリックします。
「既定のディレクトリー」部分に表示される文言は、ユーザーによって異なります。 - 「管理者の同意の確認を与えます」メッセージで、[はい]をクリックします。
- 各アクセス許可の状態が、「~に付与されました」となっていることを確認します。
- 「APIのアクセス許可」横の [X]をクリックして、「APIのアクセス許可」画面を閉じます。
- [ホーム]をクリックし、作成した関数アプリを開き直します。
手順8:クライアントIDとシークレットの設定
- サイドメニューから[設定]>[環境変数]をクリックします。
- 「MICROSOFT_PROVIDER_AUTHENTICATION_SECRET」をクリックし、値をメモします。
この値が、クライアントシークレットです。 - 「AZURE_CLIENT_SECRET」をクリックし、「値」に2. でメモしたクライアントシークレットを貼り付けます。
- [適用]をクリックします。
- 「AZURE_CLIENT_ID」をクリックし、「値」に 手順7:クライアントIDのメモとアクセス許可の追加 でメモしたクライアントIDを貼り付けます。
- [適用]をクリックします。
- さらに[適用]をクリックします。
- 「変更の保存」メッセージで、[確認]をクリックします。
手順9:Azure Functionsプログラムの設定
- サイドメニューの[概要]をクリックします。
- [▷ 開始]をクリックします。アプリが起動します。
- 手順2:関数の追加 で作成した関数を選択します。
- [コードとテスト]タブをクリックします。
- コード部分に サンプルコード の内容を貼り付けます。
- [保存]をクリックします。
手順10:動作確認
注意
動作確認をする前にcybozu.comのユーザー情報をバックアップしてください。
参考:
ファイルにデータを書き出す | kintoneヘルプ
.
関数実行すると、cybozu.comのユーザー情報に、Entra IDのユーザー情報が追加されます。
- 画面下部のログの種類を「App Insightログ」に切り替えます。
- [テスト/実行]をクリックします。
- [入力]タブの「キー」で「_master(ホストキー)」を選択し、[実行]をクリックします。
- しばらくして、ログに「ユーザ連携処理終了」と表示されていれば、成功です。
手順11:関数の有効化(定期実行の有効化)
- [有効にする]をクリックします。
手順3で設定したスケジュールを使って、関数が自動で実行されるようになります。
サンプルコード
手順9:Azure Functionsプログラムの設定 で貼り付けるコードです。
|
|
おわりに
この記事で紹介した方法を行うと、Entra IDで管理していたユーザー情報をcybozu.comを同期が楽になります。
利用しているAPI
- User API
- Microsoft Graph API(外部サイト)
このカスタマイズは、サイボウズ オフィシャルSIパートナー クロス・ヘッド株式会社による有償サポートの対象カスタマイズです。
詳細は
サイボウズ製品API開発サポート
を参照してください。
また、クロス・ヘッド株式会社では、
サイボウズ製品のシングルサインオンサービス
も提供しています。
このTipsは、2025年4月版cybozu.comで動作を確認しています。
