6
Help us understand the problem. What are the problem?

posted at

updated at

Power Virtual Agents と Power Automate でユーザーにライセンスを付与するチャットボット作成【情シスボットシリーズ②】

はじめに

前回の 「Power Virtual Agents と Power Automate でユーザーのパスワードリセットするチャットボット作成【情シスボットシリーズ①】」に続き、情シス向けチャットボット第2弾です。
指定したユーザーに、任意のライセンスを付与するリセットチャットボットを構築しました。
Power Automate で組織内にユーザーを作成するのは、Azure ADコネクタの「ユーザーの作成」アクションで可能です。
image.png
しかし、ライセンスを付与するアクションは存在しないため、Graph APIを利用し実現します。

注意

プレミアムコネクタを利用します。有料ライセンスが必要です。
運用環境での使用は許可されていませんが、開発向けプランや開発者テナントであれば無償でお試しいただけます。

開発者向けプラン
Microsoft 365 開発者テナント

構築

実際の作成手順です

1.Azure AD アプリケーション登録

user: assignLicenseを利用します。

1-1.アプリケーション登録

image.png

今回利用するGraph APIは、「User.ReadWrite.All」と「Directory.ReadWrite.All」のアクセス許可が必要です。

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

https://portal.azure.com/ に管理者権限でログインし、[アプリの登録]-[新規作成]
image.png

任意の名前を入力、アカウントの種類を追加。
対象がテナントユーザーであれば、「この組織ディレクトリにのみ含まれるアカウント」で問題ありません。

1-2.APIアクセス許可設定

image.png

[APIのアクセス許可]-[アクセス許可の追加]

image.png

[Microsoft Graph]を選択

image.png

[アプリケーションの許可]-[{User.ReadWrite.Allで検索し}]-[User.ReadWrite.Allをチェック]

image.png

[{Directory.ReadWrite.Allで検索し}]-[Directory.ReadWrite.Allをチェック]-[アクセス許可の追加]

image.png

追加したアクセス許可に管理の同意を与えます。

image.png

1-3.クライアントシークレット追加

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

クライアントシークレットを追加します。

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

クライアントシークレットの有効期限は、以前「無制限」が存在していましたが、今は最長24ヶ月です。
ただし、Powershellからの追加であれば設定可能です。
https://jpazureid.github.io/blog/azure-active-directory/azuread-clientsecrets-202104/

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

シークレットの値をコピーしておきます。

この画面から遷移してしまうと、シークレットの値は再表示できなくなります。

2.チャットボット作成

2-1.トピック作成

続いて、パスワードリセットのチャットボットを作成します。
トピックで、パスワードリセット対象UPNを問い合わせする質問を作成し保存します。

image.png

image.png

フローの作成し、

image.png

Power Virtual Agents フローテンプレートを選択します。

2-2.Power Autoamte Inputパラメータ設定

image.png

Power Virtual Agents からの引数は、パスワードリセット対象の userPrincipalName です。

2-3.assignLicense実行

image.png

HTTPアクションを選択し、以下のように設定します。

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

■方法

POST

■URI

https://graph.microsoft.com/v1.0/users/@{triggerBody()['text']}/assignLicense

@{triggerBody()['text']} は、「2-2.Power Autoamte Inputパラメータ設定」で追加したパスワードリセット対象の userPrincipalName です。

■ヘッダー

Content-Type : application/json

■本文

{
  "addLicenses": [
    {
      "disabledPlans": [],
      "skuId": "{GUID}"
    }
  ],
  "removeLicenses": []
}

{GUID}には以下サイトで付与するライセンスのGUIDを探し、入力してください。

  • Microsoft 365 E3
    05e9a617-0261-4cee-bb44-138d3ef5d965

  • Microsoft 365 E5
    06ebc4ee-1bb5-47dd-8120-11324bc54e06

  • ENTERPRISE MOBILITY + SECURITY E3
    efccb6f7-5641-4e0e-bd10-b4976e1bf68e

  • ENTERPRISE MOBILITY + SECURITY E5
    b05e124f-c7cc-45a0-a6aa-8cf78c946968

  • Microsoft 365 E5 Developer (Windows および Audio Conferencing なし) 
    c42b9cae-ea4f-4ab7-9717-81576235ccac

などになります。

複数ライセンスを付与する場合は、配列型の"addLicenses"に要素を追加します。

{
  "addLicenses": [
    {
      "disabledPlans": [],
      "skuId": "c42b9cae-ea4f-4ab7-9717-81576235ccac"
    },
    {
      "disabledPlans": [],
      "skuId": "5b631642-bd26-49fe-bd20-1daaa972ef80"
    }
  ],
  "removeLicenses": []
}

ライセンスをはく奪する場合は、"removeLicenses"に要素を追加します。
配列型なので複数ライセンスを設定することも可能です。

image.png

■認証
 Active Directory Oauth を選択

■テナント
 {ディレクトリ(テナント)ID}

■対象ユーザー

https://graph.microsoft.com

■クライアントID
 {アプリケーション(クライアント)ID}

テナントとクライアントIDの値は、1-1.アプリケーション登録で登録したアプリの登録の[概要]に記載された値になります。
{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

■シークレット

シークレットの値は、「1-3.クライアントシークレット追加」のシークレットの値です。

2-4.Power Autoamte Outputパラメータ設定

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

ライセンス付与完了旨のメッセージを、チャットボットに返します。

2-5.トピックからフローの呼び出し

image.png

作成したフローをチャットボットから呼び出し、パラメータを設定します。
InputとOutputを設定します。

まとめ

情シス用ボット第2弾として、指定ユーザーにライセンスを付与する機能を作成しました。
是非ご活用ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
6
Help us understand the problem. What are the problem?