Azure Bot のユーザー割り当て済みマネージド ID を試す
1 年くらい (もっとかも?) Azure Bot Service を追いかけてなかったんですが、ユーザー割り当て済みマネージド ID で Azure Bot Service と Web App 間の認証が構成できるようになってました。これで AppID と AppPassword という漏れたらおしまいという情報での認証じゃなくてユーザ割り当て済みマネージド ID に対してアクセス許可をするだけで OK になります。素晴らしい。漏れることを心配する必要がない。
ドキュメント的にはこのページになります。
やってみよう
ということで Azure Bot を作ってみます。Azure Bot を作るときの Microsoft App ID の部分でデフォルトでマルチ テナントとなっている部分をユーザー割り当て済みマネージド ID にして Bot を作成します。
こうすることで以下のように Azure AD のボットのかわりにユーザー割り当て済みマネージド ID が作成されます。Azure AD へのアプリ登録は企業によっては権限的に出来ないこともあるのでマネージド ID が使えるようになったのは大きいですね。
つぎに Azure Web App を作成します。ここにボットをデプロイします。ここに今まで AppID と AppSecret を設定していたのですがマネージド ID を設定してく形になります。Web Apps の ID の設定を開いて Azure Bot とともに作成されたマネージド ID を追加します。
そして Web App の構成に以下の情報を追加します。
- MicrosoftAppType : UserAssignedMSI
- MicrosoftAppId : ユーザー割り当て済みマネージド ID のクライアント ID
- MicrosoftAppPassword : 空欄
- MicrosoftAppTenantId : Azure AD のテナント ID (Azure Bot の構成から見れます)
ここまで出来たら Web App に適当にアプリをデプロイします。ここでは 1 つ前の記事で作った .NET 6 の EchoBot をデプロイしました。デプロイが完了したら Azure Bot のメッセージング エンドポイントに https://webappの名前.azurewebisites.net/api/messages
を設定しましょう。
Web チャットで作るとばっちり動きました。やったね!
あとはお好みのコネクターを作って各プラットフォームにつなげば良さそうです。これはいい機能だ。シークレットの更新とかも心配しなくてよくなってるので控え目にいって最高です。
ヘッダーの情報を見てみよう
ボットに HTTP リクエストのヘッダーを表示する機能を追加してみたところ、ちゃんと Authentication ヘッダーにベアラトークンが入っていました。そして、リクエスト Body を適当に作って Authorization ヘッダーが空のものを投げると 401 Unauthorized になりました。ちゃんと動いてそうですね。
まとめ
これでいいなら、これを使うとよさそう。ボットでのログインが必要なら改めて Azure AD にアプリ登録すればいい話で、これはログイン機能をつけたいなら必須なので必要なら追加しなければならないので仕方ない。これまではログインがいらなくても Azure AD アプリの登録が必須だったのがちょっとなぁ…だったんですが、マネージド ID でよくなったのでハードルが下がりました。
Azure Bot サービスを使ってログイン機能を付ける場合は、Azure AD を使うことが多いと思うのですが、その場合はここらへんを参考にすればいけそうです。
Discussion