Azure

Azure Key Vaultでみんなしあわせ(その2)

はい。
Key Vaultを使うとキー情報等の小規模な重要情報の管理が非常に楽になりそうな感じ、まだ維持できてますか?

実装の前に

前回書いたようにAzure Key Vaultの担当はあくまで情報の管理部分です。
なので、手順としては
①管理部分(Key Vaultでの情報管理方法)
②管理されている情報の使い方(実装)
になります。

いよいよ実装!

はい。
まずは、管理部分(キーコンテナー)から作成していきます。

①まずはリソースの作成

まずこれをやらないとAzureでの作業は始まりませんね。

Azure portalの左上にある「リソース作成」からAzure Marketplaceで「Key Vault」を検索します。

「Key Vault」が表示されたら「作成」をクリックします。

ここから、情報を格納するキーコンテナーの設定に入ります。

「基本」の項目を設定して作成します。
「アクセスポリシー」と「仮想ネットワーク」についてはここでは設定せず、後で設定します。

とりあえずですが、キーコンテナーが作成できました。
簡単ですね!

②キー(シークレット)の追加

作成したキーコンテナーに値を登録します。

キーコンテナーブレードから「シークレット」をクリック。

次に「✙生成/インポート」をクリック。

とりあえず、判りやすくするためにこんな値を設定します。

入力後、目のマークをクリックすると入力値を確認できます。(上画像)
ただし、キャレットが「値」欄から外れると、目のマークは表示されなくなります。(下画像)

「作成」をクリックするとキーが登録されます。

これで、キーの準備ができました。

③アプリケーションの作成準備

キーの準備ができたので、それを参照するアプリケーションの作成準備をします。
まずはVisual Studio 2019を起動し、「新しいプロジェクトの作成」 をクリック。

取得したキーを画面に表示したいので、
「Windowsフォームアプリケーション(.Net Framework)」を選択し、
「次へ」をクリック。

プロジェクトの名前等を入力して「作成」をクリック。

今回の名前は「Azure_KeyVault_View」にしました。

プロジェクトが作成されました。

続いてメニューの「ツール」から「オプション」をクリック。

「Azure認証サービス」を選択。
Azureに接続するためのアカウントを選択し、「OK」をクリック。

ここで設定したアカウントはあくまでVisual StudioがAzureに接続するための開発用のアカウントです。
実際の運用を前提としたものの場合、Azureへの接続(認証)の処理が必要になります。

次にライブラリの登録。
メニューの「ツール」の「NuGetパッケージマネージャー(N)」から「ソリューションのNuGetパッケージの管理」をクリック。

「Microsoft.Azure.KeyVault」を選択。

右側のプロジェクトの一覧からライブラリを登録するプロジェクトにチェックして、「インストール」をクリック。

「変更のプレビュー」が表示されたら「OK」をクリック。

「ライセンスへの同意」が表示されたら「同意」をクリック。

同様に
・「Microsoft.Azure.Services.AppAuthentication」
もインストール。

④いよいよ作成

まずはラベルをフォームに追加します。
名前は「lblKeyValue」にします。

ソースは以下の様にしました。

using System;
using System.Windows.Forms;
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.KeyVault.Models;
using Microsoft.Azure.Services.AppAuthentication;
namespace Azure_KeyVault_View
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void Form1_LoadAsync(object sender, EventArgs e) { //トークンの受け取り用クラスの生成 ・・・ ① AzureServiceTokenProvider astp = new AzureServiceTokenProvider(); //Azure Key Vaultのクライアントクラスの生成 ・・・ ② var kvc = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(astp.KeyVaultTokenCallback)); //アクセストークンの取得 ・・・ ③ SecretBundle key = await kvc.GetSecretAsync("https://container-keyvault.vault.azure.net/secrets/Key-Name01/").ConfigureAwait(true); //Azure Key Vaultのクライアントクラスからシークレットを取得 ・・・ ④ var secret = await kvc.GetSecretAsync(key.SecretIdentifier.Identifier); //値を表示 ・・・ ⑤ lblKeyValue.Text = secret.Value; } }
}

実行結果は下の画像になります。

起動直後は初期値ですが・・・
数秒待つとラベルの値が変わります!!

以上で「シークレットの取得」ができました。

⑤ソースについての簡単な説明

まず最初に、処理タイミングはForm1のロード時にしました。
特別な理由は無く、ソースを短くするためです。

続いて、ロード処理を非同期処理にしましたが、
待機処理は「Azure Key Vaultからのシークレットの取得」以外のコードが増えて、判りにくくなるので入れていません。
なので、ラベルの値が変わるまでに少し時間がかかります。

①トークン受け取り用クラスの生成
 そのままです。特に説明はありません。

②Key Vaultクライアントクラス生成
 Key Vaultへのアクセストークン(astp.KeyVaultTokenCallback)でKey Vaultへのアクセス認証(KeyVaultClient.AuthenticationCallback)を行い、クライアントクラスを生成しています。

③アクセストークンの取得
 ポータルで作成したキーコンテナーのサービスエンドポイント(https://container-keyvault.vault.azure.net/secrets/Key-Name01/)からアクセストークンを取得(非同期処理)

④Azure Key Vaultのクライアントクラスからシークレットを取得
 ②のクライアントクラスのシークレット識別子を使ってシークレットを取得します。

⑤値を表示
 取得したシークレットを表示します。

まとめ

シークレットの取得自体は4行程度でできることがわかりました。

今回は「Key Vaultからシークレットを取得する部分の実装」が知りたかったので、シークレットは1件のみで、Azureの認証についてはVisual Studioの機能に任せてしまっています。
現実的には複数のシークレットが登録されてたり、Azure認証時に「Azure Active Directory(Azure AD)」のロールによるアクセス制御をおこなったりと、もう少し複雑になると思います。
その辺りは追々勉強していこうと思います。

では、ありがとうございました。

この記事を書いている人
プロフィール画像

kenji.m

歯牙ないおっさんです(-_-;) 猫に飼われています。

記事について・製品についてのお問い合わせは下記フォームよりお願いいたします。

Azure Key Vaultでみんなしあわせ前のページ

Runbookで管理タスクを自動化する。次のページ

関連記事

  1. Application Gateway

    L7 負荷分散 Azure Application Gateway について:3回目

    こんにちは。ヤモトです。今回はApplication Gat…

  2. Appサービス

    Azure App Serviceを使ってみる

    1.はじめにこんにちは、Cloud Engineerの曽我で…

  3. Azure

    Azure Site Recoveryの課金について

    少々わかりにくい、Azure Site Recovery の…

  4. Azure

    WindowsVirtualDesktopがGAされているので(その2)

    その1で仮想マシンの展開まで行ったので次は接続、それとその他備考な…

  5. Azure

    AzureのDMSでデータを移行してみる記事 ~MySQL編~

    皆様、こんにちは。夏の暑さ対策、エアコンより扇風機派です。×3です。…

  6. Azure

    ARMテンプレートでインフラ構築する。

    こんにちは。曽我改め、そがひろです。趣味はカラオケとカード手品です。…

関連記事

  1. Azure

    Azure Virtual Machineのリージョン間複製
  2. VDI

    WindowsVirtualDesktopのARM
  3. Azure

    Azure CDNでマルチオリジンをやってみる記事
  4. Azure

    WindowsVirtualDesktopがGAされているので(その1)
  5. Azure

    Azure FilesをLinuxからマウントする記事
PAGE TOP