Azure Key Vault 幫助你保護金鑰、秘密和憑證,例如 API 金鑰和資料庫連線字串。
在這個教學中,你要設定一個 Node.js 應用程式,透過管理身份來讀取Azure Key Vault Azure資源的資訊。 您將瞭解如何:
- 建立金鑰保存庫
- 將秘密存放在 金鑰保存庫 中
- 建立一個 Azure Linux 虛擬機器
- 啟用虛擬機器的受控識別
- 授予主控台應用程式讀取 金鑰保存庫 資料所需的權限
- 從 金鑰保存庫 取回秘密
開始前,先讀 金鑰保存庫基本概念。
如果你沒有Azure訂閱,請建立一個free帳號。
Prerequisites
針對 Windows、Mac 和 Linux:
登入 Azure
使用 Azure CLI 登入 Azure:
az login
建立資源群組和金鑰保存庫
這個快速入門使用預先建立的 Azure 金鑰庫。 您可以遵循下列快速入門中的步驟來建立金鑰保存庫:
或者,你也可以執行這些 Azure CLI 指令。
Important
每個金鑰保存庫必須有唯一的名稱。 在以下範例中,請用你的金鑰保險庫名稱替換 <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 身分識別指派權限
將 金鑰保存庫 Secrets User 角色授與 VM 的受控識別,使其可存取金鑰保存庫:
az role assignment create --role "Key Vault Secrets User" --assignee "<system-assigned-identity>" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>
登入虛擬機
要登入虛擬機,請依照 Connect 中的指示登入運行 Linux 的 Azure 虛擬機,或是登入執行 Windows 的 Azure 虛擬機。
若要登入 Linux 虛擬機器,請使用 ssh 以及「建立虛擬機器」步驟中的 <public-ip-address>:
ssh azureuser@<public-ip-address>
在 VM 上安裝 Node.js 和 npm 程式庫
在虛擬機上安裝範例腳本使用的兩個 npm 函式庫: @azure/keyvault-secrets 和 @azure/identity。
在 SSH 終端機中安裝 Node.js 和 npm:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \ sudo apt-get install -y nodejs建立應用程式目錄,並初始化 Node.js 套件:
mkdir app && cd app && npm init -y使用
npm安裝 Azure 套件:npm install @azure/keyvault-secrets @azure/identity
建立和編輯 JavaScript 檔案範例
在目錄中的
app虛擬機上,建立一個名為index.js: 的 JavaScript 檔案touch index.js使用 Nano 文字編輯器開啟檔案:
nano index.js將以下程式碼貼入編輯器,並替換
<vault-name>為你的金鑰庫名稱:// index.js const { SecretClient } = require("@azure/keyvault-secrets"); const { DefaultAzureCredential } = require("@azure/identity"); // Your Azure Key Vault name and secret name const keyVaultName = "<vault-name>"; const keyVaultUri = `https://${keyVaultName}.vault.azure.net`; const secretName = "mySecret"; // Authenticate to Azure const credential = new DefaultAzureCredential(); const client = new SecretClient(keyVaultUri, credential); // Get Secret with Azure SDK for JS const getSecret = async (secretName) => { return (await client.getSecret(secretName)).value; } getSecret(secretName).then(secretValue => { console.log(`The value of secret '${secretName}' in '${keyVaultName}' is: '${secretValue}'`); }).catch(err => { console.log(err); })用 Ctrl+X 儲存檔案。
在提示
Save modified buffer?時輸入 y。在提示時
File Name to Write: index.js,按下 Enter 鍵。
執行 Node.js 應用程式範例
執行 index.js。 如果一切都設定正確,應用程式會印出秘密值:
node index.js
The value of secret 'mySecret' in '<vault-name>' is: 'Success!'
清理資源
當你不再需要它們時,刪除虛擬機和金鑰庫。 最快的方法是刪除它們所屬的資源群組:
az group delete -g "myResourceGroup"