BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

.bot ファイル(bot file / ボットファイル)の暗号化・複合化(MSBot コマンド編)

Bot Framework V4 を触る際に最初に「ふぁ?」となりがちな .bot ファイルの複合化と暗号化の方法のお話です。

Cogbot アドベントカレンダー 12/3のエントリーです♪

bot ファイルとは

Bot Framework V4 のチャットボットのプロジェクトを作成すると生成される、拡張子が「.bot」のファイルです。
Azure で Bot Serivce を作ってソースをダウンロードしてみると、どんなものが記載されているか雰囲気がつかめます。

ソースのダウンロードは、(雑な説明になりますが)Azure PortalBot Service のリソースを開き、「ビルド」を開くとダウンロードのボタンからできます。

f:id:beachside:20181203204410p:plain

ダウンロードしだソースの bot ファイルを開くと、Json フォーマットで以下の内容が設定されています。

  • Azure Bot Service のリソース情報
  • blob の接続先
  • development環境のエンドポイント(デバッグ時のエンドポイント)
  • production 環境のエンドポイント(Azure Bot Service のリソースのエンドポイント)
  • Application Insights のキー情報

接続文字列やキー情報のみが暗号化されており、そうでないものは暗号化されていません。

複合化の方法

2種類あります。

  • MSBot コマンドで複合化
  • Bot Emulator で複合化

Bot Emulator での複合化は、たぶん Cogbot Advent Calendar 2018 で @seosoft ‏さん が書いています♪

ということで、 MSBot Command Line tool を使った方法を書いていきます。

MSBot Command Line tool のインストール

npm でのインストールになります。コマンドプロンプトで以下のコマンドをたたけば完了です。

npm install -g msbot

複合化のキー取得

Azure Bot Service のリソースを作ってソースをダウンロードした場合は、既に生成されています。
Azure ポータルから Bot Service のリソースを開き、アプリケーション設定 > BotFileSecret の値になります。コピーしてどこかに保持しておきましょう。

f:id:beachside:20181203195447p:plain

複合化

コマンドプロンプトで、,bot のファイルのパスを開きましょう。(コマンドのオプション -b でファイルのパスを指定することもできます。)

ここでは以下の情報を例にします。

  • bot ファイル名: cogbot18-echo-cs.bot
  • 複合化のキー: 43yYuv98A83Ak8w6qgIwCUaRGq+/6Wszj5k2hg9cDPk=

複合化は以下のコマンドでできます。

msbot secret -b cogbot18-echo-cs.bot --secret 43yYuv98A83Ak8w6qgIwCUaRGq+/6Wszj5k2hg9cDPk= --clear 

正常に複合化されると「Your bot file and keys are now unencrypted」と表示されます。

f:id:beachside:20181203202058p:plain

あとは、必要な情報を編集したりします。

暗号化

編集をした場合、再度暗号化が必要です。先ほどのコマンドの最後を --new にするだけです。

msbot secret -b cogbot18-echo-cs.bot --secret 43yYuv98A83Ak8w6qgIwCUaRGq+/6Wszj5k2hg9cDPk= --new

以下のように、新しいキーが生成されます。

f:id:beachside:20181203202944p:plain

ここで留意しなければならないのは、新しいキーが生成されるということです。 キーは、Azure Bot Service ならアプリケーション設定に保存されていたり、Azure Key Vault に保存したりが一般的ですが、それを再配布しないとならないのでめんどいです。

dev / staging / production で環境があればすべてに設定したり、開発者全員にも設定しなおしが必要になります。

Bot Emulator からアクセスする際、このファイルのエンドポイント情報は便利に使えますが、変更があったときの手間を考えると、このファイルで何を保存すべきかは多少検討した方がよさそうですね。

参考