Azure Key Vaultは、キー、シークレット、および API キーやデータベース接続文字列などの証明書を保護するのに役立ちます。
このチュートリアルでは、Azure リソースのマネージド ID を使用してAzure Key Vaultから情報を読み取るPython アプリケーションを設定します。 次の方法を学びます:
- キー保管庫を作成する
- シークレットをKey Vaultに格納する
- Azure Linux 仮想マシンを作成する
- 仮想マシンに対してマネージド ID を有効にする
- コンソール アプリケーションが Key Vault からデータを読み取るために必要なアクセス許可を付与する
- Key Vaultからシークレットを取得する
開始する前に、Key Vault基本的な概念を参照してください。
Azure サブスクリプションをお持ちでない場合は、free アカウントを作成します。
[前提条件]
Windows、Mac、Linux の場合:
Azure にサインインする
Azure CLI を使用して Azure にサインインします。
az login
リソース グループとキー コンテナーを作成する
このクイック スタートでは、事前に作成されたAzureキーボールトを使用します。 次のクイックスタート内の手順に従って、キー コンテナーを作成できます。
または、これらのAzure CLIまたはAzure PowerShellコマンドを実行することもできます。
重要
各キー コンテナーには一意の名前が必要です。 次の例では、 <vault-name> をキー コンテナーの名前に置き換えます。
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true
キー コンテナーにシークレットを格納する
mySecret という名前で値が Success! のシークレットを作成しましょう。 シークレットは、パスワード、SQL 接続文字列、またはアプリケーションでセキュリティで保護され、使用できるようにするために必要なその他の情報です。
新しく作成したキー コンテナーにシークレットを追加するには、次のコマンドを使用します。
az keyvault secret set --vault-name "<vault-name>" --name "mySecret" --value "Success!"
仮想マシンを作成する
次のいずれかの方法を使用して 、myVM という名前の VM を作成します。
| Linux | Windows |
|---|---|
| Azure CLI | Azure CLI |
| PowerShell | PowerShell |
| Azure Portal | Azure Portal |
Azure CLIを使用して Linux VM を作成するには、az vm create コマンドを使用します。 次の例では、azureuser という名前のユーザー アカウントを追加します。 SSH キーを自動的に生成するために --generate-ssh-keys パラメーターが使用され、キーは既定のキーの場所 ( ~/.ssh) に配置されます。
az vm create \
--resource-group <resource-group> \
--name myVM \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
出力の publicIpAddress の値を記録しておきます。
VM に ID を割り当てる
az vm identity assign コマンドを使用して、VM のシステム 割り当てマネージド ID を 作成します。
az vm identity assign --name "myVM" --resource-group "<resource-group>"
出力内のシステム割り当て ID をメモします。
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
VM ID にアクセス許可を割り当てる
Role-Based Access Control (RBAC) を使用してキー コンテナーへのアクセス許可を取得するには、Azure CLI コマンド az ロールの割り当てを作成を使用して、ロールを "ユーザー プリンシパル名" (UPN) に割り当てます。
az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
<upn>、<subscription-id>、および<vault-name>を実際の値に置き換えます。 別のリソース グループ名を使用した場合は、"myResourceGroup" も置き換えます。 UPN は一般的に、メール アドレスの形式を取ります (例: username@domain.com)。
VM にサインインする
VM にサインインするには、Linux を実行している Azure 仮想マシンに接続してサインインする、または Windows を実行している Azure 仮想マシンに接続してサインインする の手順に従ってください。
Linux VM にサインインするには、[ssh] ステップの<public-ip-address>でを使用します。
ssh azureuser@<public-ip-address>
PYTHON ライブラリを VM にインストールする
VM に、サンプル スクリプトで使用される 2 つのPython ライブラリ (azure-keyvault-secretsとazure-identity) をインストールします。
Linux VM で、 pip3を使用してインストールします。
pip3 install azure-keyvault-secrets azure-identity
サンプル Python スクリプトを作成して編集する
VM で、sample.pyという名前のPython ファイルを作成します。 次のコードをファイルに貼り付け、 <vault-name> をキー コンテナー名に置き換えます。
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
key_vault_name = "<vault-name>"
key_vault_uri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "mySecret"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=key_vault_uri, credential=credential)
retrieved_secret = client.get_secret(secret_name)
print(f"The value of secret '{secret_name}' in '{key_vault_name}' is: '{retrieved_secret.value}'")
サンプル Python アプリを実行する
sample.py を実行します。 すべてが正しく構成されている場合、アプリはシークレット値を出力します。
python3 sample.py
The value of secret 'mySecret' in '<vault-name>' is: 'Success!'
リソースをクリーンアップする
不要になったら、VM とキー コンテナーを削除します。 最も高速な方法は、所属するリソース グループを削除することです。
az group delete -g "myResourceGroup"