Azure Key Vault 幫助你保護金鑰、秘密和憑證,例如 API 金鑰和資料庫連線字串。
在本教學中,你將設定 Python 應用程式,以使用 Azure 資源的受控識別來讀取 Azure Key Vault 中的資訊。 您將瞭解如何:
- 建立金鑰保存庫
- 將秘密存放在 金鑰保存庫 中
- 建立一個 Azure Linux 虛擬機器
- 啟用虛擬機器的受控識別
- 授予主控台應用程式讀取 金鑰保存庫 資料所需的權限
- 從 金鑰保存庫 取回秘密
開始前,先讀 金鑰保存庫基本概念。
如果你沒有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 的虛擬機:
| Linux | Windows |
|---|---|
| Azure CLI | Azure CLI |
| PowerShell | PowerShell |
| Azure portal | Azure portal |
要使用 Azure CLI 建立 Linux 虛擬機,請使用 az vm create 指令。 下列範例會新增名為 azureuser 的使用者帳戶。
--generate-ssh-keys 參數用來自動產生 SSH 金鑰,並將它放在預設金鑰位置 (~/.ssh)。
az vm create \
--resource-group <resource-group> \
--name myVM \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
請注意輸出中的 publicIpAddress 值。
將身分識別指派給 VM
使用 az vm identity assign 指令為虛擬機建立系統指派的管理身份:
az vm identity assign --name "myVM" --resource-group "<resource-group>"
請注意輸出中系統指派的身份:
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
對 VM 身分識別指派權限
要透過
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)。
登入虛擬機
要登入虛擬機,請依照 Connect 中的指示登入運行 Linux 的 Azure 虛擬機,或是登入執行 Windows 的 Azure 虛擬機。
若要登入 Linux 虛擬機器,請使用 ssh 以及「建立虛擬機器」步驟中的 <public-ip-address>:
ssh azureuser@<public-ip-address>
在虛擬機上安裝 Python 函式庫
在虛擬機上,安裝範例腳本使用的兩個 Python 函式庫:azure-keyvault-secrets和 azure-identity。
在 Linux 虛擬機器上,使用 pip3 安裝它們:
pip3 install azure-keyvault-secrets azure-identity
建立並編輯範例 Python 腳本
在虛擬機上建立一個名為 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!'
清理資源
當你不再需要它們時,刪除虛擬機和金鑰庫。 最快的方法是刪除它們所屬的資源群組:
az group delete -g "myResourceGroup"