クイックスタート: .NET 用 Azure Key Vault シークレット クライアント ライブラリ (SDK v4)Quickstart: Azure Key Vault secret client library for .NET (SDK v4)

.NET 用 Azure Key Vault シークレットクライアント ライブラリを使ってみます。Get started with the Azure Key Vault secret client library for .NET. Azure Key Vault は、シークレットのセキュリティで保護されたストアを提供するクラウド サービスです。Azure Key Vault is a cloud service that provides a secure store for secrets. キー、パスワード、証明書、およびその他のシークレットを安全に保管することができます。You can securely store keys, passwords, certificates, and other secrets. Azure Key Vault は、Azure Portal を使用して作成および管理できます。Azure key vaults may be created and managed through the Azure portal. このクイックスタートでは、.NET クライアント ライブラリを使用して Azure キー コンテナーからシークレットを作成、取得、および削除する方法について説明しますIn this quickstart, you learn how to create, retrieve, and delete secrets from an Azure key vault using the .NET client library

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

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

Key Vault とシークレットの詳細については、以下を参照してください。For more information about Key Vault and secrets, see:

前提条件Prerequisites

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

セットアップSetup

このクイックスタートでは、Azure CLI と Azure Identity ライブラリを使用して、Azure サービスに対するユーザーの認証を行います。This quickstart is using Azure Identity library with Azure CLI to authenticate user to Azure Services. 開発者は、Visual Studio または Visual Studio Code を使用してその呼び出しを認証することもできます。詳細については、Azure Identity クライアント ライブラリを使用してクライアントを認証する方法に関するページを参照してください。Developers can also use Visual Studio or Visual Studio Code to authenticate their calls, for more information, see Authenticate the client with Azure Identity client library.

Azure へのサインインSign in to Azure

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

    az login
    

    CLI で既定のブラウザーを開くことができる場合、開いたブラウザに Azure サインイン ページが読み込まれます。If the CLI can open your default browser, it will do so and load an Azure sign-in page.

    それ以外の場合は、https://aka.ms/devicelogin でブラウザー ページを開き、ターミナルに表示されている認証コードを入力します。Otherwise, open a browser page at https://aka.ms/devicelogin and enter the authorization code displayed in your terminal.

  2. ブラウザーでアカウントの資格情報を使用してサインインします。Sign in with your account credentials in the browser.

キー コンテナーへのアクセス許可を付与するGrant access to your key vault

自分のユーザー アカウントにシークレットのアクセス許可を付与するアクセス ポリシーをキー コンテナーに対して作成しますCreate an access policy for your key vault that grants secret permissions to your user account

az keyvault set-policy --name <YourKeyVaultName> --upn user@domain.com --secret-permissions delete get list set purge

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

  1. コマンド シェルで、次のコマンドを実行して、key-vault-console-app という名前のプロジェクトを作成します。In a command shell, run the following command to create a project named key-vault-console-app:

    dotnet new console --name key-vault-console-app
    
  2. 新しく作成した key-vault-console-app ディレクトリに移動し、次のコマンドを実行してプロジェクトをビルドします。Change to the newly created key-vault-console-app directory, and run the following command to build the project:

    dotnet build
    

    ビルドの出力に警告やエラーが含まれないようにする必要があります。The build output should contain no warnings or errors.

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

パッケージのインストールInstall the packages

コマンド シェルから、.NET 用 Azure Key Vault シークレット クライアント ライブラリをインストールします。From the command shell, install the Azure Key Vault secret client library for .NET:

dotnet add package Azure.Security.KeyVault.Secrets

このクイックスタートでは、Azure Identity 用 Azure SDK クライアント ライブラリもインストールする必要があります。For this quickstart, you'll also need to install the Azure SDK client library for Azure Identity:

dotnet add package Azure.Identity

環境変数の設定Set environment variables

このアプリケーションでは、KEY_VAULT_NAME という環境変数にキー コンテナーの名前を使用します。This application is using key vault name as an environment variable called KEY_VAULT_NAME.

WindowsWindows

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

Windows PowerShellWindows PowerShell

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

macOS または LinuxmacOS or Linux

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

オブジェクト モデルObject model

シークレットは、.NET 用 Azure Key Vault シークレット クライアント ライブラリを使用して管理できます。The Azure Key Vault secret client library for .NET allows you to manage secrets. クライアントの作成、シークレットの設定、シークレットの取得、シークレットの削除を行う方法を「コード例」セクションで紹介しています。The Code examples section shows how to create a client, set a secret, retrieve a secret, and delete a secret.

コード例Code examples

ディレクティブの追加Add directives

Program.cs の先頭に次のディレクティブを追加します。Add the following directives to the top of Program.cs:

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

クライアントの認証と作成Authenticate and create a client

このクイックスタートでは、ログイン ユーザーを使用してキー コンテナーに対する認証を行います。ローカル開発では、これが推奨される方法となります。In this quickstart, logged in user is used to authenticate to key vault, which is preferred method for local development. Azure にデプロイされるアプリケーションの場合は、App Service または仮想マシンにマネージド ID を割り当てる必要があります。詳細については、マネージド ID の概要に関するページを参照してください。For applications deployed to Azure, managed identity should be assigned to App Service or Virtual Machine, for more information, see Managed Identity Overview.

以下の例では、キー コンテナーの名前は、"https://<your-key-vault-name>.vault.azure.net" という形式で、キー コンテナーの URI に展開されます。In below example, the name of your key vault is expanded to the key vault URI, in the format "https://<your-key-vault-name>.vault.azure.net". この例では、Azure ID ライブラリ"DefaultAzureCredential()" クラスを使用しています。環境や使用するオプションが変わっても、同じコードを使用して ID を提供することができます。This example is using 'DefaultAzureCredential()' class from Azure Identity Library, which allows to use the same code across different environments with different options to provide identity. キー コンテナーに対する認証について詳しくは、開発者ガイドを参照してください。Fore more information about authenticating to key vault, see Developer's Guide.

string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";

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

シークレットを保存するSave a secret

コンソール アプリの認証が済んだら、キー コンテナーにシークレットを追加します。Now that the console app is authenticated, add a secret to the key vault. このタスクには、SetSecretAsync メソッドを使用します。For this task, use the SetSecretAsync method. このメソッドの第 1 パラメーターには、シークレットの名前 (このサンプルでは "mySecret") を指定します。The method's first parameter accepts a name for the secret—"mySecret" in this sample.

await client.SetSecretAsync(secretName, secretValue);

注意

シークレット名が存在する場合は、上のコードによって、そのシークレットの新しいバージョンが作成されます。If secret name exists, above code will create new version of that secret.

シークレットを取得するRetrieve a secret

先ほど設定した値は、GetSecretAsync メソッドを使用して取得できます。You can now retrieve the previously set value with the GetSecretAsync method.

var secret = await client.GetSecretAsync(secretName);

これで、シークレットが secret.Value として保存されました。Your secret is now saved as secret.Value.

シークレットを削除しますDelete a secret

最後に、StartDeleteSecretAsync メソッドと PurgeDeletedSecretAsync メソッドを使用して、キー コンテナーからシークレットを削除してみましょう。Finally, let's delete the secret from your key vault with the StartDeleteSecretAsync and PurgeDeletedSecretAsync methods.

var operation = await client.StartDeleteSecretAsync("mySecret");
// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();

await client.PurgeDeletedKeyAsync("mySecret");

サンプル コードSample code

Key Vault を対話的に操作するために、次の手順を完了して .NET Core コンソール アプリに変更を加えます。Modify the .NET Core console app to interact with the Key Vault by completing the following steps:

  1. Program.cs のコードを次のコードに置き換えます。Replace the code in Program.cs with the following code:

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Secrets;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string secretName = "mySecret";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write("Input the value of your secret > ");
                var secretValue = Console.ReadLine();
    
                Console.Write($"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...");
                await client.SetSecretAsync(secretName, secretValue);
                Console.WriteLine(" done.");
    
                Console.WriteLine("Forgetting your secret.");
                secretValue = string.Empty;
                Console.WriteLine($"Your secret is '{secretValue}'.");
    
                Console.WriteLine($"Retrieving your secret from {keyVaultName}.");
                var secret = await client.GetSecretAsync(secretName);
                Console.WriteLine($"Your secret is '{secret.Value.Value}'.");
    
                Console.Write($"Deleting your secret from {keyVaultName} ...");
                DeleteSecretOperation operation = await client.StartDeleteSecretAsync(secretName);
                // You only need to wait for completion if you want to purge or recover the secret.
                await operation.WaitForCompletionAsync();
                Console.WriteLine(" done.");
    
                Console.Write($"Purging your secret from {keyVaultName} ...");
                await client.PurgeDeletedSecretAsync(secretName);
                Console.WriteLine(" done.");
            }
        }
    }
    

テストして検証するTest and verify

  1. 次のコマンドを実行して、アプリを実行します。Execute the following command to run the app.

    dotnet run
    
  2. メッセージが表示されたら、シークレットの値を入力しますWhen prompted, enter a secret value. (例: mySecretPassword)。For example, mySecretPassword.

次のような出力が表示されます。A variation of the following output appears:

Input the value of your secret > mySecretPassword
Creating a secret in <your-unique-keyvault-name> called 'mySecret' with the value 'mySecretPassword' ... done.
Forgetting your secret.
Your secret is ''.
Retrieving your secret from <your-unique-keyvault-name>.
Your secret is 'mySecretPassword'.
Deleting your secret from <your-unique-keyvault-name> ... done.    
Purging your secret from <your-unique-keyvault-name> ... done.

次のステップNext steps

Key Vault の詳細およびアプリとの統合方法の詳細については、以下の記事を参照してください。To learn more about Key Vault and how to integrate it with your apps, see the following articles: