Logic AppsのワークフローからAzure Key Vaultのシークレット値を参照

Azure,Key Vault,Logic Apps,OpenAI

Azure Logic Apps(ロジックアプリ)からAzure Key Vault(キーコンテナー)のシークレットを参照する方法の紹介です。

Azure Key Vaultのシークレットは、セキュアな情報を保存するためのAzureで提供されるサービスです。
アプリケーションで利用するデータベースのパスワードやAPIキーなどの機密情報を安全に格納することができます。
Logic AppsといったAzureサービスから参照して利用することができます。

Logic AppsからAzure Key Vaultのシークレットを参照するための設定手順をまとめています。
ワークフロー内で参照したシークレット値を非表示にする手順も紹介しています。

※本記事内ではAzure Logic Apps(ロジックアプリ)をLogic Appsとして表記しています。
※Azure Key Vaultのシークレットへのアクセス権管理はAzureロールベースのアクセス制御(RBAC)を利用します。
※Logic AppsからKey Vaultシークレットへのアクセスはシステム割り当てマネージドIDを利用します。
※画面表記に合わせて、Azure Key Vaultをキーコンテナーとして表記している箇所があります。

スポンサーリンク

Azure Key Vaultのリソース作成からシークレット作成までの手順

Azure Key Vaultのシークレットとは

Azure Key Vaultのシークレットは、データベースのパスワードやAPIキーなどのセキュアな情報を保存するためのサービスです。
シークレット値を暗号化して保存します。

Azure Key Vault のシークレットについて

シークレットは必要なユーザーやアプリケーションだけにアクセス許可させるように制御できます。
シークレットの有効期限も設定できます。
診断設定を通じてシークレットへのアクセスログを取得することもできます。
Logic AppsなどのAzureサービスからAPIキーやDBのパスワードなどのシークレット情報を分離して管理することができます。

※今回はLogic AppsからマネージドIDを利用してシークレットへアクセスします

リソースの設定内容

Azure Key Vaultリソース作成時の設定値です。
コンテナーの保持期間は7日間ネットワークアクセスはすべてのネットワークを許可にしています。

※実環境での利用時には環境に合せてアクセス元の制限や保持期間を長くするようにします。

区分 項目 設定値
基本 Key Vault名 open-ai-api-key
場所 East US
価格レベル 標準
削除されたコンテナーを保持する期間 7日間
消去保護 消去保護を無効にする
アクセスポリシー アクセス制御 Azure ロールベースのアクセス制御
ネットワーク パブリックアクセスを有効にする チェック有
許可するアクセス元 すべてのネットワーク

キーコンテナのシークレットへのアクセス権は個別に付与する必要があります。
シークレット作成に必要となる権限を操作するユーザーに割り当てます。
今回はキーコンテナーシークレット管理者を割り当てています。

権限付与対象 権限 権限付与リソース
操作するユーザー キーコンテナーシークレット管理者 対象のKey Vault

シークレットにはAzure OpenAIのapi keyを登録しています。

シークレット名 シークレット値 その他設定値
open-ai-api-key Azure OpenAIのapi key デフォルト値を利用

リソース作成

公式サイトの手順を参照しながらAzure Key Vaultのリソースを作成します

クイック スタート:Azure portal を使用してキー コンテナーを作成する

Azure Key Vaultのリソース作成
キーコンテナーで作成を選択します。

インスタンスの詳細を設定します。
Key Vault名、価格レベル、回復オプション等を設定します。

※価格レベルについては公式サイトを参照ください。

Key Vault の価格

 

 

アクセスポリシーでコンテナーへのアクセス制御を設定します。
アクセスポリシーではコンテナーに対して許可する操作を規定します。
アクセス許可モデルはAzure ロールベースのアクセス制御を指定します

※リソース作成後にユーザーへの権限割り当てする必要があります。

ネットワーク設定ではAzure Key Vaultへのアクセス可能なネットワークを設定します。
サービスエンドポイントやプライベートエンドポイントが利用出来ます。

今回はすべてのネットワークからのアクセスを許可しています。

※アクセス元ネットワークについては環境に合わせて設定します。

確認画面で設定内容を確認します。
作成を選択します。

アクセス制御(IAM)設定

Azure Key Vaultでシークレット作成する為には、個別に権限する付与必要があります。
リソース作成とは別にシークレットに対する権限を割り当てる必要があります。

Key Vault データ プレーン操作のための Azure の組み込みロール

Azureロールベースのアクセス制御(RBAC)を選択した場合、シークレットを作成するユーザーやマネージドIDにキーコンテナーシークレット管理者を割り当てます。

アクセス制御設定
キーコンテナーのアクセス制御(IAM)でロールの割り当ての追加を選択します。
職務ロールのタブを選択します。
キー コンテナーシークレット責任者を選択します。
ロールを割り当てるメンバーを選択します。
アクセスの割り当て先でユーザー、グループ、またはサービスプリンシパルを選択します。
メンバー選択後、レビューと割り当てを選択します。
確認画面が表示されます。
レビューと割り当てを選択します。

シークレットを作成

公式サイトを参考にシークレットを作成します。

クイック スタート:Azure portal を使用して Azure Key Vault との間でシークレットの設定と取得を行う

今回はシークレット値にはAzure OpenAIのAPIキーを設定しています。

シークレットを作成
左側のメニューのオブジェクトでシークレットを選択します。
生成/インポートを選択します。
名前とシークレット値を設定します。
作成を選択します。
Azure OpenAIのAPIキーはリソース管理のKeys and Endpointで確認します。

Logic AppsからKey Vaultのシークレット値を参照

今回は事前に作成したLogic Appsを利用します。

Logic Appsの概要やリソース作成手順についてはこちらで紹介しています。

シークレットへのアクセス権を割り当て

Logic AppsからKey Vaultシークレットへのアクセス権が必要です。
アクセス権限割り当てにはシステム割り当て済みマネージドIDを利用しています。
キーコンテナーシークレットユーザーの権限を割り当てます。

権限付与
左側のメニューの設定にあるIDを選択します。
状態をオンを選択し保存します。
Azureロールの割り当てを選択します。
ロールの割り当ての追加を選択します。
スコープはKey Vaultを選択します。
リソースはシークレットを設定したKey Vaultを選択します。
役割はキーコンテナーシークレットユーザーを選択します。
Key Vaultのリソースへキーコンテナーシークレットユーザーの権限が割り当てされます。

ワークフローからシークレットを参照

Logic AppsにはAzure Key Vaultのコネクタが準備されています。
Azure Key Vaultのコネクタを使ってシークレットを参照します。

ワークフロー作成
ワークフローでアクションの追加を選択します。
アクションでAzure Key Vaultのシークレットの取得を選択します。
任意の接続名を設定します。
Authentication typeはManaged identitityを選択します。
Vault NameはKey Vaultのリソース名を設定します。
接続が完了するとシークレットの名前が表示されます。
設定したシークレットを選択します。

参照したシークレット値を利用

シークレットの値はvalueに該当します。

シークレット値を参照

利用したい箇所にvalue(シークレットの値)を設定します。

※画面はAzure OpenAIのAPIキーを利用する例です。

参照したシークレット値がワークフローの実行結果から見えてしまう

デフォルト設定のままだとワークフロー実行時に平文としてシークレット値が表示されます。

シークレット値が表示される
変数にvalue(シークレットの値)を設定してワークフローを実行します。
実行結果を確認するとシークレット値が平文でそのまま表示されています。

ワークフローの実行結果でシークレット値を表示しないように設定

シークレットの取得のアクションの設定で、セキュリティで保護された出力を利用します。
セキュリティで保護された出力をオンにすると、シークレットを非表示にできます。

シークレットを非表示
シークレットの取得のアクションで設定を選択します。
セキュリティで保護された出力をオンに変更します。
ワークフローを実行して確認します。
セキュリティ構成のためコンテンツは表示されません。となっておりシークレット値が確認出来ないようになっています。

最後に

Azure Key Vaultのシークレットに関する操作手順を、Logic AppsのワークフローからAzure OpenAIのAPIキーを参照する場合を例に纏めました。
シークレット自体の値を教えることなく参照させることが出来る為セキュリティ的にも非常に良いと思います。
シークレットの管理を一元的に出来ますし、アクセス権の管理も細かく設定出来るので運用観点でも非常に良いと思いました。

今後も色々試してみたいと思います。

Azure Key Vaultを利用した証明書管理についてはこちらで紹介しています。

Logic Appsのワークフロー内のアクションでサブスクリプションIDを取得する方法についてはこちらで紹介しています。

スポンサーリンク