Quickstart: Azure Key Vault-sleutelclientbibliotheek voor JavaScript
Ga aan de slag met de Azure Key Vault-clientbibliotheek voor sleutels voor JavaScript. Azure Key Vault is een cloudservice die werkt als een beveiligd archief voor cryptografische sleutels. U kunt veilig sleutels, wachtwoorden, certificaten en andere geheime informatie opslaan. Azure-sleutelkluizen kunnen worden gemaakt en beheerd via Azure Portal. In deze quickstart leert u hoe u sleutels maakt, ophaalt en verwijdert uit een Azure-sleutelkluis met behulp van de Clientbibliotheek voor JavaScript-sleutels.
Resources voor de Key Vault-clientbibliotheek:
API-referentiedocumentatie | Bibliotheekbroncode | Package (npm)
Zie voor meer informatie over Key Vault en sleutels:
Vereisten
- Een Azure-abonnement (u kunt een gratis abonnement maken).
- Huidige Node.js LTS.
- Azure-CLI
- Een bestaande sleutelkluis: u kunt er een maken met:
- Een Azure-abonnement (u kunt een gratis abonnement maken).
- Huidige Node.js LTS.
- TypeScript 5+
- Azure CLI.
- Een bestaande sleutelkluis: u kunt er een maken met:
In deze quickstart wordt ervan uitgegaan dat u Azure CLI uitvoert.
Aanmelden bij Azure
Voer de opdracht
login
uit.az login
Als de CLI uw standaardbrowser kan openen, gebeurt dat ook en wordt er een Azure-aanmeldingspagina geladen.
Als dat niet het geval is, opent u een browserpagina op https://aka.ms/devicelogin en voert u de autorisatiecode in die wordt weergegeven in de terminal.
Meldt u zich in de browser aan met uw accountreferenties.
Een nieuwe Node.js-toepassing maken
Maak een Node.js-toepassing die gebruikmaakt van uw sleutelkluis.
Maak in een terminal een map met de naam
key-vault-node-app
en ga naar die map:mkdir key-vault-node-app && cd key-vault-node-app
Initialiseer het Node.js project:
npm init -y
Key Vault-pakketten installeren
Installeer met behulp van de terminal de Azure Key Vault-clientbibliotheek voor geheimen, @azure/keyvault-sleutels voor Node.js.
npm install @azure/keyvault-keys
Installeer de Azure Identity-clientbibliotheek @azure /identiteitspakket om te verifiëren bij een Key Vault.
npm install @azure/identity
Toegang verlenen tot uw sleutelkluis
Als u machtigingen wilt verkrijgen voor uw sleutelkluis via op rollen gebaseerd toegangsbeheer (RBAC), wijst u een rol toe aan uw UPN (User Principal Name) met behulp van de Azure CLI-opdracht az role assignment create.
az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Vervang <upn>, <subscription-id>, <resource-group-name> en <your-unique-keyvault-name> door uw werkelijke waarden. Uw UPN heeft doorgaans de indeling van een e-mailadres (bijvoorbeeld username@domain.com).
Omgevingsvariabelen instellen
Deze toepassing gebruikt key vault-eindpunt als een omgevingsvariabele met de naam KEY_VAULT_URL
.
set KEY_VAULT_URL=<your-key-vault-endpoint>
Een client verifiëren en maken
Toepassingsaanvragen voor de meeste Azure-services moeten worden geautoriseerd. Het gebruik van de DefaultAzureCredential-methode die wordt geleverd door de Azure Identity-clientbibliotheek is de aanbevolen methode voor het implementeren van verbindingen zonder wachtwoord met Azure-services in uw code. DefaultAzureCredential
ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (lokaal versus productie) zonder omgevingsspecifieke code te implementeren.
In deze quickstart DefaultAzureCredential
verifieert u zich bij de sleutelkluis met behulp van de referenties van de lokale ontwikkelgebruiker die is aangemeld bij de Azure CLI. Wanneer de toepassing in Azure wordt geïmplementeerd, kan dezelfde DefaultAzureCredential
code automatisch een beheerde identiteit detecteren en gebruiken die is toegewezen aan een App Service, virtuele machine of andere services. Zie Overzicht van beheerde identiteiten voor meer informatie.
In deze code wordt het eindpunt van uw sleutelkluis gebruikt om de sleutelkluisclient te maken. De eindpuntindeling ziet eruit, https://<your-key-vault-name>.vault.azure.net
maar kan veranderen voor onafhankelijke clouds. Zie Gids voor ontwikkelaars voor meer informatie over het verifiëren van een sleutelkluis.
Voorbeeld van code
In de onderstaande codevoorbeelden ziet u hoe u een client maakt, een geheim instelt, een geheim ophaalt en een geheim verwijdert.
Deze code maakt gebruik van de volgende Key Vault-geheime klassen en -methoden:
Stel het app-framework in
Maak een nieuw tekstbestand en plak de volgende code in het bestand index.js .
const { KeyClient } = require("@azure/keyvault-keys"); const { DefaultAzureCredential } = require("@azure/identity"); async function main() { // 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 KeyClient(keyVaultUrl, credential); const uniqueString = Date.now(); const keyName = `sample-key-${uniqueString}`; const ecKeyName = `sample-ec-key-${uniqueString}`; const rsaKeyName = `sample-rsa-key-${uniqueString}`; // Create key using the general method const result = await client.createKey(keyName, "EC"); console.log("key: ", result); // Create key using specialized key creation methods const ecResult = await client.createEcKey(ecKeyName, { curve: "P-256" }); const rsaResult = await client.createRsaKey(rsaKeyName, { keySize: 2048 }); console.log("Elliptic curve key: ", ecResult); console.log("RSA Key: ", rsaResult); // Get a specific key const key = await client.getKey(keyName); console.log("key: ", key); // Or list the keys we have for await (const keyProperties of client.listPropertiesOfKeys()) { const key = await client.getKey(keyProperties.name); console.log("key: ", key); } // Update the key const updatedKey = await client.updateKeyProperties(keyName, result.properties.version, { enabled: false }); console.log("updated key: ", updatedKey); // Delete the key - the key is soft-deleted but not yet purged const deletePoller = await client.beginDeleteKey(keyName); await deletePoller.pollUntilDone(); const deletedKey = await client.getDeletedKey(keyName); console.log("deleted key: ", deletedKey); // Purge the key - the key is permanently deleted // This operation could take some time to complete console.time("purge a single key"); await client.purgeDeletedKey(keyName); console.timeEnd("purge a single key"); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
De voorbeeldtoepassing uitvoeren
De app uitvoeren:
node index.js
De methoden maken en ophalen retourneren een volledig JSON-object voor de sleutel:
"key": { "key": { "kid": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION", "kty": "YOUR-KEY-TYPE", "keyOps": [ ARRAY-OF-VALID-OPERATIONS ], ... other properties based on key type }, "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION", "name": "YOUR-KEY-NAME", "keyOperations": [ ARRAY-OF-VALID-OPERATIONS ], "keyType": "YOUR-KEY-TYPE", "properties": { "tags": undefined, "enabled": true, "notBefore": undefined, "expiresOn": undefined, "createdOn": 2021-11-29T18:29:11.000Z, "updatedOn": 2021-11-29T18:29:11.000Z, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "exportable": undefined, "releasePolicy": undefined, "vaultUrl": "https://YOUR-KEY-VAULT-ENDPOINT", "version": "YOUR-KEY-VERSION", "name": "YOUR-KEY-VAULT-NAME", "managed": undefined, "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION" } }
Maak een nieuw tekstbestand en plak de volgende code in het index.ts-bestand .
import { KeyClient, KeyVaultKey, KeyProperties, DeletedKey, } from "@azure/keyvault-keys"; import { DefaultAzureCredential } from "@azure/identity"; import "dotenv/config"; 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 printKey(keyVaultKey: KeyVaultKey): void { const { name, key, id, keyType, keyOperations, properties } = keyVaultKey; console.log("Key: ", { name, key, id, keyType }); const { vaultUrl, version, enabled, expiresOn }: KeyProperties = properties; console.log("Key Properties: ", { vaultUrl, version, enabled, expiresOn }); console.log("Key Operations: ", keyOperations.join(", ")); } async function main(): Promise<void> { // Create a new KeyClient const client = new KeyClient(keyVaultUrl, credential); // Create unique key names const uniqueString = Date.now().toString(); const keyName = `sample-key-${uniqueString}`; const ecKeyName = `sample-ec-key-${uniqueString}`; const rsaKeyName = `sample-rsa-key-${uniqueString}`; // Create a EC key const ecKey = await client.createKey(keyName, "EC"); printKey(ecKey); // Elliptic curve key const ec256Key = await client.createEcKey(ecKeyName, { curve: "P-256", }); printKey(ec256Key); // RSA key const rsa2048Key = await client.createRsaKey(rsaKeyName, { keySize: 2048, }); printKey(rsa2048Key); // Get a key const key = await client.getKey(keyName); printKey(key); // Get properties of all keys for await (const keyProperties of client.listPropertiesOfKeys()) { const iteratedKey = await client.getKey(keyProperties.name); printKey(iteratedKey); } // Update key properties - disable key const updatedKey = await client.updateKeyProperties( keyName, ecKey.properties.version, { enabled: false, } ); printKey(updatedKey); // Delete key (without immediate purge) const deletePoller = await client.beginDeleteKey(keyName); await deletePoller.pollUntilDone(); // Get a deleted key const deletedKey = await client.getDeletedKey(keyName); console.log("deleted key: ", deletedKey.name); // Purge a deleted key console.time("purge a single key"); await client.purgeDeletedKey(keyName); console.timeEnd("purge a single key"); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
De voorbeeldtoepassing uitvoeren
Bouw de TypeScript-app:
tsc
De app uitvoeren:
node index.js
De methoden maken en ophalen retourneren een volledig JSON-object voor de sleutel:
"key": { "key": { "kid": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION", "kty": "YOUR-KEY-TYPE", "keyOps": [ ARRAY-OF-VALID-OPERATIONS ], ... other properties based on key type }, "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION", "name": "YOUR-KEY-NAME", "keyOperations": [ ARRAY-OF-VALID-OPERATIONS ], "keyType": "YOUR-KEY-TYPE", "properties": { "tags": undefined, "enabled": true, "notBefore": undefined, "expiresOn": undefined, "createdOn": 2021-11-29T18:29:11.000Z, "updatedOn": 2021-11-29T18:29:11.000Z, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "exportable": undefined, "releasePolicy": undefined, "vaultUrl": "https://YOUR-KEY-VAULT-ENDPOINT", "version": "YOUR-KEY-VERSION", "name": "YOUR-KEY-VAULT-NAME", "managed": undefined, "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION" } }
Integreren met App Configuration
De Azure SDK biedt een helpermethode, parseKeyVaultKeyIdentifier, om de opgegeven Key Vault-sleutel-id te parseren. Dit is nodig als u App Configuration-verwijzingen naar Key Vault gebruikt. App-configuratie slaat de Key Vault-sleutel-id op. U hebt de methode parseKeyVaultKeyIdentifier nodig om die id te parseren om de sleutelnaam op te halen. Zodra u de sleutelnaam hebt, kunt u de huidige sleutelwaarde ophalen met behulp van code uit deze quickstart.
Volgende stappen
In deze quickstart hebt u een sleutelkluis gemaakt, een sleutel opgeslagen en die sleutel opgehaald. Ga verder met deze artikelen voor meer informatie over Key Vault en hoe u deze integreert met uw toepassingen.
- Lees een Overzicht van Azure Key Vault
- Lees een Overzicht van Azure Key Vault-sleutels
- Instructies voor veilige toegang tot een sleutelkluis
- Zie de Gids voor Azure Key Vault-ontwikkelaars
- Raadpleeg het Overzicht voor Key Vault-beveiliging