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

Azure,Key Vault,Logic Apps,OpenAI

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

本記事ではロジックアプリ(Logic Apps)からキーコンテナー(Key Vault)のシークレットを参照する手順を纏めています。
参照するシークレットを見せないようにする手順も纏めています。

※キーコンテナー(Key Vault)のシークレットへのアクセス権管理はAzure ロールベースのアクセス制御(RBAC)を利用します。
※ロジックアプリ(Logic Apps)からキーコンテナー(Key Vault)シークレットへのアクセスはシステム割り当てマネージドIDを利用します。

スポンサーリンク

キーコンテナー(Key Vault)のリソース作成からシークレット作成

キーコンテナー(Key Vault)のシークレットとは

Azure キーコンテナー(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 を使用してキー コンテナーを作成する

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

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

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

Key Vault の価格

 

 

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

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

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

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

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

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

アクセス制御(IAM)設定

Azureロールベースのアクセス制御(RBAC)を選択した場合、キーコンテナー(Azure Key Vault)でシークレット作成する為には権限付与する必要があります。

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

シークレットを作成するユーザーにキーコンテナーシークレット管理者を割り当てます。

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

シークレットを作成

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

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

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

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

ロジックアプリ(Logic Apps)からキーコンテナー(Key Vault)のシークレット値を参照

今回は事前に作成したロジックアプリ(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(シークレットの値)を設定してワークフローを実行します。
実行結果を確認するとシークレット値が平文でそのまま表示されています。

ワークフローでシークレット値が表示されないようにする

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

height: 10px;

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

最後に

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

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

キーコンテナー(Key Vault)を利用した証明書管理についてはこちらに纏めています。

スポンサーリンク