クイックスタート: .NET 用 Azure Key Vault キー クライアント ライブラリ

.NET 用 Azure Key Vault キー クライアント ライブラリを使ってみます。 Azure Key Vault は、暗号化キーのセキュリティで保護されたストアを提供するクラウド サービスです。 暗号化キー、パスワード、証明書、およびその他のシークレットを安全に保管することができます。 Azure Key Vault は、Azure Portal を使用して作成および管理できます。 このクイックスタートでは、.NET キー クライアント ライブラリを使用して Azure キー コンテナーからキーを作成、取得、および削除する方法について説明します

Key Vault キー クライアント ライブラリのリソースは、次のとおりです。

API リファレンスのドキュメント | ライブラリのソース コード | パッケージ (NuGet)

Key Vault とキーの詳細については、以下を参照してください。

前提条件

このクイックスタートでは、dotnet および Azure CLI を使用します

セットアップ

このクイックスタートでは、Azure CLI と Azure Identity ライブラリを使用して、Azure サービスに対するユーザーの認証を行います。 開発者は、Visual Studio または Visual Studio Code を使用してその呼び出しを認証することもできます。詳細については、Azure Identity クライアント ライブラリを使用してクライアントを認証する方法に関するページを参照してください。

Azure へのサインイン

  1. login コマンドを実行します。

    az login
    

    CLI で既定のブラウザーを開くことができる場合、開いたブラウザに Azure サインイン ページが読み込まれます。

    それ以外の場合は、 https://aka.ms/devicelogin でブラウザー ページを開き、ターミナルに表示されている認証コードを入力します。

  2. ブラウザーでアカウントの資格情報を使用してサインインします。

キー コンテナーへのアクセス許可を付与する

ロールベースのアクセス制御 (RBAC) を使用してキー コンテナーへのアクセス許可をアプリケーションに付与するには、Azure CLI コマンド az role assignment create を使用してロールを割り当てます。

az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

<app-id>、<subscription-id>、<resource-group-name>、<your-unique-keyvault-name> は実際の値に置き換えてください。 <app-id> は、Azure AD に登録済みのアプリケーションのアプリケーション (クライアント) ID です。

新しい .NET コンソール アプリを作成する

  1. コマンド シェルで、次のコマンドを実行して、key-vault-console-app という名前のプロジェクトを作成します。

    dotnet new console --name key-vault-console-app
    
  2. 新しく作成した key-vault-console-app ディレクトリに移動し、次のコマンドを実行してプロジェクトをビルドします。

    dotnet build
    

    ビルドの出力に警告やエラーが含まれないようにする必要があります。

    Build succeeded.
     0 Warning(s)
     0 Error(s)
    

パッケージのインストール

コマンド シェルから、.NET 用 Azure Key Vault キー クライアント ライブラリをインストールします。

dotnet add package Azure.Security.KeyVault.Keys

このクイックスタートでは、Azure Identity クライアント ライブラリもインストールする必要があります。

dotnet add package Azure.Identity

環境変数の設定

このアプリケーションでは、KEY_VAULT_NAME という環境変数にキー コンテナーの名前を使用します。

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<your-key-vault-name>"

macOS または Linux

export KEY_VAULT_NAME=<your-key-vault-name>

オブジェクト モデル

キーは、.NET 用 Azure Key Vault キー クライアント ライブラリを使用して管理できます。 「コード例」セクションでは、クライアントの作成、キーの設定、キーの取得、およびキーの削除方法を示しています。

コード例

ディレクティブの追加

Program.cs の先頭に次のディレクティブを追加します。

using System;
using Azure.Identity;
using Azure.Security.KeyVault.Keys;

クライアントの認証と作成

ほとんどの Azure サービスに対するアプリケーション要求は、認可される必要があります。 Azure Identity クライアント ライブラリによって提供される DefaultAzureCredential クラスを使うことは、コード内の Azure サービスへのパスワードレス接続を実装するための推奨される方法です。 DefaultAzureCredential は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境) で異なる認証方法をアプリに使用できます。

このクイックスタートでは、DefaultAzureCredential は Azure CLI にログインしたローカル開発ユーザーの資格情報を使って、キー コンテナーに対して認証されます。 アプリケーションが Azure にデプロイされると、同じDefaultAzureCredential コードで、App Service、仮想マシン、またはその他のサービスに割り当てられているマネージド ID を自動的に検出して使用できます。 詳細については、マネージド ID の概要に関するページを参照してください。

この例では、キー コンテナーの名前は、https://<your-key-vault-name>.vault.azure.net という形式で、キー コンテナーの URI に展開されます。 キー コンテナーに対する認証の詳細については、開発者ガイドを参照してください。

var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = $"https://{keyVaultName}.vault.azure.net";

var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());

キーの保存

このタスクには、CreateKeyAsync メソッドを使用します。 このメソッドは、パラメーターで、キー名とキーの種類を受け取ります。

var key = await client.CreateKeyAsync("myKey", KeyType.Rsa);

Note

キー名が存在する場合は、このコードによって、そのキーの新しいバージョンが作成されます。

キーの取得

先ほど作成したキーを、GetKeyAsync メソッドを使用して取得できるようになりました。

var key = await client.GetKeyAsync("myKey");

キーの削除

最後に、StartDeleteKeyAsync メソッドと PurgeDeletedKeyAsync メソッドを使用して、キー コンテナーからキーを削除して消去します。

var operation = await client.StartDeleteKeyAsync("myKey");

// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();

var key = operation.Value;
await client.PurgeDeletedKeyAsync("myKey");

サンプル コード

Key Vault を対話的に操作するために、次の手順を完了して .NET コンソール アプリに変更を加えます。

  • Program.cs のコードを次のコードに置き換えます。

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Keys;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string keyName = "myKey";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write($"Creating a key in {keyVaultName} called '{keyName}' ...");
                var createdKey = await client.CreateKeyAsync(keyName, KeyType.Rsa);
                Console.WriteLine("done.");
    
                Console.WriteLine($"Retrieving your key from {keyVaultName}.");
                var key = await client.GetKeyAsync(keyName);
                Console.WriteLine($"Your key version is '{key.Value.Properties.Version}'.");
    
                Console.Write($"Deleting your key from {keyVaultName} ...");
                var deleteOperation = await client.StartDeleteKeyAsync(keyName);
                // You only need to wait for completion if you want to purge or recover the key.
                await deleteOperation.WaitForCompletionAsync();
                Console.WriteLine("done.");
    
                Console.Write($"Purging your key from {keyVaultName} ...");
                await client.PurgeDeletedKeyAsync(keyName);
                Console.WriteLine(" done.");
            }
        }
    }
    

テストして検証する

  1. 次のコマンドを実行して、プロジェクトをビルドします

    dotnet build
    
  2. 次のコマンドを実行して、アプリを実行します。

    dotnet run
    
  3. メッセージが表示されたら、シークレットの値を入力します (例: mySecretPassword)。

    次のような出力が表示されます。

    Creating a key in mykeyvault called 'myKey' ... done.
    Retrieving your key from mykeyvault.
    Your key version is '8532359bced24e4bb2525f2d2050738a'.
    Deleting your key from jl-kv ... done
    Purging your key from <your-unique-keyvault-name> ... done.   
    

次のステップ

このクイックスタートでは、キー コンテナーを作成し、キーを格納して、そのキーを取得しました。

Key Vault の詳細およびアプリとの統合方法の詳細については、以下の記事を参照してください。