Power Automate で使われるシークレットを安全に管理する
はじめに
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 を使ってカスタム コネクタとしてエクスポートすることも検討してください。
管理者への対策
管理者は強い権限を持っているため、特に注意が必要です。一般的には Privileged Identity Management (PIM) を使用することを推奨します。
おわりに
Azure Key Vault にシークレットを格納することで得られるメリットは他にもあります。シークレットのローテーションを簡単に実現できることはその最たる例です。ただし Azure Key Vault に入れたから安全 といった誤解も多く見受けられるため、ロール ベースのアクセス制御が必要である点には特に注意してください。
Discussion