クイック スタート: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-keys
リソース グループとキー コンテナーを作成する
リソース グループを作成するには、
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 Crypto 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_keys.py という名前のファイルを作成します。
import os
from azure.keyvault.keys import KeyClient
from azure.identity import DefaultAzureCredential
keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = "https://" + keyVaultName + ".vault.azure.net"
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
keyName = input("Input a name for your key > ")
print(f"Creating a key in {keyVaultName} called '{keyName}' ...")
rsa_key = client.create_rsa_key(keyName, size=2048)
print(" done.")
print(f"Retrieving your key from {keyVaultName}.")
retrieved_key = client.get_key(keyName)
print(f"Key with name '{retrieved_key.name}' was found.")
print(f"Deleting your key from {keyVaultName} ...")
poller = client.begin_delete_key(keyName)
deleted_key = poller.result()
print(" done.")
コードの実行
前のセクションのコードが kv_keys.py という名前のファイルに含まれていることを確認します。 次のコマンドを使用して、コードを実行します。
python kv_keys.py
同じキー名を使用してコードを再実行すると、"(競合) キー <名前> は現在削除されているが、回復可能な状態です" というエラーが生成されることがあります。別のキー名を使用してください。
コードの詳細
クライアントの認証と作成
ほとんどの Azure サービスに対するアプリケーション要求は、認可される必要があります。 Azure Identity クライアント ライブラリによって提供される DefaultAzureCredential クラスを使うことは、コード内の Azure サービスへのパスワードレス接続を実装するための推奨される方法です。 DefaultAzureCredential
は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境) で異なる認証方法をアプリに使用できます。
このクイックスタートでは、DefaultAzureCredential
は Azure CLI にログインしたローカル開発ユーザーの資格情報を使って、キー コンテナーに対して認証されます。 アプリケーションが Azure にデプロイされると、同じDefaultAzureCredential
コードで、App Service、仮想マシン、またはその他のサービスに割り当てられているマネージド ID を自動的に検出して使用できます。 詳細については、マネージド ID の概要に関するページを参照してください。
このコード例では、キー コンテナーの名前は、KVUri
変数の値を使用して、"https://<キー コンテナーの名前>.vault.azure.net" という形式で展開されます。
credential = DefaultAzureCredential()
client = KeyClient(vault_url=KVUri, credential=credential)
キーの保存
キー コンテナーのクライアント オブジェクトを取得したら、create_rsa_key メソッドを使用してキーを格納することができます。
rsa_key = client.create_rsa_key(keyName, size=2048)
create_key または create_ec_key を使用することもできます。
create
メソッドを呼び出すと、キー コンテナーに対する Azure REST API への呼び出しが生成されます。
Azure ではこの要求を処理するとき、クライアントに指定した資格情報オブジェクトを使用して、呼び出し元の ID (サービス プリンシパル) を認証します。
キーの取得
Key Vault からキーを読み取るには、get_key メソッドを使用します。
retrieved_key = client.get_key(keyName)
また、キーが設定されたことを確認するには、Azure CLI コマンド az keyvault key show または Azure PowerShell コマンドレット Get-AzKeyVaultKey を使用します。
キーの削除
キーを削除するには、begin_delete_key メソッドを使用します。
poller = client.begin_delete_key(keyName)
deleted_key = poller.result()
begin_delete_key
メソッドは非同期であり、ポーラー オブジェクトを返します。 ポーラーの result
メソッドを呼び出して、その完了を待機します。
キーが削除されたことを確認するには、Azure CLI コマンド az keyvault key show または Azure PowerShell コマンドレット Get-AzKeyVaultKey を使用します。
削除されると、キーは削除されたが回復可能な状態がしばらく維持されます。 コードをもう一度実行する場合は、別のキー名を使用します。
リソースをクリーンアップする
証明書とシークレットも試してみる場合は、この記事で作成した Key Vault を再利用できます。
それ以外の場合は、この記事で作成したリソースが完了したら、次のコマンドを使用して、リソース グループとそれに含まれるすべてのリソースを削除します。
az group delete --resource-group myResourceGroup