今回はAzureに関する記事です。
Azure のKey Vaultへ格納した変数を、インターネット経由でLogic Appsへアクセスし、
自宅や会社等、特定の場所から安全に参照する構成を解説していきます。
最初に、本記事で扱う用語は公式やAzureポータル上などで表記揺れがあるため
以下の太字部分で統一します。
- Azure Key Vault:初出は正式名称、以降は「Key Vault」
- Azure Logic Apps:初出は正式名称、以降は「Logic Apps」
- キー コンテナー:Azure Portalの操作手順で、画面上の項目を指す場合だけ使用
- ロジック アプリ:同じく画面上の項目を指す場合だけ使用
【Azure】【マネコン操作】まだWindows BATにパスワードを埋め込んでるの? Azure Logic Apps+Key Vaultで固定変数を外部化する方法
本記事のターゲット
以下に該当する方へおすすめするべく、本記事を執筆しています⇩
- 使用しているツールにパスワード直書きなどしているものを見直したい
- 複数のツールで毎回同じ固定変数を利用しており一元管理したい
- 複数PCなどに同じツールを展開して、変数管理も一元化したい
- 格納した変数を取り出す際に、Azure CLIなど専用のツールを利用したくない
- 指定したネットワークからのみ取得できる固定変数置き場を作成したい
- 専用ソフトやDBを導入せず、上記をフラットな感覚で実現したい
本構成は、送信元のグローバルIPアドレスを特定できることが前提です。
IPアドレスが変更された場合は、Logic Apps側の許可設定も更新する必要があります。なお筆者の利用しているSoftBank光では、
グローバルIPが数年単位で変わらないこともあるため、今回は手動管理としています。また本記事では、パスワードやAPIキー、各種設定値など、
プログラムから参照する比較的変更頻度の低い値を便宜上「固定変数」と表現しています。
全体概要図
自宅PCからLogicAppsを参照すると、引数で与えた文字列をキーにして、
LogicAppsがKeyVaultへ問い合わせをします。
戻り値としてKeyVaultへ格納されているSecretsが応答されます。

Key Vaultの作成
前提
以下ネーミングのリソースグループをサンプルとして利用します。
- リソースグループ:Addache-Test
解説としては名前を固定しますが、上記の名前でなくても問題ありません。
本記事では作成手順を割愛します。
Key Vault作成
(1)キー コンテナー へアクセス
[すべてのサービス]-[セキュリティ]-[キー コンテナー] を開き、新規作成を押下します。

※日本語UIでは「キー コンテナー」と表現されています
(2)作成画面
- サブスクリプションとリソースグループを選択します
※ここでは「サブスクリプション TEST」を指定しています - Key Vault名:Key-TestSecrets
※名前を変える時は後述(LogicApps)のJSONコードも忘れず修正してください - 地域:Japan East
- 価格レベル:標準
- 赤枠以外の部分は飛ばして問題なし

また、[次へ]を押下するとパブリックアクセスへの制御など設定できますが、
後で変更できるためスキップしてよいです。
本記事ではVnet統合したり、閉域網に閉じ込めたりする手順は取り扱いません。
また、パブリックアクセスを許可していても、誰でも閲覧できるわけじゃありません。
シンプル・イズ・ベストな解説を行っていきます。
(3)確認および作成
さっと確認して、[作成]を押下します。

自分への Key Vault Administrator 権限付与
テナント所有者権限を付与していても、Key VaultのSecret値はメンテナンスできませんので、
別途権限付与を行う必要があります。
(1)キーコンテナーのアクセス制御(IAM)を開く
ここで[ロールの割り当てを追加]を押下します。

(2)キー コンテナー管理者を選択して次へ
適当に探すとなかなか出てこないので、検索窓に[キー コンテナー]と入力するのが早いです。

(3)操作中のユーザーをメンバーへ追加
現在操作しているユーザーをメンバーへ追加し、[レビューと割り当て]を選択します。

(4)ロールと割り当ての追加
さっと確認し問題なさそうなら[レビューと割り当て]を押下します。

(5)キー コンテナー管理者が追加されたことを確認
アクセス制御の画面に戻って、以下のように表示されていれば権限付与完了です。

テスト用シークレットの登録
後述するサンプルコード(テストケース)にあわせて、事前にSecretsを登録します。
登録するSecretsは6つです。
| ケース | Key Vaultの登録値 | 実現すること |
| ① RDP接続 | RDP-USER RDP-PASS RDP-HOST | 認証情報と接続先を一元管理 |
| ② 処理のON/OFF制御 | APP-ENABLED | 配布済みBATの動作をAzure側で切り替える |
| ③ ファイル保存先の一元管理 | COPY-FROM COPY-TO | 複数PCのファイル出力先を一括変更 |
(1)Key-Vaultのシークレットを開く
まずはSecretsの一覧画面を開きます。
最初は何も登録されていません。
[生成/インポート]をクリックします。

(2)シークレットの作成画面
名前と値を入力します。サンプルとして以下のシークレットを設定している様子です。
- 【シークレット名】:【シークレット値】
- RDP-USER:(ご自身のPCのログインユーザーを入力ください)

(3)シークレットの作成確認
登録成功すると以下のように一覧へ表示されます。

(4)シークレット登録を繰り返す
他のシークレットも登録します。
※繰り返しになるため説明画像は割愛
それぞれのシークレットへ設定する値は以下です。
- 【シークレット名】:【シークレット値】
- RDP-PASS:(ご自身のPCのログインユーザーのパスワードを入力ください)
- RDP-HOST:localhost
- APP-ENABLED:ON
- COPY-FROM:FromFolder
- COPY-TO:ToFolder
(5)登録したシークレットの一覧を確認
登録作業が終わったら、以下のように6種類登録されていることを確認します。
※それぞれ後述するサンプルコードで参照します
シークレット値は、登録後に変更することも可能です。

Azure Key Vaultは本来、シークレット/暗号化キー/証明書を管理するサービスです。
一般的な設定値をすべて格納する用途には、
Azure App Configurationなど別の選択肢もあります。
Logic Appsの作成
KeyVaultを作成したら、LogicAppsを作成していきます。
ロジックアプリ本体の作成
(1)Logic Appsへのアクセス
[すべてのサービス]-[モノのインターネット]-[Logic Apps]をクリックして新規作成を押下します。

(2)ホスティングオプション
デフォルトではスタンダードのところが選択されています。
そのまま進めるとSKUごとの月額課金が始まってしまい、高くついてしまうため
「従量課金」を選択し直します。
使用量に応じた課金ですが、
1時間に5000回実行するようなワークフローでも構築しない限り
大抵はタダ同然です。→月1,000回程度なら、Logic Appsの実行料金は無料枠内に収まる見込み
→無料枠なしで計算した場合でも 3,000×$0.000025=$0.075=約12円
→Logic Appsが参照するKey Vaultのシークレット取得料金は、月1,000回で約0.5円程度

(3)ロジックアプリの作成
以下のネーミングでロジックアプリを作成します。
- ロジック アプリ名:Lap-TestSecrets

(4)確認および作成
サッと確認して問題なさそうであれば[作成]を押下します。

(5)作成完了
以下のように作成完了したことを確認してください。

HTTPトリガーとアクションの作成
ロジックアプリの処理本体を作成していきます。
ノーコードで開発できるスグレモノですが、手動操作の解説をするのはそれなりに大変なので
今回は完成品をコードで流し込みます。
(1)ロジックアプリデザイナーから編集
[ロジックアプリデザイナー]-[Code]を開き、中央のコード部分へ
以下のJSON(Githubページ)を貼り付けます。

JSON全体をコピーし、<KEY_VAULT_NAME> をご自身のKey Vault名に置き換えてから、
Logic Appsへ貼り付けて保存してください。山括弧も含めて置換します。
※記事のとおりに作成しているなら、[key-testsecrets]です。
⇨差替えが終わったら、[Publish]を押下します。
(2)URLを控える
作成されたロジックアプリを表示し
[When an HTTP request is received]をクリックします。
HTTP URLが表示されているので、コピーして控えておきましょう。
※後でテスト用BATへ埋め込みます

Key Vaultへのアクセス許可設定
LogicAppsで処理の作成をしただけでは、
KeyVaultへアクセスしてSecretsを参照することはできません。
この手順でLogicApps→KeyVaultへのアクセス権を設定します。
(1)Logic AppsのマネージドID有効化
まずはLogicAppsのマネージドIDを有効化します。
オンにすればOKです。

(2)Key Vault Secrets User 権限付与
先程作成した[KeyVault]の画面へ戻り、アクセス制御(IAM)から設定していきます。
※LogicAppsにもアクセス制御(IAM)はありますが、同じ操作ができない

(3)キー コンテナー シークレットユーザーを選択して次へ
適当に探すとなかなか出てこないので、検索窓に[キー コンテナー]と入力するのが早いです。

(4)作成したLogicAppsをメンバーへ追加
LogicAppsをメンバーへ追加し、[レビューと割り当て]を選択します。

(5)キー コンテナー シークレット ユーザーが追加されたことを確認
アクセス制御の画面に戻って、以下のように表示されていれば権限付与完了です。

ワークフロー設定によるセキュリティ対策
LogicAppsへ戻って、以下2本立てのセキュリティ設定を行います。
- ロジックアプリへのアクセスを固定IPへ制限する
- 実行履歴の保持期間を最低(7日間)へ再設定する
従量課金プランのロジックアプリは、インターネットから誰でもアクセスできてしまいます。
Secretsのキー名がバレなければ簡単に悪用されないですが、
参照失敗しても実行回数はカウントされてしまう(課金額が増えてしまう)ので、
制限をかけておくに越したことはありません。→この制限が本記事の目玉でもあります。
(1)送信元IPアドレス制限
[ワークフロー設定]を開き、IPアドレスの制限設定を行います。
自宅グローバルIPアドレスを設定してください。
※末尾に/32 を付与しないと登録できませんのでご注意

自宅のグローバルIPアドレスが分からない場合は以下のサイトで確認してください⇩
(2)実行履歴の保存期間
同じ画面の下の方へスクロールし、[Run history retention in days]を[Custom]へ変更します。
日数は7日(最低)を選択します。設定したら[Save]を押下します。

実行履歴の保存期間とあわせて、先程のフロー本体JSON内で
実行履歴の入出力データを非表示化する設定が行われています。
- HTTP(Key Vault取得) → Secure outputs:ON
- Response-MyHome → Secure inputs:ON
すべてのフローに設定する必要はなく、
重要なデータを扱っている部分のみ設定しておけば問題ありません。
Windows BATを使った接続テスト
Key Vaultに登録した値を、WindowsのBATから取得して使ってみましょう。
用途別に3本のサンプルを用意しました。それぞれ単独で実行可能です。
(1)下準備
デスクトップへ以下のフォルダを作成してください。
[FromFolder]

ココに、サンプルBATを配置します。
このPATHじゃないと動かない、というものではありませんが、
以下の意図により指定いたします。
- サンプル③(ファイルコピー)で実行結果の確認が出来るようにする
- BATの置き場を記事内で統一する
フォルダを作成したら、以下をDLして格納してください。
サンプル②:ON/OFF制御(02-app-enabled.bat)
サンプル③:ファイルコピー(03-file-copy.bat)
各コードページの Download raw file から、.bat 形式で保存してください。
(そのままDLすれば即利用可能です)
DL後はBAT冒頭の
set "URI=REPLACE_WITH_LOGIC_APPS_SIGNED_URL"
を、先に控えたHTTP URLへ置き換えれば実行できます。
URL中の % は、BAT内では %% と記述してください。
共通的に以下部分へ含まれています。(例)
変更前: sp=%2Ftriggers%2FWhen_an_HTTP_request_is_received%2F
変更後: sp=%%2Ftriggers%%2FWhen_an_HTTP_request_is_received%%2F
実際の署名付きURLを設定したBATは、GitHubなどへ公開しないでください。
必要なシークレットや設定上の注意点は、サンプルのREADMEにまとめています。
なお、筆者の作成したBATに警戒心があるときは
ChatGPTなどにコードを渡して、リスク監査を実施してもらってください。・バックドアやウィルスなどの仕込みがないか
・不明な場所へのデータ送信が設定されていないか
それぞれのコードについて、簡単に解説します。
① RDP接続
シークレット:RDP-USER、RDP-PASS、RDP-HOST
に記述されている接続先/ユーザー名/パスワードをそれぞれ取得し、
リモートデスクトップを起動します。
画面には接続先とユーザー名を表示し、パスワードはマスクします。
※登録した資格情報は10秒後に削除されます
ただしWindows HomeはRDPの接続先になれず、自分自身への接続にも制約があります。
接続できない場合は、利用可能な別PCを指定してください。※テスト可能なマシンをお持ちでない場合は、本検証はスキップしてください
② 処理のON/OFF制御
シークレット:APP-ENABLED を取得し、ON のときだけPC名を表示する hostname を実行します。
OFF の場合は実行をスキップします。
Key Vaultの値を変更して再実行すると、BATを書き換えずに動作を切り替えられます。
この設定は、ほかのBATには影響しません。
③ ファイルコピー
シークレット:COPY-FROM と COPY-TO を取得し、
デスクトップ上のフォルダ間でファイルをコピーします。
実行前にデスクトップへ FromFolder を手動で作成し、テスト用ファイルを置いてください。
記事の手順通りに進んでいれば、作成済のはずです。
コピー先の ToFolder は、存在しなければBATが作成し、存在していればそのまま使います。
同名ファイルは上書きされるため、テスト用のファイルで試しましょう。
本手順ではBATをFromFolderへまとめて配置してます。
ToFolderへBATがコピーされていれば成功です。
最後に
今回は変数をKeyVaultへ保存し、インターネット経由で取得し利用する手順を執筆しました。
10年前であれば
「PC内の特定の場所にスクリプトを固めて配置し、iniファイルなどへ変数をまとめる」
「Windows標準の環境変数設定をメンテナンスして、環境にあった動作をさせる」
あたりが定石だったと思いますが、モダンなパブリッククラウドを利用すれば
- 「自宅で利用する変数までクラウドで管理できる」
- 「BATだけ配布すれば自宅内にある、どのPCからでも即利用できる」
- 「BATのファイルコピーとあわせてiniファイルなどのコピーや配置も不要、PC内でもBATの格納場所を選ばない」
- 「Windowsの環境設定変数を、環境にあわせてメンテナンスする必要がない」
- 「インターネット参照にも関わらず、グローバルIPによる最低限のセキュリティが担保できる(他の場所から利用できない)」
というメリットがあります。
Windowsの環境変数設定などの機能は、
よりセキュアな設定を行いたい場合は選択肢に入ってきます。セキュリティと運用(操作性)はトレードオフなので、
「その環境でどこまでの安全確保をするか?」を検討し、
双方バランスの取れた機能を採用してください。
余談
AWSで実現する場合は
「Lambda + SSMパラメータストア or Secret Manager」のような構成になると思います。
コチラも機会があれば記事化したいと思います。
AzureのLogicAppsと直接対応するサービスは現時点(2026年11月現在)では存在しません。
M365 Power Automate が類似するサービスとなっており、完全にMicrosoftな世界観です。
また、LogicAppsへアクセスするためのHTTP URLに限って、
本記事内では各コードに埋め込むしかありませんが、こちらも
LogicAppsに依存せず、変数のようにインターネットから取得する
方法がありますので、そちらも機会を見て記事化します。
なお、本記事ではWindows BATをテストコードとして利用しています。
本当はPowerShellで提供したかったのですが、以下の理由でBATを採用しています。
Windows標準ではPowerShellをそのまま実行できないので、少々環境依存になる
本記事が皆さまのご参考になれば幸いです。


コメント