Rychlý start: Klientská knihovna tajných klíčů služby Azure Key Vault pro JavaScript
Začínáme s tajnou klientskou knihovnou služby Azure Key Vault pro JavaScript Azure Key Vault je cloudová služba, která poskytuje zabezpečené úložiště tajných kódů. Můžete bezpečně ukládat klíče, hesla, certifikáty a další tajné klíče. Trezory klíčů Azure můžete vytvářet a spravovat přes web Azure Portal. V tomto rychlém startu se naučíte vytvářet, načítat a odstraňovat tajné kódy z trezoru klíčů Azure pomocí klientské knihovny JavaScriptu.
Prostředky klientské knihovny služby Key Vault:
Referenční dokumentace k | rozhraní API – Balíček zdrojového kódu | knihovny (npm)
Další informace o službě Key Vault a tajných kódech najdete tady:
Požadavky
- Předplatné Azure – vytvořte si ho zdarma.
- Aktuální Node.js LTS.
- Azure CLI
Požadavky
- Předplatné Azure – vytvořte si ho zdarma.
- Aktuální Node.js LTS.
- TypeScript 5+
- Rozhraní příkazového řádku Azure.
V tomto rychlém startu se předpokládá, že používáte Azure CLI.
Přihlášení k Azure
Spusťte příkaz
login
.az login
Pokud rozhraní příkazového řádku může otevřít výchozí prohlížeč, provede to a načte přihlašovací stránku Azure.
V opačném případě otevřete stránku https://aka.ms/devicelogin prohlížeče a zadejte autorizační kód zobrazený v terminálu.
Přihlaste se pomocí přihlašovacích údajů vašeho účtu v prohlížeči.
Vytvoření skupiny prostředků a trezoru klíčů
az group create
Pomocí příkazu vytvořte skupinu prostředků:az group create --name myResourceGroup --location eastus
Pokud chcete, můžete změnit "eastus" na nejbližší místo.
Slouží
az keyvault create
k vytvoření trezoru klíčů:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
Nahraďte
<your-unique-keyvault-name>
ho jedinečným názvem ve všech Azure. Obvykle používáte svůj osobní název nebo název společnosti spolu s dalšími čísly a identifikátory.
Udělení přístupu k trezoru klíčů
Pokud chcete získat oprávnění k trezoru klíčů prostřednictvím řízení přístupu na základě role (RBAC), přiřaďte roli k hlavnímu názvu uživatele (UPN) pomocí příkazu Azure CLI 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>"
Nahraďte <upn>, <subscription-id>, <resource-group-name> a <your-unique-keyvault-name> skutečnými hodnotami. Hlavní název uživatele (UPN) bude obvykle ve formátu e-mailové adresy (např username@domain.com. ).
Vytvoření nové aplikace Node.js
Vytvořte Node.js aplikaci, která používá váš trezor klíčů.
V terminálu vytvořte složku s názvem
key-vault-node-app
a změňte ji do této složky:mkdir key-vault-node-app && cd key-vault-node-app
Inicializace projektu Node.js:
npm init -y
Instalace balíčků služby Key Vault
Pomocí terminálu nainstalujte klientskou knihovnu tajných kódů služby Azure Key Vault @azure/keyvault-secrets pro Node.js.
npm install @azure/keyvault-secrets
Nainstalujte klientskou knihovnu Azure Identity, @azure/balíček identity pro ověření ve službě Key Vault.
npm install @azure/identity
Udělení přístupu k trezoru klíčů
Pokud chcete získat oprávnění k trezoru klíčů prostřednictvím řízení přístupu na základě role (RBAC), přiřaďte roli k hlavnímu názvu uživatele (UPN) pomocí příkazu Azure CLI 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>"
Nahraďte <upn>, <subscription-id>, <resource-group-name> a <your-unique-keyvault-name> skutečnými hodnotami. Hlavní název uživatele (UPN) bude obvykle ve formátu e-mailové adresy (např username@domain.com. ).
Nastavení proměnných prostředí
Tato aplikace používá koncový bod trezoru klíčů jako proměnnou prostředí s názvem KEY_VAULT_URL
.
set KEY_VAULT_URL=<your-key-vault-endpoint>
Ověření a vytvoření klienta
Žádosti o aplikace na většinu služeb Azure musí být autorizované. Použití metody DefaultAzureCredential poskytované klientskou knihovnou azure Identity je doporučeným přístupem k implementaci připojení bez hesel ke službám Azure ve vašem kódu. DefaultAzureCredential
podporuje více metod ověřování a určuje, která metoda se má použít za běhu. Tento přístup umožňuje vaší aplikaci používat různé metody ověřování v různých prostředích (místní a produkční) bez implementace kódu specifického pro prostředí.
V tomto rychlém startu DefaultAzureCredential
se ověří v trezoru klíčů pomocí přihlašovacích údajů místního vývojového uživatele přihlášeného k Azure CLI. Když je aplikace nasazená do Azure, může stejný DefaultAzureCredential
kód automaticky zjišťovat a používat spravovanou identitu přiřazenou ke službě App Service, virtuálnímu počítači nebo jiným službám. Další informace najdete v tématu Přehled spravované identity.
V tomto kódu se koncový bod vašeho trezoru klíčů používá k vytvoření klienta trezoru klíčů. Formát koncového bodu vypadá, https://<your-key-vault-name>.vault.azure.net
ale může se u suverénních cloudů změnit. Další informace o ověřování v trezoru klíčů najdete v příručce pro vývojáře.
Příklad kódu
Následující ukázky kódu vám ukážou, jak vytvořit klienta, nastavit tajný klíč, načíst tajný kód a odstranit tajný kód.
Tento kód používá následující třídy a metody tajných kódů služby Key Vault:
Nastavení architektury aplikace
Vytvořte nový textový soubor a vložte do index.js souboru následující kód.
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); });
Spuštění ukázkové aplikace
Spuštění aplikace:
node index.js
Metody vytvoření a získání vrátí celý objekt JSON pro tajný kód:
{ "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" } }
Metoda update vrátí páry název/hodnoty vlastností :
"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"
Vytvořte nový textový soubor a vložte do index.ts souboru následující kód.
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); });
Spuštění ukázkové aplikace
Sestavení aplikace TypeScript:
tsc
Spuštění aplikace:
node index.js
Metody vytvoření a získání vrátí celý objekt JSON pro tajný kód:
{ "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" } }
Metoda update vrátí páry název/hodnoty vlastností :
"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"
Integrace se službou App Configuration
Sada Azure SDK poskytuje pomocnou metodu parseKeyVaultSecretIdentifier, která parsuje dané ID tajného klíče služby Key Vault. To je nezbytné v případě, že použijete odkazy na Službu App Configuration ve službě Key Vault. Konfigurace aplikace ukládá ID tajného klíče služby Key Vault. K analýze ID potřebujete metodu parseKeyVaultSecretIdentifier , abyste získali název tajného kódu. Jakmile budete mít název tajného kódu, můžete z tohoto rychlého startu získat aktuální hodnotu tajného kódu.
Další kroky
V tomto rychlém startu jste vytvořili trezor klíčů, uložili tajný kód a načetli jste tento tajný klíč. Další informace o službě Key Vault a její integraci s vašimi aplikacemi najdete v následujících článcích.
- Přehled služby Azure Key Vault
- Přečtěte si přehled tajných kódů služby Azure Key Vault.
- Zabezpečení přístupu k trezoru klíčů
- Prohlédni si průvodce vývojářem ve službě Azure Key Vault.
- Přehled zabezpečení služby Key Vault