次の方法で共有


クイックスタート: .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 を使用して、"ユーザー プリンシパル名" (UPN) にロールを割り当てます。

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

<upn>、<subscription-id>、<resource-group-name>、<your-unique-keyvault-name> は実際の値に置き換えます。 UPN は一般的に、メール アドレスの形式を取ります (例: username@domain.com)。

新しい .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.Certificates

このクイックスタートでは、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.Certificates;

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

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

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

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

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

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

証明書の保存

この例では、わかりやすくするために、既定の発行ポリシーを含む自己署名証明書を使用できます。 このタスクでは、StartCreateCertificateAsync メソッドを使用します。 このメソッドは、パラメーターで、証明書名と証明書ポリシーを受け取ります。

var operation = await client.StartCreateCertificateAsync("myCertificate", CertificatePolicy.Default);
var certificate = await operation.WaitForCompletionAsync();

Note

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

証明書の取得

GetCertificateAsync メソッドを使用して、以前に作成した証明書を取得できるようになりました。

var certificate = await client.GetCertificateAsync("myCertificate");

証明書の削除

最後に、StartDeleteCertificateAsync メソッドと PurgeDeletedCertificateAsync メソッドで、証明書をキー コンテナーから削除、消去します。

var operation = await client.StartDeleteCertificateAsync("myCertificate");

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

var certificate = operation.Value;
await client.PurgeDeletedCertificateAsync("myCertificate");

サンプル コード

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

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

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Certificates;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string certificateName = "myCertificate";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new CertificateClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write($"Creating a certificate in {keyVaultName} called '{certificateName}' ...");
                CertificateOperation operation = await client.StartCreateCertificateAsync(certificateName, CertificatePolicy.Default);
                await operation.WaitForCompletionAsync();
                Console.WriteLine(" done.");
    
                Console.WriteLine($"Retrieving your certificate from {keyVaultName}.");
                var certificate = await client.GetCertificateAsync(certificateName);
                Console.WriteLine($"Your certificate version is '{certificate.Value.Properties.Version}'.");
    
                Console.Write($"Deleting your certificate from {keyVaultName} ...");
                DeleteCertificateOperation deleteOperation = await client.StartDeleteCertificateAsync(certificateName);
                // You only need to wait for completion if you want to purge or recover the certificate.
                await deleteOperation.WaitForCompletionAsync();
                Console.WriteLine(" done.");
    
                Console.Write($"Purging your certificate from {keyVaultName} ...");
                await client.PurgeDeletedCertificateAsync(certificateName);
                Console.WriteLine(" done.");
            }
        }
    }
    

テストして検証する

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

dotnet build

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

Creating a certificate in mykeyvault called 'myCertificate' ... done.
Retrieving your certificate from mykeyvault.
Your certificate version is '8532359bced24e4bb2525f2d2050738a'.
Deleting your certificate from mykeyvault ... done
Purging your certificate from mykeyvault ... done

次のステップ

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

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