Microsoft Entra ID (Microsoft 365) バックエンド
================================================

概要
-----

::

    unicornidm.conf, templates/<backendname>.py

説明
------

バックエンドセクションのうち、 *type* が *azure* となっているバックエンドは、
Microsoft Entra ID (ME-ID) ドメインコントローラーへの接続に関する設定を行います。

各バックエンドには必ずテンプレートファイルを用意する必要があります。
テンプレートファイルとは Unicorn ID Manager の任意属性 (フロントエンド属性)
をバックエンド固有の属性 (バックエンド属性) にマッピングするためのものです。

リファレンス
------------

unicornidm.conf のパラメーター
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. envvar:: type

    バックエンドのタイプを指定します。 `azure` に設定してください。

.. envvar:: description

    バックエンドの説明文を指定します。

    .. versionadded:: 3.18.7

.. envvar:: domain

    接続する ME-ID のドメイン名を指定します。

.. envvar:: bind_user

    ME-ID へ接続する際に使用するクライアント ID を指定します。

.. envvar:: bind_password_file

    ME-ID へ接続するクライアント ID のパスワード情報を格納したファイルパスを指定します。

.. envvar:: backend_primary_key_user

    ユーザーを一意に特定するための ME-ID バックエンド属性を指定します。
    デフォルト値は userPrincipalName です。

.. envvar:: backend_primary_key_group

    グループを一意に特定するための ME-ID バックエンド属性を指定します。
    デフォルト値は displayName です。

.. envvar:: require_immutaleId

    ユーザー登録時に、 immutableId を登録するかどうかを指定します。
    デフォルト値は yes (immutableId を登録する) です。

テンプレートファイル
^^^^^^^^^^^^^^^^^^^^

以下は、 `ME-ID` バックエンド のテンプレートファイルの例です。

::

    User = {
        "userPrincipalName": userName,
        "immutableId": default(immutableId),
        "displayName": default(displayName, "%(familyName)s %(givenName)s"),
        "surname": familyName,
        "givenName": givenName,
        "mailNickname": userName,
        "accountEnabled": default(active, True),
        "passwordProfile": {
          "password": password,
          "forceChangePasswordNextLogin": default(forceChangePasswordNextLogin, True),
        },
        "passwordPolicies": "DisablePasswordExpiration,DisableStrongPassword",
        "usageLocation": default(usageLocation, "JP"),
        "assignedLicenses": default(azureLicense),
    }


    Group = {
        "displayName": groupName,
        "mailNickname": groupName,
        "mailEnabled": False,
        "securityEnabled": True,
        "description": default(description),
    }

注意すべき点は以下のとおりです。

* User の辞書には必ず userPrincipalName バックエンド属性を付与すること

* Group の辞書には必ず displayName バックエンド属性を付与すること

azure バックエンド特有のバックエンド属性
---------------------------------------------
ME-ID バックエンドで利用可能なバックエンド属性は以下の URL
を参考にしてください。

https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#userentity

ここでは、上の URL に記載のない、 ME-ID バックエンド特有の
バックエンド属性の説明をします。

.. envvar:: assignedLicenses

    *assignedLicenses* バックエンド属性は、ユーザーに対して、
    Microsoft Office 等の利用に必要なライセンスを付与、あるいは、
    すでに割り当てられているライセンスを削除するためのものです。
    このバックエンド属性に指定可能なものは skuPartNumber と呼ばれる属性値です。
    たとえば、 **STANDARDPACK** のような、値を指定します。
    ライセンスは複数付与することができますので、
    :doc:`../unicornidm-conf` の *assignedLicenses* に対応するフロントエンド属性を
    *multi_valued_attributes* に含めるようにしてください
    (デフォルトの設定ファイルでは *azureLicense* として含められています) 。

    ここで、 ME-ID バックエンドのライセンスについて説明します。
    ME-ID では、ひとつのライセンスに複数のプランが紐付いています。
    たとえば、以下のように **STANDARDPACK** には 3 つのプランが紐付き、
    **OFFICESUBSCRIPTION_FACULTY** には 2 つのプランが紐付いています
    (以下の図は実際のライセンス体系と異なります) 。

    ::

        ライセンス                   プラン

        STANDARDPACK
            |
            +----------------------- EXCHANGE_S_STANDARD
            |
            +----------------------- YAMMER_ENTERPRISE
            |
            +----------------------- MCOSTANDARD

        OFFICESUBSCRIPTION_FACULTY
            |
            +----------------------- OFFICESUBSCRIPTION
            |
            +----------------------- ONEDRIVESTANDARD

    ライセンスを付与する際に、一部のプランを無効にしたい場合があります。
    その時は **STANDARDPACK/YAMMER_ENTERPRISE:MCOSTANDARD** のように、
    **<ライセンス名>/<プラン名>:<プラン名>:...** と指定します。


.. envvar:: groupType

   グループ作成時にのみ利用可能です。
   作成するグループのタイプを指定します。
   指定可能な値は以下です

   ::

      security          セキュリティグループ (デフォルト)
      microsoft365      Microsoft 365グループ

    グループの種類の詳細は以下のURLを参照してください。

    https://learn.microsoft.com/ja-jp/graph/api/resources/groups-overview?view=graph-rest-1.0&tabs=http#group-types-in-microsoft-entra-id-and-microsoft-graph

.. versionadded:: 3.20.12

     groupType が追加されました。

制限
----

* グループの入れ子 (ネスト。グループへのグループの追加) には対応していません。
* 組織単位 (`OU`) の管理には対応していません。
  ユーザーに所属させたい組織単位は別途 Azure AD の管理ツールで作成しておいてください。
* ユーザーの一覧表示のフィルターや操作対象を組織部門やグループ
  で制限することはできません。
* メール有効グループ、配布グループの作成・管理には対応していません。
  グループ一覧ページなどに表示はされますが、更新等は全て失敗します。

.. issue #431 Azure: ユーザーのフィルターに対応
