Azure Key Vault は、API キーやデータベース接続文字列などのキー、シークレット、証明書を保護するのに役立ちます。
このチュートリアルでは、Azure リソース用マネージド ID を使用して Azure Key Vault から情報を読み取るよう Python アプリケーションを設定します。 次の方法を学びます:
- キー保管庫を作成する
- 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 Key Vault を使用します。 次のクイックスタート内の手順に従って、キー コンテナーを作成できます。
別の方法として、これらの 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" --enable-rbac-authorization
キー コンテナーにシークレットを格納する
mySecret という名前で値が Success! のシークレットを作成しましょう。 シークレットとしては、パスワード、SQL 接続文字列、または安全性とアプリケーションから利用できることの両方を維持する必要がある他の情報などがあります。
新しく作成したキー コンテナーにシークレットを追加するには、次のコマンドを使用します。
az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"
仮想マシンを作成する
次のいずれかの方法を使用して、myVM という名前の VM を作成します。
Linux | ウィンドウズ |
---|---|
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 にアクセス許可を割り当てる
ロールベースのアクセス制御 (RBAC) を使用してキー コンテナーへのアクセス許可を取得するには、Azure CLI コマンドの az role assignment create を使用して、"ユーザー プリンシパル名" (UPN) にロールを割り当てます。
az role assignment create --role "Key Vault Secrets User" --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)。
VM にログインする
仮想マシンにサインインするには、Linux が実行されている Azure 仮想マシンへの接続とサインインに関するページまたは Windows が実行されている Azure 仮想マシンへの接続とサインインに関するページの手順のようにします。
Linux VM にログインするには、「<」ステップで指定した >publicIpAddress で ssh コマンドを使用します。
ssh azureuser@<PublicIpAddress>
VM に Python ライブラリをインストールする
仮想マシンで、Python スクリプトで使用する 2 つの Python ライブラリ azure-keyvault-secrets
と azure.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