Snabbstart: Hemligt klientbibliotek för Azure Key Vault för JavaScript
Kom igång med Det hemliga Klientbiblioteket för Azure Key Vault för JavaScript. Azure Key Vault är en molntjänst som tillhandahåller ett säkert arkiv för hemligheter. Du kan på ett säkert sätt lagra nycklar, lösenord, certifikat och andra hemligheter. Du kan skapa och hantera Azure-nyckelvalv via Azure Portal. I den här snabbstarten lär du dig hur du skapar, hämtar och tar bort hemligheter från ett Azure-nyckelvalv med hjälp av JavaScript-klientbiblioteket.
Key Vault-klientbiblioteksresurser:
API-referensdokumentationEns källkodspaket | för bibliotek (npm) |
Mer information om Key Vault och hemligheter finns i:
Förutsättningar
- En Azure-prenumeration – skapa en kostnadsfritt.
- Aktuell Node.js LTS.
- Azure CLI
Förutsättningar
- En Azure-prenumeration – skapa en kostnadsfritt.
- Aktuell Node.js LTS.
- TypeScript 5+
- Azure CLI.
Den här snabbstarten förutsätter att du kör Azure CLI.
Logga in på Azure
Kör kommandot
login
.az login
Om CLI kan öppna din standardwebbläsare kommer den att göra det och läsa in en Azure-inloggningssida.
Annars öppnar du en webbläsarsida på https://aka.ms/devicelogin och anger auktoriseringskoden som visas i terminalen.
Logga in med dina autentiseringsuppgifter för kontot i webbläsaren.
Skapa en resursgrupp och ett nyckelvalv
az group create
Använd kommandot för att skapa en resursgrupp:az group create --name myResourceGroup --location eastus
Du kan ändra "eastus" till en plats närmare dig, om du vill.
Använd
az keyvault create
för att skapa nyckelvalvet:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
Ersätt
<your-unique-keyvault-name>
med ett namn som är unikt i hela Azure. Du använder vanligtvis ditt personliga namn eller företagsnamn tillsammans med andra nummer och identifierare.
Bevilja åtkomst till ditt nyckelvalv
Om du vill få behörigheter till ditt nyckelvalv via rollbaserad åtkomstkontroll (RBAC) tilldelar du en roll till ditt UPN (User Principal Name) med hjälp av Azure CLI-kommandot az role assignment create.
az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Ersätt <upn>, <subscription-id>, <resource-group-name> och <your-unique-keyvault-name> med dina faktiska värden. Ditt UPN är vanligtvis i formatet för en e-postadress (t.ex. username@domain.com).
Skapa ett nytt Node.js program
Skapa ett Node.js program som använder ditt nyckelvalv.
I en terminal skapar du en mapp med namnet
key-vault-node-app
och ändrar till den mappen:mkdir key-vault-node-app && cd key-vault-node-app
Initiera Node.js projektet:
npm init -y
Installera Key Vault-paket
Installera Klientbiblioteket för Azure Key Vault-hemligheter med hjälp av terminalen, @azure/keyvault-secrets för Node.js.
npm install @azure/keyvault-secrets
Installera Azure Identity-klientbiblioteket @azure /identitetspaketet för att autentisera till ett Nyckelvalv.
npm install @azure/identity
Bevilja åtkomst till ditt nyckelvalv
Om du vill få behörigheter till ditt nyckelvalv via rollbaserad åtkomstkontroll (RBAC) tilldelar du en roll till ditt UPN (User Principal Name) med hjälp av Azure CLI-kommandot az role assignment create.
az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Ersätt <upn>, <subscription-id>, <resource-group-name> och <your-unique-keyvault-name> med dina faktiska värden. Ditt UPN är vanligtvis i formatet för en e-postadress (t.ex. username@domain.com).
Ange miljövariabler
Det här programmet använder key vault-slutpunkten som en miljövariabel med namnet KEY_VAULT_URL
.
set KEY_VAULT_URL=<your-key-vault-endpoint>
Autentisera och skapa en klient
Programbegäranden till de flesta Azure-tjänster måste auktoriseras. Att använda metoden DefaultAzureCredential som tillhandahålls av Azure Identity-klientbiblioteket är den rekommenderade metoden för att implementera lösenordslösa anslutningar till Azure-tjänster i koden. DefaultAzureCredential
stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod.
I den här snabbstarten DefaultAzureCredential
autentiserar du till nyckelvalvet med autentiseringsuppgifterna för den lokala utvecklingsanvändare som är inloggad i Azure CLI. När programmet distribueras till Azure kan samma DefaultAzureCredential
kod automatiskt identifiera och använda en hanterad identitet som har tilldelats till en App Service, virtuell dator eller andra tjänster. Mer information finns i Översikt över hanterad identitet.
I den här koden används slutpunkten för ditt nyckelvalv för att skapa key vault-klienten. Slutpunktsformatet ser ut som https://<your-key-vault-name>.vault.azure.net
men kan ändras för nationella moln. Mer information om autentisering till nyckelvalv finns i Utvecklarguide.
Kodexempel
Kodexemplen nedan visar hur du skapar en klient, anger en hemlighet, hämtar en hemlighet och tar bort en hemlighet.
Den här koden använder följande Key Vault Secret-klasser och -metoder:
Konfigurera appramverket
Skapa en ny textfil och klistra in följande kod i filen index.js .
const { SecretClient } = require("@azure/keyvault-secrets"); const { DefaultAzureCredential } = require("@azure/identity"); async function main() { // If you're using MSI, DefaultAzureCredential should "just work". // Otherwise, DefaultAzureCredential expects the following three environment variables: // - AZURE_TENANT_ID: The tenant ID in Azure Active Directory // - AZURE_CLIENT_ID: The application (client) ID registered in the AAD tenant // - AZURE_CLIENT_SECRET: The client secret for the registered application const credential = new DefaultAzureCredential(); const keyVaultUrl = process.env["KEY_VAULT_URL"]; if(!keyVaultUrl) throw new Error("KEY_VAULT_URL is empty"); const client = new SecretClient(keyVaultUrl, credential); // Create a secret // The secret can be a string of any kind. For example, // a multiline text block such as an RSA private key with newline characters, // or a stringified JSON object, like `JSON.stringify({ mySecret: 'MySecretValue'})`. const uniqueString = new Date().getTime(); const secretName = `secret${uniqueString}`; const result = await client.setSecret(secretName, "MySecretValue"); console.log("result: ", result); // Read the secret we created const secret = await client.getSecret(secretName); console.log("secret: ", secret); // Update the secret with different attributes const updatedSecret = await client.updateSecretProperties(secretName, result.properties.version, { enabled: false }); console.log("updated secret: ", updatedSecret); // Delete the secret immediately without ability to restore or purge. await client.beginDeleteSecret(secretName); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
Köra exempelprogrammet
Kör appen:
node index.js
Metoderna create and get returnerar ett fullständigt JSON-objekt för hemligheten:
{ "value": "MySecretValue", "name": "secret1637692472606", "properties": { "createdOn": "2021-11-23T18:34:33.000Z", "updatedOn": "2021-11-23T18:34:33.000Z", "enabled": true, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "id": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net/secrets/secret1637692472606/YOUR-VERSION", "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net", "version": "YOUR-VERSION", "name": "secret1637692472606" } }
Uppdateringsmetoden returnerar egenskapernas namn/värden-par:
"createdOn": "2021-11-23T18:34:33.000Z", "updatedOn": "2021-11-23T18:34:33.000Z", "enabled": true, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "id": "https: //YOUR-KEYVAULT-ENDPOINT/secrets/secret1637692472606/YOUR-VERSION", "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT", "version": "YOUR-VERSION", "name": "secret1637692472606"
Skapa en ny textfil och klistra in följande kod i filen index.ts .
import { SecretClient, KeyVaultSecret, SecretProperties, } from "@azure/keyvault-secrets"; import { DefaultAzureCredential } from "@azure/identity"; import "dotenv/config"; // Passwordless credential const credential = new DefaultAzureCredential(); // Get Key Vault name from environment variables // such as `https://${keyVaultName}.vault.azure.net` const keyVaultUrl = process.env.KEY_VAULT_URL; if (!keyVaultUrl) throw new Error("KEY_VAULT_URL is empty"); function printSecret(secret: KeyVaultSecret): void { const { name, value, properties } = secret; const { enabled, expiresOn, createdOn } = properties; console.log("Secret: ", { name, value, enabled, expiresOn, createdOn }); } function printSecretProperties(secret: SecretProperties): void { const { name, enabled, expiresOn, createdOn } = secret; console.log("Secret: ", { name, enabled, expiresOn, createdOn }); } async function main(): Promise<void> { // Create a new SecretClient const client = new SecretClient(keyVaultUrl, credential); // Create a unique secret name const uniqueString = new Date().getTime().toString(); const secretName = `secret${uniqueString}`; // Create a secret const createSecretResult = await client.setSecret( secretName, "MySecretValue" ); printSecret(createSecretResult); // Get the secret by name const getSecretResult = await client.getSecret(secretName); printSecret(getSecretResult); // Update properties const updatedSecret = await client.updateSecretProperties( secretName, getSecretResult.properties.version, { enabled: false, } ); printSecretProperties(updatedSecret); // Delete secret (without immediate purge) const deletePoller = await client.beginDeleteSecret(secretName); await deletePoller.pollUntilDone(); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
Köra exempelprogrammet
Skapa TypeScript-appen:
tsc
Kör appen:
node index.js
Metoderna create and get returnerar ett fullständigt JSON-objekt för hemligheten:
{ "value": "MySecretValue", "name": "secret1637692472606", "properties": { "createdOn": "2021-11-23T18:34:33.000Z", "updatedOn": "2021-11-23T18:34:33.000Z", "enabled": true, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "id": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net/secrets/secret1637692472606/YOUR-VERSION", "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net", "version": "YOUR-VERSION", "name": "secret1637692472606" } }
Uppdateringsmetoden returnerar egenskapernas namn/värden-par:
"createdOn": "2021-11-23T18:34:33.000Z", "updatedOn": "2021-11-23T18:34:33.000Z", "enabled": true, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "id": "https: //YOUR-KEYVAULT-ENDPOINT/secrets/secret1637692472606/YOUR-VERSION", "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT", "version": "YOUR-VERSION", "name": "secret1637692472606"
Integrera med App Configuration
Azure SDK tillhandahåller en hjälpmetod, parseKeyVaultSecretIdentifier, för att parsa det angivna nyckelvalvshemlighets-ID:t. Detta är nödvändigt om du använder appkonfigurationsreferenser till Key Vault. Appkonfiguration lagrar Nyckelvalvets hemliga ID. Du behöver metoden parseKeyVaultSecretIdentifier för att parsa det ID:t för att hämta det hemliga namnet. När du har det hemliga namnet kan du hämta det aktuella hemliga värdet med hjälp av kod från den här snabbstarten.
Nästa steg
I den här snabbstarten skapade du ett nyckelvalv, lagrade en hemlighet och hämtade den hemligheten. Om du vill veta mer om Key Vault och hur du integrerar det med dina program fortsätter du till artiklarna nedan.
- Läs en översikt över Azure Key Vault
- Läs en översikt över Azure Key Vault-hemligheter
- Skydda åtkomst till ett nyckelvalv
- Se utvecklarguiden för Azure Key Vault
- Granska säkerhetsöversikten för Key Vault