クイックスタート: Python 用 Azure Key Vault 証明書クライアント ライブラリ
Python 用 Azure Key Vault 証明書クライアント ライブラリを使ってみます。 以下の手順に従って、パッケージをインストールし、基本タスクのコード例を試してみましょう。 Key Vault を使用して証明書を保存することで、証明書をコードに保存しなくて済むため、アプリのセキュリティが向上します。
API のリファレンスのドキュメント | ライブラリのソース コード | パッケージ (Python Package Index)
前提条件
- Azure サブスクリプション - 無料アカウントを作成します。
- Python 3.7 以上
- Azure CLI
このクイックスタートは、Linux ターミナル ウィンドウで Azure CLI または Azure PowerShell を実行していることを前提としています。
ローカル環境を設定する
このクイックスタートでは、Azure CLI または Azure PowerShell で、Azure Identity ライブラリを使用して、Azure サービスに対するユーザーの認証を行います。 また、開発者は、Visual Studio または Visual Studio Code を使用して自分の呼び出しを認証することもできます。 詳細については、Azure ID クライアント ライブラリを使用したクライアントの認証に関するページを参照してください。
Azure へのサインイン
login
コマンドを実行します。az login
CLI で既定のブラウザーを開くことができる場合、開いたブラウザに Azure サインイン ページが読み込まれます。
それ以外の場合は、 https://aka.ms/devicelogin でブラウザー ページを開き、ターミナルに表示されている認証コードを入力します。
ブラウザーでアカウントの資格情報を使用してサインインします。
パッケージのインストール
ターミナルまたはコマンド プロンプトで、適切なプロジェクト フォルダーを作成したら、「Python 仮想環境を使用する」で説明されているように、Python 仮想環境を作成し、アクティブ化します。
Microsoft Entra ID ライブラリをインストールします:
pip install azure.identity
Key Vault 証明書クライアント ライブラリをインストールします。
pip install azure-keyvault-certificates
リソース グループとキー コンテナーを作成する
リソース グループを作成するには、
az group create
コマンドを使用します。az group create --name myResourceGroup --location eastus
必要に応じて、"eastus" をお近くの場所に変更することができます。
az keyvault create
を使用して、キー コンテナーを作成します。az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
<your-unique-keyvault-name>
を Azure 全体で一意の名前に置き換えます。 通常、個人名または会社名は、その他の数字や識別子と併せて使用します。
KEY_VAULT_NAME 環境変数を設定する
このスクリプトでは、KEY_VAULT_NAME
環境変数に割り当てられた値をキー コンテナーの名前として使います。 そのため、次のコマンドを使ってこの値を設定する必要があります。
export KEY_VAULT_NAME=<your-unique-keyvault-name>
キー コンテナーへのアクセス許可を付与する
ロールベースのアクセス制御 (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)。
サンプル コードを作成する
Python 用 Azure Key Vault 証明書クライアント ライブラリを使用すると、証明書を管理できます。 次のコード サンプルは、クライアントの作成、証明書の設定、証明書の取得、証明書の削除を行う方法を示しています。
このコードを含めた kv_certificates.py という名前のファイルを作成します。
import os
from azure.keyvault.certificates import CertificateClient, CertificatePolicy
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"
credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)
certificateName = input("Input a name for your certificate > ")
print(f"Creating a certificate in {keyVaultName} called '{certificateName}' ...")
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()
print(" done.")
print(f"Retrieving your certificate from {keyVaultName}.")
retrieved_certificate = client.get_certificate(certificateName)
print(f"Certificate with name '{retrieved_certificate.name}' was found'.")
print(f"Deleting your certificate from {keyVaultName} ...")
poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()
print(" done.")
コードの実行
前のセクションのコードが kv_certificates.py という名前のファイルに含まれていることを確認します。 次のコマンドを使用して、コードを実行します。
python kv_certificates.py
- アクセス許可エラーが発生した場合は、
az keyvault set-policy
またはSet-AzKeyVaultAccessPolicy
コマンドを実行したことを確認してください。 - 同じキー名を使用してコードを再実行すると、"(競合) 証明書 <名前> は現在削除されているが、回復可能な状態です" というエラーが生成されることがあります。別のキー名を使用してください。
コードの詳細
クライアントの認証と作成
ほとんどの Azure サービスに対するアプリケーション要求は、認可される必要があります。 Azure Identity クライアント ライブラリによって提供される DefaultAzureCredential クラスを使うことは、コード内の Azure サービスへのパスワードレス接続を実装するための推奨される方法です。 DefaultAzureCredential
は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境) で異なる認証方法をアプリに使用できます。
このクイックスタートでは、DefaultAzureCredential
は Azure CLI にログインしたローカル開発ユーザーの資格情報を使って、キー コンテナーに対して認証されます。 アプリケーションが Azure にデプロイされると、同じDefaultAzureCredential
コードで、App Service、仮想マシン、またはその他のサービスに割り当てられているマネージド ID を自動的に検出して使用できます。 詳細については、マネージド ID の概要に関するページを参照してください。
コードの例では、キー コンテナーの名前は、https://\<your-key-vault-name>.vault.azure.net
という形式で、キー コンテナーの URI に展開されます。
credential = DefaultAzureCredential()
client = CertificateClient(vault_url=KVUri, credential=credential)
証明書の保存
キー コンテナーのクライアント オブジェクトを取得したら、begin_create_certificate メソッドを使用して証明書を作成できます。
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate(certificate_name=certificateName, policy=policy)
certificate = poller.result()
ここでは、証明書に CertificatePolicy.get_default メソッドを使用して取得したポリシーが必要です。
begin_create_certificate
メソッドを呼び出すと、キー コンテナーに対する Azure REST API への非同期呼び出しが生成されます。 この非同期呼び出しにより、ポーラー オブジェクトが返されます。 操作の結果を待機するには、ポーラーの result
メソッドを呼び出します。
Azure では要求を処理するとき、クライアントに提供された資格情報オブジェクトを使用して、呼び出し元の ID (サービス プリンシパル) を認証します。
証明書の取得
証明書を Key Vault から読み取るには、get_certificate メソッドを使用します。
retrieved_certificate = client.get_certificate(certificateName)
また、証明書が設定されたことを確認するには、Azure CLI コマンド az keyvault certificate show または Azure PowerShell コマンドレット Get-AzKeyVaultCertificate を使用します。
証明書の削除
証明書を削除するには、begin_delete_certificate メソッドを使用します。
poller = client.begin_delete_certificate(certificateName)
deleted_certificate = poller.result()
begin_delete_certificate
メソッドは非同期であり、ポーラー オブジェクトを返します。 ポーラーの result
メソッドを呼び出して、その完了を待機します。
証明書が削除されたことを確認するには、Azure CLI コマンド az keyvault certificate show または Azure PowerShell コマンドレット Get-AzKeyVaultCertificate を使用します。
削除されると、証明書は削除されたが回復可能な状態がしばらく維持されます。 コードをもう一度実行する場合は、別の証明書名を使用します。
リソースをクリーンアップする
シークレットとキーも試してみる場合は、この記事で作成した Key Vault を再利用できます。
それ以外の場合は、この記事で作成したリソースが完了したら、次のコマンドを使用して、リソース グループとそれに含まれるすべてのリソースを削除します。
az group delete --resource-group myResourceGroup