チュートリアル:Python で仮想マシンを使用して Azure Key Vault を使用する

Azure Key Vault は、API キーやデータベース接続文字列などのキー、シークレット、証明書を保護するのに役立ちます。

このチュートリアルでは、Azure リソース用マネージド ID を使用して Azure Key Vault から情報を読み取るよう Python アプリケーションを設定します。 学習内容は次のとおりです。

  • Key Vault を作成します
  • Key Vault にシークレットを格納する
  • Azure Linux 仮想マシンを作成する
  • 仮想マシンに対してマネージド ID を有効にする
  • コンソール アプリケーションが Key Vault のデータを読み取るために必要なアクセス許可を付与する
  • Key Vault からシークレットを取得する

始める前に、Key Vault の基本的な概念を確認してください。

Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。

前提条件

Windows、Mac、Linux:

  • Git
  • このチュートリアルでは、Azure CLI をローカルで実行する必要があります。 Azure CLI バージョン 2.0.4 以降がインストールされている必要があります。 バージョンを確認するには、az --version を実行します。 CLI をインストールまたはアップグレードする必要がある場合は、「Install Azure CLI 2.0 (Azure CLI 2.0 のインストール)」を参照してください。

Azure にログインする

Azure CLI を使用して Azure にログインするには、次のように入力します。

az login

リソース グループとキー コンテナーを作成する

このクイックスタートでは、あらかじめ作成しておいた Azure キー コンテナーを使用します。 キー コンテナーは、Azure CLI のクイックスタートAzure PowerShell のクイックスタート、または Azure portal のクイックスタートの手順に従って作成できます。

また、以下の Azure CLI または Azure PowerShell コマンドを実行するだけでもかまいません。

重要

各キー コンテナーには一意の名前が必要です。 次の例では、<your-unique-keyvault-name> をお使いのキー コンテナーの名前に置き換えてください。

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

キー コンテナーにシークレットを格納する

mySecret という名前で値が Success! のシークレットを作成しましょう。 シークレットとしては、パスワード、SQL 接続文字列、または安全性とアプリケーションから利用できることの両方を維持する必要がある他の情報などがあります。

新しく作成したキー コンテナーにシークレットを追加するには、次のコマンドを使用します。

az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"

仮想マシンの作成

次のいずれかの方法を使用して、myVM という名前の VM を作成します。

Linux Windows
Azure CLI Azure CLI
PowerShell PowerShell
Azure Portal Azure ポータル

Azure CLI を使用して Linux VM を作成するには、az vm create コマンドを使用します。 次の例では、azureuser という名前のユーザー アカウントを追加します。 SSH キーを自動的に生成するために --generate-ssh-keys パラメーターが使用され、キーは既定のキーの場所 ( ~/.ssh) に配置されます。

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys

出力の publicIpAddress の値を記録しておきます。

VM に ID を割り当てる

Azure CLI の az vm identity assign コマンドを使用して、仮想マシンに対するシステム割り当ての ID を作成します。

az vm identity assign --name "myVM" --resource-group "myResourceGroup"

システムによって割り当てられた ID が次のコードに表示されていることにご注意ください。 上記のコマンドの出力は次のようになります。

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

VM ID にアクセス許可を割り当てる

ここで、次のコマンドを実行して、以前に作成した ID アクセス許可をキー コンテナーに割り当てることができます。

az keyvault set-policy --name "<your-unique-keyvault-name>" --object-id "<systemAssignedIdentity>" --secret-permissions get list

VM にログインする

仮想マシンにサインインするには、Linux が実行されている Azure 仮想マシンへの接続とサインインに関するページまたは Windows が実行されている Azure 仮想マシンへの接続とサインインに関するページの手順のようにします。

Linux VM にログインするには、「仮想マシンの作成」ステップで指定した <publicIpAddress> で ssh コマンドを使用します。

ssh azureuser@<PublicIpAddress>

VM に Python ライブラリをインストールする

仮想マシンで、Python スクリプトで使用する 2 つの Python ライブラリ azure-keyvault-secretsazure.identity をインストールします。

たとえば、Linux VM では、pip3 を使用してこれらをインストールできます。

pip3 install azure-keyvault-secrets

pip3 install azure.identity

サンプルの Python スクリプトを作成して編集する

仮想マシンで、sample.py という Python ファイルを作成します。 ファイルを編集して次のコードを追加します。<your-unique-keyvault-name> はお使いのキー コンテナーの名前に置き換えます。

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

key_vault_name = "<your-unique-keyvault-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 '<your-unique-keyvault-name>' is: 'Success!'

リソースをクリーンアップする

必要がなくなったら、仮想マシンとキー コンテナーを削除します。 この操作をすばやく行うには、それらが属しているリソース グループを削除します。

az group delete -g myResourceGroup

次のステップ

Azure Key Vault REST API