Azure

Azure Key Vaultを作成しKey Vaultのシークレットを取得してみた(ソースコード以外編)

Azure Key Vaultを利用すると、パスワード等の機密情報へのアクセスをAzure Portal上のみに制限することができる。今回は、Key Vaultを作成しKey Vaultのシークレットを取得してみたので、そのサンプルプログラムを共有する。

なお、今回の記事は長くなるため、前提条件・Key Vaultの作成・実行結果のみ記載し、ソースコードの内容は次回の記事で記載する。

前提条件

下記記事に従ってAzure App Service, Azure Functionsのサンプルプログラムを作成済であること。

Azure App Service上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でApp Serviceを作成してみたが、今回は、前回作成したApp ServiceにSpring Bo...
Azure Functions上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でAzure Functionsを作成してみたが、今回は、前回作成したAzure FunctionsにS...

やってみたこと

キーコンテナーの作成

キーコンテナーの作成は、Azure Portal上で作成できる。その手順は以下の通り。

1) Azure Portalにログインし、「キーコンテナー」サービスを選択する。
キーコンテナーの作成_1

2) キーコンテナーの一覧画面が表示されるため、「追加」ボタンを押下する。
キーコンテナーの作成_2

3) リソースグループ、Key Vault名、地域を指定し、「確認および作成」ボタンを押下する。
キーコンテナーの作成_3

4) 作成するキーコンテナーの内容を確認し、「作成」ボタンを押下する。
キーコンテナーの作成_4

5) デプロイが完了すると、以下の画面が表示される。ここで「リソースに移動」ボタンを押下する。
キーコンテナーの作成_5

6) 以下のように、作成した「キーコンテナー」の概要が表示される。
キーコンテナーの作成_6

シークレットの作成

シークレットの作成は、Azure Portal上で作成できる。その手順は以下の通り。

1) キーコンテナーの概要を表示し、「シークレット」メニューを選択する。
シークレットの作成_1

2) シークレットを作成するため、「生成/インポート」ボタンを押下する。
シークレットの作成_2

3) シークレットの名前・値を指定し、「作成」ボタンを押下する。ここでは、値は「keySecretValue」を指定している。
シークレットの作成_3

4) シークレットの作成が完了すると、「keySecret」の作成が確認できる。シークレットの中身を確認するには、一覧の「keySecret」を押下する。
シークレットの作成_4

5) シークレットのバージョンが表示されるため、現在のバージョンの一覧の値を押下する。
シークレットの作成_5

6) シークレットの設定値が表示されるが、シークレットの値が確認できないため、「シークレット値を表示する」ボタンを押下する。
シークレットの作成_6

7) 以下のように、シークレットの値が確認できる。
シークレットの作成_7



サービスプリンシパルの作成

ローカル環境からもAzure Key Vaultにアクセスできるようにするには、サービスプリンシパルという、特定のAzureリソースにアクセスするために使用するAzure Active Directoryアプリケーションリソースを作成する必要がある。その手順は以下の通り。

1) コマンドプロンプトでAzureにログインするため、「az login」コマンドを実行し、Azure Portalにログインするアカウントでログインする。
サービスプリンシパルの作成_1

2) 「az ad sp create-for-rbac –name (キーコンテナーのURI)」というコマンドを実行し、サービスプリンシパルを作成する。
サービスプリンシパルの作成_2_1
ただし、ここで表示されるappId, password, tenantの値はサンプルプログラムで使用するため、コピーして残しておく。

また、キーコンテナーのURIは、以下のキーコンテナーの概要の「コンテナーのURI」で確認できる。
サービスプリンシパルの作成_2_2

3) 作成したサービスプリンシパルを確認するには、Azure Portalにログイン後、「Azure Active Directory」サービスを選択する。
サービスプリンシパルの作成_3

4)「アプリの登録」メニューを選択し、「すべてのアプリケーション」で「key」を指定すると、先ほど登録したサービスプリンシパルが確認できる。
サービスプリンシパルの作成_4

5) 先ほどの画面で表示名のリンクを押下すると、以下のように、作成したサービスプリンシパルの概要が表示される。
サービスプリンシパルの作成_5

キーコンテナーのアクセスポリシーの変更

キーコンテナから先ほど作成したサービスプリンシパルにアクセスできるようにするために、キーコンテナーのアクセスポリシーを変更する。その手順は以下の通り。

1) キーコンテナーの概要を表示し、「アクセスポリシー」メニューを選択する。
キーコンテナーの変更_1

2)「アクセスポリシーの追加」リンクを押下する。
キーコンテナーの変更_2

3) アクセスポリシーの追加画面が表示されるため、プリンシパルの選択の「選択されていません」リンクを押下する。
キーコンテナーの変更_3

4) 先ほど作成したサービスプリンシパルを選択し、「選択」ボタンを押下する。
キーコンテナーの変更_4

5)「シークレットのアクセス許可」で、「取得」「一覧」を選択する。
キーコンテナーの変更_5

6) 下記内容が指定されていることを確認し、「追加」ボタンを押下する。
キーコンテナーの変更_6

7) アクセスポリシーの一覧に指定したサービスプリンシパルが表示されることを確認し、「保存」ボタンを押下する。
キーコンテナーの変更_7

8) 保存すると、以下のように、保存ボタンが非活性になる。
キーコンテナーの変更_8



サンプルプログラムの実行結果

サンプルプログラムの実行結果は、以下の通り。

1)「mvn azure-functions:deploy」コマンドによって、Azure Functions上にサンプルプログラムをデプロイする。
サンプルプログラムの実行結果_1

なお、Azure Functionsにデプロイする過程は、以下の記事の「Azure FunctionsへのSpring Bootを利用したJavaアプリケーションのデプロイ」を参照のこと。

Azure Functions上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でAzure Functionsを作成してみたが、今回は、前回作成したAzure FunctionsにS...

2)「mvn azure-webapp:deploy」コマンドによって、Azure App Service上にサンプルプログラムをデプロイする。
サンプルプログラムの実行結果_2

なお、Azure App Serviceにデプロイする過程は、以下の記事の「App ServiceへのSpring Bootを利用したJavaアプリケーションのデプロイ」を参照のこと。

Azure App Service上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でApp Serviceを作成してみたが、今回は、前回作成したApp ServiceにSpring Bo...

3) Azure App ServiceのURL「https://azureappdemoservice.azurewebsites.net/」とアクセスした場合の実行結果は、以下の通りで、シークレットの値が表示される。ローカル環境で実行した場合も、同じ実行結果となる。
サンプルプログラムの実行結果_3_1

なお、上記URLは、下記Azure App Serviceの概要メニューのURLから確認できる。
サンプルプログラムの実行結果_3_2

要点まとめ

  • パスワード等の機密情報へのアクセスをAzure Portal上のみに制限できるKey Vaultは、Azure Portal上で作成できる。
  • ローカル環境からもAzure Key Vaultにアクセスできるようにするには、サービスプリンシパルを作成する必要がある。
  • サービスプリンシパルはコマンドプロンプト上で作成後、Key Vaultを管理するキーコンテナーのアクセスポリシーに追加する必要がある。