クラウドエンジニアブログ

Azure Key Vault によるパスワード管理

椎熊 裕一

椎熊 裕一

1. はじめに

みなさん、こんにちは。Key Vault 大好き椎熊です。
今回は、Azure Key Vault によるパスワード管理についてご紹介したいと思います。
ちょうど使ってみようと思った方、これから利用を検討されている方のご参考になりましたら幸いです。

2. Azure Key Vault とは

Azure Key Vault(以下 Key Vault)は、キー、証明書、シークレット(パスワードや接続文字列など)の機密情報を Azure 上に安全に保管、利用できるサービスです。
キーコンテナーという入れ物にキー / 証明書 / シークレットを格納します。
イメージとしては以下のとおりです。

Azure Key Vault とは

キーコンテナーへのアクセスには管理プレーンとデータプレーンという、2つのインターフェースがあります。

それぞれの役割は以下のとおりです。

  • 管理プレーン
    管理用のインターフェースとなります。
    管理者は管理プレーン経由でアクセスし、アクセス制御の管理や使用状況の監査などをすることができます。
    アクセス制御には RBAC を使用し、キーコンテナー自体の操作のアクセスを制御します。
    例えば、以下のような制御をすることができます。
    • キーコンテナーの作成または削除
    • サブスクリプション内のコンテナーの一覧の取得
  • データプレーン
    アプリケーション用のインターフェースとなります。
    アプリケーションはデータプレーン経由でアクセスし、各オブジェクト(キー / 証明書 / シークレット)を生成 / 取得します。
    アクセス制御には、アクセスポリシーを使用し、キーコンテナーに格納されたオブジェクトの操作のアクセスを制御します。
    例えば、以下のような制御をすることができます。
    • キーの取得、一覧、更新、作成
    • シークレットの取得、一覧、セット、削除
    • 証明書の取得、一覧、更新、作成

アクセスポリシーの管理は、Azure Portal、Azure CLI ツール、PowerShell、または Azure Resource Manager REST API を使用することができます。
イメージとしては以下のとおりです。

管理プレーンとデータプレーン

管理プレーンは RBAC で制御しますので、例えばリソースグループに「共同作成者権限」を持っているユーザーはデータプレーンのアクセスポリシーを設定できてしまいます。
このため Key Vault に対するアクセス制御は慎重に検討する必要があります。

最新の情報は以下を参照いただければと思います。

  • 「Azure Key Vault とは」
https://docs.microsoft.com/ja-jp/azure/key-vault/key-vault-whatis
  • 「キー コンテナーのセキュリティ保護」
https://docs.microsoft.com/ja-jp/azure/key-vault/key-vault-secure-your-key-vault


3. 実際に試してみた

簡単ですが、実際にキーコンテナーを作成し、Key Vault の動作を確認してみます。
今回は、管理者にてパスワードを生成し、開発者へ渡すといったケースを想定しています。
管理プレーンとデータプレーンのイメージをつかんでいただければ幸いです。
手順は以下のとおりです。

前提条件)管理者用と開発者用のユーザーが作成されていること

  • 管理者用ユーザー: keyvault-admin
  • 開発者用ユーザー: keyvault-user

3 - 1. キーコンテナーの作成
3 - 2. 作成したキーコンテナーに管理者ユーザーへ RBAC のロール権限を付与する
3 - 3. 管理者ユーザーにて管理者ユーザー自身のアクセスポリシーを設定する
3 - 4. 管理者ユーザーにてパスワードを生成する
3 - 5. 管理者ユーザーにて開発者ユーザーにアクセスポリシーを設定する
3 - 6. 開発者ユーザーにてパスワードを取得する

3 - 1. キーコンテナーの作成

ここではキーコンテナーを作成できる権限のユーザーで Azure Portal にログインしてください。
[すべてのサービス] - [キーコンテナー]を選択します。

[キーコンテナー]を選択"

[追加]を選択します。

[追加]を選択

任意の名前を入力し、任意のサブスクリプション・リソースグループ・場所を選択してください。
価格レベルは[標準]を選択し、[作成]を選択します。

価格レベルは[標準]を選択し、[作成]を選択

3 - 2. 作成したキーコンテナーに管理者ユーザーへ RBAC のロール権限を付与する

ここでは作成したキーコンテナーに RBAC のロール権限を付与できるユーザーで Azure Portal にログインしてください。
キーコンテナーの画面より、[<任意のキーコンテナー>] - [アクセス制御(IAM)] - [ロールの割り当ての追加]を選択します。

[<任意のキーコンテナー>] - [アクセス制御(IAM)] - [ロールの割り当ての追加]を選択

役割は[Key Vault の共同作成者]を選択し、管理者ユーザー[keyvault - admin]を選択します。
選択されたら、[保存]を選択します。

役割は[Key Vault の共同作成者]を選択し、管理者ユーザー[keyvault-admin]を選択。選択されたら、[保存]を選択

3 - 3. 管理者ユーザーにて管理者ユーザー自身のアクセスポリシーを設定する

ここからは管理者ユーザーで Azure Portal にログインしてください。
ここでの操作は管理プレーンで行っていることになります。

[すべてのサービス] - [キーコンテナー]を選択します。

[すべてのサービス] - [キーコンテナー]を選択

キーコンテナーの画面より、[<任意のキーコンテナー>] - [アクセス ポリシー] - [新規追加]を選択します。

キーコンテナーの画面より、[<任意のキーコンテナー>] - [アクセス ポリシー] - [新規追加]を選択

管理者ユーザーには各オブジェクトの管理権限を付与します。 以下のとおり選択し、[OK]を選択します。

[OK]を選択

[保存]を選択します。

[保存]を選択

3 - 4. 管理者ユーザーにてパスワードを生成する

次に実際にパスワードを生成し、キーコンテナーへ格納します。
ここでの操作はデータプレーンで行っていることになります。
キーコンテナーの画面より、[<任意のキーコンテナー>] - [シークレット] - [生成/インポート]を選択します。

キーコンテナーの画面より、[<任意のキーコンテナー>] - [シークレット] - [生成/インポート]を選択

任意の名前と値にパスワードを入力します。
入力後、[作成]を選択します。

任意の名前と値にパスワードを入力。入力後、[作成]を選択

3 - 5. 管理者ユーザーにて開発者ユーザーにアクセスポリシーを設定する

ここでの操作は管理プレーンで行っていることになります。
キーコンテナーの画面より、[<任意のキーコンテナー>] - [アクセス ポリシー] - [新規追加]を選択します。

キーコンテナーの画面より、[<任意のキーコンテナー>] - [アクセス ポリシー] - [新規追加]を選択

プリンシパルの選択で開発者ユーザーを選択し、シークレットのアクセス許可で[取得]を選択し、[OK]を選択します。

プリンシパルの選択で開発者ユーザーを選択し、シークレットのアクセス許可で[取得]を選択肢、[OK]を選択

[保存]を選択します。
これで開発者ユーザーでパスワードのみを取得することができます。

[保存]を選択

3 - 6. 開発者ユーザーにてパスワードを取得する

Azure PowerShell を使って、データプレーン経由でパスワードを取得します。 まず、開発者ユーザーで Azure に接続します。
>Login - AzureRmAccount
※接続には、Azure PowerShell が必要となります
※ブラウザが立ち上がり、ユーザー名 / パスワードの入力を求められるので、開発者ユーザーのアカウントでログインします

開発者ユーザーのアカウントでログイン

以下コマンドでシークレットを取得します。
>(Get-AzureKeyVaultSecret - vaultName "keycontainer-blog" - name "keyvault - secret").SecretValueText

シークレットを取得

“secret”という文字列が設定したパスワードとなります。

4. さいごに

イメージは掴んでいただけたでしょうか?
今回のケースでは開発者もパスワードが見えてしまいますが、本番環境ではまた別のキーコンテナーで別シークレットを設定し、アクセスポリシーでアプリケーションにのみ取得権限を付与することで本番環境のパスワードを隠すことができます。
ただし、今回の取得方法では、Key Vault からパスワードを取得する前に Azure AD の認証が必要となります。認証のためのアカウント情報をプログラムに書いておかなければならず、アカウント情報がハードコードされてしまうという問題は解消できません。
この問題を解決する手段として、マネージド ID というサービスと組み合わせて使うことで、よりセキュアな構成をとることができます。マネージド ID についてはまた別の機会にご紹介します。




次回予告
  • Azure リソースのマネージド ID を使ったセキュアなパスワード管理



【総合】お問い合わせ

ソリューションに関する全般的なお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録