Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure Key Vault è un servizio che consente di crittografare chiavi di autenticazione, chiavi dell'account di archiviazione, chiavi di crittografia dei dati, file pfx e password usando chiavi protette. Per altre informazioni su Azure Key Vault, è consigliabile esaminare: Che cos'è Azure Key Vault?
La gestione dei segreti di Azure Key Vault consente di archiviare e controllare in modo sicuro l'accesso a token, password, certificati, chiavi API e altri segreti.
Usare la libreria client per i segreti di Azure Key Vault nell'applicazione Node.js per:
- Ottenere, impostare ed eliminare segreti.
- Aggiornare un segreto e gli attributi.
- Eseguire il backup e il ripristino di un segreto.
- Ottenere, eliminare o recuperare un segreto eliminato.
- Ottenere tutte le versioni di un segreto.
- Ottenere tutti i segreti.
- Ottenere tutti i segreti eliminati.
Nota: questo pacchetto non può essere usato nel browser a causa delle limitazioni del servizio Azure Key Vault. Per indicazioni, vedere questo documento.
Collegamenti chiave:
- Codice sorgente
- Pacchetto (npm)
- documentazione di riferimento dell'API
- Documentazione del prodotto
- esempi di
Come iniziare
Ambienti attualmente supportati
Prerequisiti
- Una sottoscrizione di Azure
- Una risorsa Key Vault
- Un azure Key Vault esistente. Se è necessario creare un insieme di credenziali delle chiavi, è possibile farlo nel portale di Azure seguendo i passaggi descritti in questo documento. In alternativa, è possibile usare l'interfaccia della riga di comando di Azure seguendo i passaggi descritti in questo documento.
Installare il pacchetto
Installare la libreria client dei segreti di Azure Key Vault usando npm:
npm install @azure/keyvault-secrets
Installare la libreria delle identità
I client di Key Vault eseguono l'autenticazione tramite la libreria di identità di Azure. Installarlo anche usando npm
npm install @azure/identity
Configurare TypeScript
Gli utenti typeScript devono avere installate definizioni dei tipi di nodo:
npm install @types/node
È anche necessario abilitare compilerOptions.allowSyntheticDefaultImports
nel tsconfig.json. Si noti che se è stato abilitato compilerOptions.esModuleInterop
, allowSyntheticDefaultImports
è abilitato per impostazione predefinita. Per altre informazioni, vedere manuale delle opzioni del compilatore di TypeScript di.
Concetti chiave
- Il client Segreto è l'interfaccia principale per interagire con i metodi API correlati ai segreti nell'API di Azure Key Vault da un'applicazione JavaScript. Dopo l'inizializzazione, fornisce un set di base di metodi che possono essere usati per creare, leggere, aggiornare ed eliminare segreti.
- Una versione segreto è una versione di un segreto nell'insieme di credenziali delle chiavi. Ogni volta che un utente assegna un valore a un nome segreto univoco, viene creata una nuova versione del segreto. Il recupero di un segreto in base a un nome restituirà sempre il valore più recente assegnato, a meno che non venga fornita una versione specifica alla query.
- eliminazione temporanea consente agli insiemi di credenziali delle chiavi di supportare l'eliminazione e l'eliminazione come due passaggi separati, quindi i segreti eliminati non vengono persi immediatamente. Ciò si verifica solo se l'insieme di credenziali delle chiavi ha abilitata per l'eliminazione temporanea.
- Un backup segreto può essere generato da qualsiasi segreto creato. Questi backup vengono usati come dati binari e possono essere usati solo per rigenerare un segreto eliminato in precedenza.
Autenticazione con Azure Active Directory
Il servizio Key Vault si basa su Azure Active Directory per autenticare le richieste alle API. Il pacchetto @azure/identity
offre diversi tipi di credenziali che l'applicazione può usare per eseguire questa operazione. Il file LEGGIMI per @azure/identity
fornisce altri dettagli ed esempi per iniziare.
Per interagire con il servizio Azure Key Vault, è necessario creare un'istanza della classe SecretClient
, un URL dell'insieme di credenziali e un oggetto credenziali. Gli esempi illustrati in questo documento usano un oggetto credenziali denominato DefaultAzureCredential
, appropriato per la maggior parte degli scenari, inclusi gli ambienti di sviluppo e produzione locali. È anche consigliabile usare un di identità gestita per l'autenticazione negli ambienti di produzione.
Per altre informazioni sui diversi modi di autenticazione e sui relativi tipi di credenziali corrispondenti, vedere la documentazione relativa all'identità di Azure .
Ecco un rapido esempio. Prima di tutto, importare DefaultAzureCredential
e SecretClient
. Dopo l'importazione, è possibile connettersi al servizio Key Vault:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
// Build the URL to reach your key vault
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
// Lastly, create our keys client and connect to the service
const client = new SecretClient(url, credential);
Specifica della versione dell'API del servizio Azure Key Vault
Per impostazione predefinita, questo pacchetto usa la versione più recente del servizio Azure Key Vault 7.1
. L'unica versione supportata è 7.0
. È possibile modificare la versione del servizio usata impostando l'opzione serviceVersion
nel costruttore client, come illustrato di seguito:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
// Build the URL to reach your key vault
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
// Change the Azure Key Vault service API version being used via the `serviceVersion` option
const client = new SecretClient(url, credential, {
serviceVersion: "7.0", // Or 7.1
});
Esempi
Le sezioni seguenti forniscono frammenti di codice che illustrano alcune delle attività comuni che usano i segreti di Azure Key Vault. Gli scenari illustrati di seguito sono costituiti da:
- Creazione e impostazione di un segreto.
- Ottenere un segreto.
- Creazione e aggiornamento di segreti con attributi.
- Eliminazione di un segreto.
- L'iterazione di elenchi di segreti.
Creazione e impostazione di un segreto
setSecret
assegna un valore fornito al nome del segreto specificato. Se esiste già un segreto con lo stesso nome, viene creata una nuova versione del segreto.
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
const result = await client.setSecret(secretName, "MySecretValue");
console.log("result: ", result);
Ottenere un segreto
Il modo più semplice per leggere i segreti dall'insieme di credenziali consiste nel ottenere un segreto in base al nome. Verrà recuperata la versione più recente del segreto. Facoltativamente, è possibile ottenere una versione diversa della chiave se si specifica come parte dei parametri facoltativi.
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
const latestSecret = await client.getSecret(secretName);
console.log(`Latest version of the secret ${secretName}: `, latestSecret);
const specificSecret = await client.getSecret(secretName, {
version: latestSecret.properties.version!,
});
console.log(
`The secret ${secretName} at the version ${latestSecret.properties.version!}: `,
specificSecret,
);
Creazione e aggiornamento di segreti con attributi
Un segreto può avere più informazioni rispetto al nome e al relativo valore. Possono includere anche gli attributi seguenti:
-
tags
: qualsiasi set di valori chiave che può essere usato per cercare e filtrare i segreti. -
contentType
: qualsiasi stringa che può essere usata per aiutare il ricevitore del segreto a comprendere come usare il valore del segreto. -
enabled
: valore booleano che determina se il valore del segreto può essere letto o meno. -
notBefore
: data specificata dopo la quale è possibile recuperare il valore del segreto. -
expiresOn
: data specificata dopo la quale non è possibile recuperare il valore del segreto.
Un oggetto con questi attributi può essere inviato come terzo parametro di setSecret
, subito dopo il nome e il valore del segreto, come indicato di seguito:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
const result = await client.setSecret(secretName, "MySecretValue", {
enabled: false,
});
Verrà creata una nuova versione dello stesso segreto, che avrà gli attributi forniti più recenti.
Gli attributi possono anche essere aggiornati a una versione privata esistente con updateSecretProperties
, come indicato di seguito:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
const result = await client.getSecret(secretName);
await client.updateSecretProperties(secretName, result.properties.version, { enabled: false });
Eliminazione di un segreto
Il metodo beginDeleteSecret
avvia l'eliminazione di un segreto.
Questo processo verrà eseguito in background non appena sono disponibili le risorse necessarie.
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
await client.beginDeleteSecret(secretName);
Se di eliminazione temporanea è abilitata per l'insieme di credenziali delle chiavi, questa operazione etichetta solo il segreto come segreto eliminato. Non è possibile aggiornare un segreto eliminato. Possono essere letti, recuperati o eliminati solo.
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
const poller = await client.beginDeleteSecret(secretName);
// You can use the deleted secret immediately:
const deletedSecret = poller.getResult();
// The secret is being deleted. Only wait for it if you want to restore it or purge it.
await poller.pollUntilDone();
// You can also get the deleted secret this way:
await client.getDeletedSecret(secretName);
// Deleted secrets can also be recovered or purged.
// recoverDeletedSecret returns a poller, just like beginDeleteSecret.
const recoverPoller = await client.beginRecoverDeletedSecret(secretName);
await recoverPoller.pollUntilDone();
// And then, to purge the deleted secret:
await client.purgeDeletedSecret(secretName);
Poiché i segreti richiedono del tempo per essere eliminati completamente, beginDeleteSecret
restituisce un oggetto Poller che tiene traccia dell'operazione a esecuzione prolungata sottostante in base alle linee guida seguenti: https://azure.github.io/azure-sdk/typescript_design.html#ts-lro
Il poller ricevuto consente di ottenere il segreto eliminato chiamando a poller.getResult()
.
È anche possibile attendere il completamento dell'eliminazione, eseguendo singole chiamate al servizio fino all'eliminazione del segreto o attendendo il completamento del processo:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
const poller = await client.beginDeleteSecret(secretName);
// You can use the deleted secret immediately:
let deletedSecret = poller.getResult();
// Or you can wait until the secret finishes being deleted:
deletedSecret = await poller.pollUntilDone();
console.log(deletedSecret);
Un altro modo per attendere che il segreto venga eliminato completamente consiste nell'eseguire singole chiamate, come indicato di seguito:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const poller = await client.beginDeleteSecret(secretName);
while (!poller.isDone()) {
await poller.poll();
await delay(5000);
}
console.log(`The secret ${secretName} is fully deleted`);
Iterazione di elenchi di segreti
Usando SecretClient, è possibile recuperare e scorrere tutti i segreti in un insieme di credenziali delle chiavi, nonché tramite tutti i segreti eliminati e le versioni di un segreto specifico. Sono disponibili i metodi API seguenti:
-
listPropertiesOfSecrets
elenca tutti i segreti non eliminati in base ai nomi, solo nelle versioni più recenti. -
listDeletedSecrets
elenca tutti i segreti eliminati in base ai nomi, solo nelle versioni più recenti. -
listPropertiesOfSecretVersions
elenca tutte le versioni di un segreto in base a un nome segreto.
Che può essere usato come segue:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
for await (const secretProperties of client.listPropertiesOfSecrets()) {
console.log("Secret properties: ", secretProperties);
}
for await (const deletedSecret of client.listDeletedSecrets()) {
console.log("Deleted secret: ", deletedSecret);
}
for await (const versionProperties of client.listPropertiesOfSecretVersions(secretName)) {
console.log("Version properties: ", versionProperties);
}
Tutti questi metodi restituiranno tutti i risultati disponibili contemporaneamente. Per recuperarli in base alle pagine, aggiungere .byPage()
subito dopo aver richiamato il metodo API da usare, come indicato di seguito:
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const credential = new DefaultAzureCredential();
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;
const client = new SecretClient(url, credential);
const secretName = "MySecretName";
for await (const page of client.listPropertiesOfSecrets().byPage()) {
for (const secretProperties of page) {
console.log("Secret properties: ", secretProperties);
}
}
for await (const page of client.listDeletedSecrets().byPage()) {
for (const deletedSecret of page) {
console.log("Deleted secret: ", deletedSecret);
}
}
for await (const page of client.listPropertiesOfSecretVersions(secretName).byPage()) {
for (const versionProperties of page) {
console.log("Version properties: ", versionProperties);
}
}
Risoluzione dei problemi
Per informazioni dettagliate su come diagnosticare vari scenari di errore, vedere la guida alla risoluzione dei problemi .
L'abilitazione della registrazione può aiutare a individuare informazioni utili sugli errori. Per visualizzare un log di richieste e risposte HTTP, impostare la variabile di ambiente AZURE_LOG_LEVEL
su info
. In alternativa, la registrazione può essere abilitata in fase di esecuzione chiamando setLogLevel
nel @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Passaggi successivi
Per altri esempi di codice, vedere i collegamenti seguenti:
- esempi di segreti di Key Vault (JavaScript)
- dei segreti dell'insieme di credenziali delle chiavi (TypeScript)
- test case dei segreti di Key Vault
Contribuire
Per contribuire a questa libreria, leggere la guida contribuire per altre informazioni su come compilare e testare il codice.
Azure SDK for JavaScript