Azure Key Vaultを利用すると、パスワード等の機密情報へのアクセスをAzure Portal上のみに制限することができる。今回は、Key Vaultを作成しKey Vaultのシークレットを取得してみたので、そのサンプルプログラムを共有する。
なお、今回の記事は長くなるため、前提条件・Key Vaultの作成・実行結果のみ記載し、ソースコードの内容は次回の記事で記載する。
前提条件
下記記事に従ってAzure App Service, Azure Functionsのサンプルプログラムを作成済であること。


やってみたこと
キーコンテナーの作成
キーコンテナーの作成は、Azure Portal上で作成できる。その手順は以下の通り。
1) Azure Portalにログインし、「キーコンテナー」サービスを選択する。
2) キーコンテナーの一覧画面が表示されるため、「追加」ボタンを押下する。
3) リソースグループ、Key Vault名、地域を指定し、「確認および作成」ボタンを押下する。
4) 作成するキーコンテナーの内容を確認し、「作成」ボタンを押下する。
5) デプロイが完了すると、以下の画面が表示される。ここで「リソースに移動」ボタンを押下する。
6) 以下のように、作成した「キーコンテナー」の概要が表示される。
シークレットの作成
シークレットの作成は、Azure Portal上で作成できる。その手順は以下の通り。
1) キーコンテナーの概要を表示し、「シークレット」メニューを選択する。
2) シークレットを作成するため、「生成/インポート」ボタンを押下する。
3) シークレットの名前・値を指定し、「作成」ボタンを押下する。ここでは、値は「keySecretValue」を指定している。
4) シークレットの作成が完了すると、「keySecret」の作成が確認できる。シークレットの中身を確認するには、一覧の「keySecret」を押下する。
5) シークレットのバージョンが表示されるため、現在のバージョンの一覧の値を押下する。
6) シークレットの設定値が表示されるが、シークレットの値が確認できないため、「シークレット値を表示する」ボタンを押下する。
サービスプリンシパルの作成
ローカル環境からもAzure Key Vaultにアクセスできるようにするには、サービスプリンシパルという、特定のAzureリソースにアクセスするために使用するAzure Active Directoryアプリケーションリソースを作成する必要がある。その手順は以下の通り。
1) コマンドプロンプトでAzureにログインするため、「az login」コマンドを実行し、Azure Portalにログインするアカウントでログインする。
2) 「az ad sp create-for-rbac –name (キーコンテナーのURI)」というコマンドを実行し、サービスプリンシパルを作成する。
ただし、ここで表示されるappId, password, tenantの値はサンプルプログラムで使用するため、コピーして残しておく。
また、キーコンテナーのURIは、以下のキーコンテナーの概要の「コンテナーのURI」で確認できる。
3) 作成したサービスプリンシパルを確認するには、Azure Portalにログイン後、「Azure Active Directory」サービスを選択する。
4)「アプリの登録」メニューを選択し、「すべてのアプリケーション」で「key」を指定すると、先ほど登録したサービスプリンシパルが確認できる。
5) 先ほどの画面で表示名のリンクを押下すると、以下のように、作成したサービスプリンシパルの概要が表示される。
キーコンテナーのアクセスポリシーの変更
キーコンテナから先ほど作成したサービスプリンシパルにアクセスできるようにするために、キーコンテナーのアクセスポリシーを変更する。その手順は以下の通り。
1) キーコンテナーの概要を表示し、「アクセスポリシー」メニューを選択する。
3) アクセスポリシーの追加画面が表示されるため、プリンシパルの選択の「選択されていません」リンクを押下する。
4) 先ほど作成したサービスプリンシパルを選択し、「選択」ボタンを押下する。
5)「シークレットのアクセス許可」で、「取得」「一覧」を選択する。
6) 下記内容が指定されていることを確認し、「追加」ボタンを押下する。
7) アクセスポリシーの一覧に指定したサービスプリンシパルが表示されることを確認し、「保存」ボタンを押下する。
サンプルプログラムの実行結果
サンプルプログラムの実行結果は、以下の通り。
1)「mvn azure-functions:deploy」コマンドによって、Azure Functions上にサンプルプログラムをデプロイする。
なお、Azure Functionsにデプロイする過程は、以下の記事の「Azure FunctionsへのSpring Bootを利用したJavaアプリケーションのデプロイ」を参照のこと。

2)「mvn azure-webapp:deploy」コマンドによって、Azure App Service上にサンプルプログラムをデプロイする。
なお、Azure App Serviceにデプロイする過程は、以下の記事の「App ServiceへのSpring Bootを利用したJavaアプリケーションのデプロイ」を参照のこと。

3) Azure App ServiceのURL「https://azureappdemoservice.azurewebsites.net/」とアクセスした場合の実行結果は、以下の通りで、シークレットの値が表示される。ローカル環境で実行した場合も、同じ実行結果となる。
なお、上記URLは、下記Azure App Serviceの概要メニューのURLから確認できる。
要点まとめ
- パスワード等の機密情報へのアクセスをAzure Portal上のみに制限できるKey Vaultは、Azure Portal上で作成できる。
- ローカル環境からもAzure Key Vaultにアクセスできるようにするには、サービスプリンシパルを作成する必要がある。
- サービスプリンシパルはコマンドプロンプト上で作成後、Key Vaultを管理するキーコンテナーのアクセスポリシーに追加する必要がある。