🛡️

Power Automate で使われるシークレットを安全に管理する

2024/08/07に公開

はじめに

Power Automate から Azure のサービスを呼び出すケースは数多くあります。そのとき気になるのはセキュリティです。Azure のサービスには Entra ID 認証を使用できるものもありますが、何らかの理由でできない場合、シークレットを使用することになります。もちろんシークレットは漏洩させないよう安全に管理する必要があります。

ロールの定義

安全に管理するための最初のステップは「誰がそのシークレットにアクセスできるか」という定義をすることです。一般的には以下の 3 つのロールを定義できます。

名前 説明
管理者 シークレットを完全に管理できる
開発者 シークレットを使用できるが見ることはできない
ユーザー シークレットにはまったくアクセスできない

大事なポイントは開発者です。開発者はサービスを使用するので、シークレットを使用できないと開発できないのですが、それはリスクにもなります。シークレットを GitHub などのリポジトリにアップロードしてしまい情報漏洩してしまったという事例は後を絶ちません。ユーザーに公開しないのはもちろんですが、できるだけ開発者には見せないようにするというのが大事なポイントになります。

ユーザーへの対策

Power Automate の場合、シークレットの漏洩の恐れがあるのはフローを共有している場合です。フローを編集したり、実行履歴からシークレットを確認できるので、共有しないというのが最も有効な対策になります。自動化したフロー (Power Apps から呼び出されるフローも含む) やスケジュール済みのフローはユーザーに共有する必要はありません。インスタント フローのみ気を付ける必要があります。

開発者への対策

シークレットを管理する方法として Azure Key Vault が紹介されることが多いですが、Azure Key Vault に入れただけでは安全にはなりません。大事な情報を金庫にしまったからといって、金庫の合い鍵を全員に配布していては、金庫の意味をなさないということです。Azure App Service のような Azure サービスではマネージド ID を使うことで、アクセスを実行環境からのみに絞ることができます。一方、Power Automate ではマネージド ID を使用できないので、開発者がシークレットを覗き見できてしまうリスクを減らすことはできません。もちろん、シークレットへのアクセスは監視できるので、監査の意味で Azure Key Vault のメリットがないわけではありません。

管理者=開発者である場合も、Azure Key Vault を使うメリットはなさそうです。Azure リソースに共同作成者のアクセス許可があれば、そこからシークレットを見られるので、Azure リソースのアクセス制御にも気を付ける必要があります。

より高度なセキュリティを求めるのであれば Azure API Management を使ってカスタム コネクタとしてエクスポートするようなことも検討するべきです。

https://learn.microsoft.com/ja-jp/azure/api-management/export-api-power-platform?WT.mc_id=M365-MVP-5002941

管理者への対策

管理者は強い権限を持っているために特に気を付けなければなりません。一般的には Privileged Identity Management (PIM) を使用することを推奨します。

https://learn.microsoft.com/ja-jp/entra/id-governance/privileged-identity-management/pim-configure?WT.mc_id=M365-MVP-5002941

おわりに

Azure Key Vault にシークレットを格納することで得られるメリットは他にもあります。シークレットのローテーションを簡単に実現できるというのはその最たるものでしょう。ただ「Azure Key Vault に入れたから安全」のような誤解も数多く見受けられるため、ロール ベースのアクセス制御が必要である点については特に注意したいです。

Discussion