カテゴリー内の他の記事

Azure Active Directory のユーザー情報を cybozu.com 環境へ定期的に同期しよう

Index

はじめに

Azure Active Directory(以降、Azure AD)を使って kintone や Garoon にシングルサインオンしている場合(連携方法はこちら)、Azure AD と cybozu.com のユーザー情報の同期が必要です。
この記事では、Azure Functions を使って、定期的に Azure AD からcybozu.com 環境へ自動でユーザー情報の同期を行う方法を紹介します。

LDAPサーバーとユーザー情報を同期する方法は、こちらの記事をご参照ください。

必要なもの

  • cybozu.com 環境
  • Microsoft Azure アカウント

システム構成

システム構成図

Azure Functions を使って、Azure AD のユーザー情報を cybozu.com に同期します。

  1. cybozu.com の情報(ユーザー・組織・利用サービス)を User API を使って取得します。
  2. Azure AD のユーザー情報を Microsoft Graph API を使って取得します。
    1. で取得した cybozu.com の情報と突合し、データが新規登録 or 更新を判定しています。
  3. さいごに、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: 関数アプリの作成

  1. Microsoft Azure アカウントで、Azure Portal にログインします。
  2. Azure Portal のホーム画面から、[その他のサービス]をクリックします。
  3. [コンピューティング]の[関数アプリ]を選択します。関数アプリ画面が表示されます。
  4. [追加]をクリックします。
  5. [基本]タブで、次の内容を入力します。入力が終わったら、[次: ホスト中]ボタンをクリックします。
    関数アプリの作成(基本)
    カテゴリ 項目
    プロジェクトの詳細 サブスクリプション 任意のサブスクリプション
    リソースグループ 任意のリソースグループ
    新規作成もできます。
    インスタンスの詳細 関数アプリ名 任意の値
    この記事では「cybozu-user-sync-func」とします。
    公開 「コード」
    コード 「Node.js」
    バージョン 「12」
    地域 任意の値を設定します。
    この記事では「Japan East」を選択しています。
  6. [ホスト中]タブで、次の内容を入力します。入力が終わったら、[次: 監視]ボタンをクリックします。
    関数アプリの作成(ホスト)
    カテゴリ 項目
    Storage ストレージアカウント 任意のストレージアカウント
    新規作成もできます。
    オペレーティングシステム オペレーティングシステム 「Windows」
    プラン プランの種類 任意のプラン
    ここでは、「消費量(サーバレス)」を選択しています。
  7. [監視]タブで、次の内容を入力します。入力が終わったら、[次: タグ]ボタンをクリックします。

    カテゴリ 項目
    Application Insights  Application Insights を有効にする 「はい」
    Application Insights 任意の値を選択
    新規作成もできます。
  8. タグを設定する場合は、[タグ]タブで任意のタグを設定します。入力が終わったら、[次: 確認および作成]ボタンをクリックします。
  9. 入力内容に問題がなければ、[作成]ボタンをクリックします。関数アプリのデプロイが開始されます。
  10. しばらくすると、デプロイが完了します。[リソースに移動]ボタンをクリックします。

手順2: ランタイムのバージョン変更

  1. 作成した関数アプリで、[構成済みの機能]の[関数アプリの設定]をクリックします。
  2. 次の内容に修正します。修正が終わったら、[保存]ボタンをクリックします。
    構成の変更
    項目
    ランタイムのバージョン 〜2
    host.json 次の内容に書き換えます。

手順3: 関数の追加

  1. 作成した関数アプリで、左メニューの[関数]をクリックします。
  2. [+新しい関数]をクリックします。テンプレート選択画面が表示されます。
  3. [Timer trigger]を選択します。
  4. 次の内容を入力します。入力が終わったら、[作成]ボタンをクリックします。
    Timer trigger 関数の追加
    項目
    名前 任意の値
    ここでは「AzureUserSyncTimer」とします。
    スケジュール 関数を実行するスケジュール
    「{second} {minute} {hour} {day} {month} {day of week}」の cron 式で指定します。
    この記事では毎日0時に実行するとして、「0 0 0 * * *」を指定しています。
    その他の指定例は、Microsoft ドキュメントをご参照ください。
  5. 左メニューの[関数]をクリックし、作成した関数の[状態]のトグルスイッチをオフにします。関数が無効になります。
    関数の無効化
  6. 左メニューの[関数]の下にある[統合]をクリックします。
  7. [詳細エディター]をクリックします。
  8. 次の内容に修正します。修正が終わったら、[保存]ボタンをクリックします。
    関数(統合)での設定
    項目
    function.json ※ 7行目の schedule は 手順4. で設定した「スケジュール」の値に書き換えてください。

手順4: バインド拡張機能のインストール

  1. 左メニューから、作成した関数アプリ名をクリックします。
  2. [概要]タブで、[■ 停止]ボタンをクリックします。
  3. [プラットフォーム機能]タブをクリックします。
  4. [開発者ツール]の[高度なツール]をクリックします。別タブで Kudu Services 画面が表示されます。
  5. 上部のメニューから[Debug console]をクリックし、[CMD]を選択します。
  6. 「D:\home\site\wwwroot」に移動するため、次のコマンドを実行します。
    Kudu(ディレクトリの移動)
    実行するコマンド
    cd D:\home\site\wwwroot
  7. 「D:\home\site\wwwroot」の中に「bin」ディレクトリがある場合は、ファイル一覧の[-]をクリックして削除します。
  8. 「D:\home\site\wwwroot」の中に「extensions.csproj」が無い場合は、次の手順で「extensions.csproj」を作成します。
    1. 「.../wwwroot」横の[+]をクリックし、[New file]を選択します。
    2. [ファイル名]に「extensions.csproj」を入力し、エンターキーを押して確定します。
  9. 「extensions.csproj」横の鉛筆アイコンをクリックします。編集画面が表示されます。
  10. 次の内容を入力します。入力が終わったら、[Save]ボタンをクリックします。
    csproj ファイルの内容を入力
  11. 次のコマンドを実行し、バインド拡張機能をインストールします。しばらくして「Build succeeded.」と表示されれば完了です。
    インストール成功後の画面
    実行するコマンド
    dotnet build extensions.csproj -o bin --no-incremental --packages D:\home\.nuget
  12. Kudu Services 画面を閉じて、Azure の関数アプリの画面に戻ります。

手順5: API アクセス許可の設定

  1. [プラットフォーム機能]タブで、[ネットワーク]の[認証/承認]をクリックします。
  2. [App Servie認証]を「オン」に変更し、[認証プロパイダー]で「Azure Active Directory」を選択します。
  3. 次の内容を入力します。入力が終わったら、[OK]ボタンをクリックします。
    新しいAzureADアプリの作成
    項目
    管理モード 簡易
    管理モード 「新しいADアプリを作成する」
    アプリの作成 初期値のまま(cybozu-user-sync-func)
    ※変更もできます。
    Common Data Services に対するアクセス許可を付与する 「オフ」
  4. [保存]ボタンをクリックします。

手順6. AzureAD からアクセス権の付与

  1. Azure Portal のホーム画面を開きます。
  2. [その他のサービス]をクリックします。
  3. 左メニューから、[ID]を選択し、[Azure Active Directory]をクリックします。
  4. 左メニューから、[アプリの登録]を選択し、[すべてのアプリケーション]タブをクリックします。
  5. 手順5. で API アクセス許可を行ったアプリ名をクリックします。
  6. 左メニューから、[API のアクセス許可]ボタンを選択し、[Azure Active Directory Graph]をクリックします。
  7. 次のアクセス権にチェックを入れ、[アクセス許可の追加]ボタンをクリックします。
    • 委任されたアクセス許可
      • Directory.AccessAsUser.All
      • Directory.Read.All
      • User.Read
    • アプリケーションの許可
      • Directory.Read.All
  8. ボタンをクリックした後の画面は、次のような許可したアクセス権の一覧が表示されます。
    許可したアクセス権の一覧一覧
  9. [〜管理者の同意を与えます]ボタンをクリックします。表示されたダイアログで[はい]ボタンをクリックします。
  10. 各アクセス許可の状態が、「~に付与されました」になっていることを確認します。
    「〜に付与されました」

手順7: Azure Functions の環境変数の設定

  1. 手順1. で作成した関数アプリを開きます。
  2. [構成済みの機能]から[構成]をクリックします。
  3. タイムゾーンを設定します。
    [アプリケーション設定]タブから、[+新しいアプリケーション設定]をクリックします。
  4. 次の内容を入力します。入力が終わったら、[OK]ボタンをクリックします。
    関数アプリの設定/編集
    項目 備考
    名前 「WEBSITE_TIME_ZONE」  
    「Tokyo Standard Time」 「Tokyo Standard Time」以外を指定する場合は、こちらを参考にしてください。
  5. [アプリケーション設定]タブから、[高度な編集]をクリックします。
  6. 「WEBSITE_TIME_ZONE」に関する設定の後に、cybozu.com に関する環境変数を追記します。
    環境変数の設定

    の「ここに追記」の部分に以下を貼り付けます。貼り付けが終わったら、[OK]ボタンをクリックします。
    ※ 次の内容は、ご利用環境に合わせて書き換えてください。
    • 4行目:cybozu.com のドメイン
    • 9行目:cybozu.com の管理者アカウントのログイン名
    • 14行目:cybozu.com の管理者アカウントのパスワード
    • 19行目:登録するユーザーの初期パスワード
    • 24行目:登録するユーザーが利用するサービスのサービスコード(複数ある場合は、カンマ区切りで指定)
      ki は kintone、gr は Garoon です。サービスコードの詳細はこちらの表を参照してください。
  7. [保存]ボタンをクリックし、表示されるダイアログで[続行]ボタンをクリックします。

手順8: Azure Functions プログラムの設定

  1. 手順1. で作成した関数アプリを開きます。
  2. 左メニューの[関数]の▼をクリックし、手順3.で作った関数を選択します。
  3. 画面下部の[コンソール]タブをクリックします。コンソールが表示されます。
    コンソール画面の表示
  4. コンソール上で、次のコマンドを順番に実行します。
    npm init -y
    npm install --save-dev csv form-data axios
  5. コード部分にサンプルコードの内容を貼り付けます。貼り付けが終わったら、[保存]ボタンをクリックします。
    サンプルコード
  6. 手順1. で作成した関数アプリをクリックします。
  7. [概要]タブをクリックし、[▶開始]ボタンをクリックします。アプリが起動します。

手順9: 動作確認

注意事項
動作確認をする前に cybozu.com のユーザー情報のバックアップを行ってください(参考:登録済みのデータをファイルに書き出す)。
関数実行すると、cybozu.com のユーザー情報が更新されます。
  1. 手順1. で作成した関数アプリを開きます。
  2. 左メニューの[関数]の▼をクリックし、手順3.で作った関数を選択します。
  3. [▶実行]ボタンをクリックし、関数を実行します。
    しばらくして、ログに「ユーザ連携処理終了」と表示されていれば、成功です。
    動作確認

手順10: 関数の有効化(定期実行の有効化)

左メニューの[関数]をクリックし、作成した関数の[状態]のトグルスイッチをオフにします。
手順3. で設定したスケジュールで、関数が自動で実行されるようになります。
関数の有効化

サンプルコード

手順8. Azure Functions プログラムの設定で貼り付けるコードです。

おわりに

この記事で紹介した方法を行うと、Azure AD で管理していたユーザー情報を cybozu.com を同期が楽になります。

利用しているAPI

クロス・ヘッド株式会社による有償サポートの対象カスタマイズ

このカスタマイズは、サイボウズ オフィシャル SI パートナー クロス・ヘッド株式会社による有償サポートの対象カスタマイズです。
詳細はこちらをご参照ください。

また、クロス・ヘッド株式会社によるサイボウズ製品のシングルサインオンサービスについては、下記のバナー画像よりご参照ください。

クロス・ヘッド株式会社のシングルサインオンサービス

 

このTipsは、2020年3月版 cybozu.comで確認したものになります。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

サインインしてコメントを残してください。