Azure のサービスなどと接続するために、キーの値を厳重に管理したいことがあるかと思います。
その際に便利な手法として、Azure Key Vault があります。
Microsoft Entra ID にて、既存である場合はスキップ可能です。
Microsoft Entra ID にて、Key Vault に対するアクセスポリシーを設定します。
クラウドフローでKey Vault にアクセスします。セキュリティの構成も行います。
作成したフローを実行専用のユーザーに共有します。同時に、Key vault 名を伝えます。伝えないで実行する場合はソリューションフローを利用します。
共有を受けたエンドユーザーがKey vault への接続を行い、フローを利用します。シークレットの情報は閲覧せず実行することができます。
Microsoft Entra ID にアクセスします。グループを作成します。
グループを作成します。
目次
Key Vault
Key Vault の作成
次へ移ります。Azure ロールベースのアクセス制御 (推奨)となっていることを確認します。
今回は、すべてのネットワークとします。
もしVNET委任を設定する場合はこちらでVNET委任が設定されている仮想ネットワークを選択します。
この内容で作成します。
デプロイが完了しました。Key Vault のリソースに移動します。
アクセス制御
アクセス制御からロール割当の追加を行います。
ここで利用できるロールは以下のとおりです。
ロール | 説明 |
---|---|
Key Vault Administrator | キー コンテナーとその内部にあるすべてのオブジェクト (証明書、キー、シークレットを含む) に対して、すべてのデータ プレーン操作を実行します。 キー コンテナー リソースの管理やロール割り当ての管理はできません。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Reader | キー コンテナーとその証明書、キー、シークレットのメタデータを読み取ります。 シークレット コンテンツやキー マテリアルなどの機密値を読み取ることはできません。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault の消去演算子 | 論理的に削除されたコンテナーの完全な削除を許可します。 |
Key Vault Certificates Officer | キー コンテナーの証明書に対して、シークレットとキーの部分の読み取りと、アクセス許可の管理を除く、すべての操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Certificate User | シークレットおよびキー部分を含む証明書の内容全体を読み取ります。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Crypto Officer | キーコンテナーのキーに対して、アクセス許可の管理を除く任意の操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Crypto Service Encryption User | キーのメタデータを読み取り、wrap および unwrap 操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Crypto User | キーを使用した暗号化操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Crypto Service Release User | Azure Confidential Computing 環境およびこれと同等な環境用のリリース キー。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Secrets Officer | キーコンテナーのシークレットに対して、アクセス許可の管理を除く任意の操作を実行します。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
Key Vault Secrets User | 秘密キーを使用し、証明書のシークレット部分を含むシークレットの内容を読み取ります。 「Azure ロールベースのアクセス制御」アクセス許可モデルを使用するキー コンテナーでのみ機能します。 |
今回はシークレットの読み取りだけ許可するため、Key Vault Secrets User (キー コンテナー シークレット ユーザー) を利用します。
Azure RBAC を使用して Azure キー コンテナーへのアクセス許可をアプリケーションに付与する | Microsoft Learn
Azure Key Vault を使用するためのベスト プラクティス | Microsoft Learn
シークレット管理のベスト プラクティス – Azure Key Vault | Microsoft Learn
キーコンテナーを作成する自分にロールを割当します。
メンバーはKVUser に設定します。
シークレットの作成
シークレットを追加します。
KeyName
とKeyValue
を名前と設定します。
実際にはこちらに保護したいキー情報を格納します。たとえば、Azure OpenAI のキー情報などです。
権限がないとエラーになります。例えばグローバル管理者であったとしても作成することはできません。
例えばキーコンテナー管理者(Key Vault Administrator) のロールを割り当てる必要があります。
作成権限があると作成することができます。
これでAzure の設定は完了です。
Power Automate
フローからKey Vault を取得する
Power Automate に移ります。シークレットを取得するフローを作成します。
Key Vault の名前には、キーコンテナー名を入力します。
アクセス許可がない場合やキーコンテナ名 (Key Vault 名) が間違っていると以下のようにエラーとなります。
シークレットの値を取得することができました。
利用者にシークレットの値を見せたくないときは、以下のように設定します。
これを実行のみのユーザーに共有します。
作成した(既存の)セキュリティグループを利用してフローを共有することができます。
共有したセキュリティグループに所属する別のユーザーでフローを開いてみます。
実行時にKey Vault のサインインを求められます。
認証の種類はOAuth、Key Vault の名前を入力してサインインします。
認証することができました。このまま続行します。
フローを実行します。
フロー所有者のPower Automate ポータルで確認すると、フローが問題なく実行されていることがわかります。
出力結果はセキュリティの構成により、設定を変更しない限り所有者でも見ることはできません。
利用者はフローを実行はできますが編集をすることができません。そのため、シークレットの値をフロー内で利用することはできても見ることができませんし、シークレットの値を見られるように設定を変更することができません。
また、セキュリティグループからユーザーが削除された場合も権限を失います。
このように管理することで、安全にユーザーにシークレットを利用させることができます。
Key Vault 名をいちいちユーザーに知らせたくない場合は、ソリューションとDataverse アクションを用いて実施することができます。こちらもご参考ください。
閉域網接続する場合にはこちらが参考になります。