共用方式為


教學課程:在 JavaScript 中搭配使用 Azure Key Vault 與虛擬機器

Azure Key Vault 可協助您保護金鑰、祕密和憑證,例如 API 金鑰和資料庫連接字串。

在本教學課程中,您會設定 Node.js 應用程式,以使用 Azure 資源的受控識別從 Azure Key Vault 讀取資訊。 您將瞭解如何:

  • 建立金鑰保存庫
  • 將秘密儲存在 Key Vault 中
  • 建立 Azure Linux 虛擬機器
  • 啟用虛擬機器的受控識別
  • 授與主控台應用程式從 Key Vault 讀取資料所需的權限
  • 從 Key Vault 擷取祕密

在開始之前,請先閱讀 Key Vault 基本概念

如果您沒有 Azure 訂閱,請建立免費帳戶

Prerequisites

若為 Windows、Mac 和 Linux:

  • Git
  • 此教學課程需要您在本機執行 Azure CLI。 您必須安裝 Azure CLI 2.0.4 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級 CLI,請參閱安裝 Azure CLI 2.0

登入 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 的 VM:

Linux Windows
Azure CLI Azure CLI
PowerShell PowerShell
Azure 入口網站 Azure 入口網站

若要使用 Azure CLI 建立 Linux VM,請使用 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

使用 Azure CLI 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 "<system-assigned-identity>" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>

登入 VM

若要登入虛擬機器,請遵循連線和登入執行 Linux 的 Azure 虛擬機器連線和登入執行 Windows 的 Azure 虛擬機器中的指示。

要登入 Linux 虛擬機,你可以使用 ssh 指令,並依 <public-ip-address>建立虛擬機器 步驟中的指示:

ssh azureuser@<public-ip-address>

在 VM 上安裝 Node.js 和 npm 程式庫

在虛擬機器上,安裝我們將在 JavaScript 指令碼中使用的兩個 npm 程式庫:@azure/keyvault-secrets@azure/identity

  1. 在 SSH 終端中,使用下列命令安裝 Node.js 和 npm:

    curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - && \
        sudo apt-get install -y nodejs
    
  2. 建立應用程式目錄,並初始化 Node.js 套件:

    mkdir app && cd app && npm init -y
    
  3. 使用 npm 安裝 Azure 服務封裝:

    npm install @azure/keyvault-secrets @azure/identity
    

建立和編輯 JavaScript 檔案範例

  1. app 目錄中的虛擬機器上,建立名為 index.js 的 JavaScript 檔案。

    touch index.js
    
  2. 使用 Nano 文字編輯器開啟檔案:

    nano index.js
    
  3. 複製以下程式碼,替換 <vault-name> 成你的金鑰保險庫名稱,並貼上到 Nano 編輯器中:

    // 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);
    })
    
  4. 使用 Ctrl + x 儲存檔案。

  5. 當系統詢問 Save modified buffer? 時,請輸入 y

  6. 當系統詢問 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"

後續步驟

Azure 金鑰保存庫 REST API