Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure Key Vault to usługa, która umożliwia szyfrowanie kluczy uwierzytelniania, kluczy konta magazynu, kluczy szyfrowania danych, plików pfx i haseł przy użyciu zabezpieczonych kluczy. Jeśli chcesz dowiedzieć się więcej o usłudze Azure Key Vault, warto zapoznać się z tematem: Co to jest usługa Azure Key Vault?
Zarządzanie wpisami tajnymi usługi Azure Key Vault umożliwia bezpieczne przechowywanie i ścisłe kontrolowanie dostępu do tokenów, haseł, certyfikatów, kluczy interfejsu API i innych wpisów tajnych.
Użyj biblioteki klienta dla wpisów tajnych usługi Azure Key Vault w aplikacji Node.js, aby:
- Pobieranie, ustawianie i usuwanie wpisów tajnych.
- Aktualizowanie wpisu tajnego i jego atrybutów.
- Tworzenie kopii zapasowej i przywracanie wpisu tajnego.
- Pobieranie, przeczyszczanie lub odzyskiwanie usuniętego wpisu tajnego.
- Pobierz wszystkie wersje wpisu tajnego.
- Pobierz wszystkie wpisy tajne.
- Pobierz wszystkie usunięte wpisy tajne.
Uwaga: nie można używać tego pakietu w przeglądarce z powodu ograniczeń usługi Azure Key Vault, zapoznaj się z tym dokumencie wskazówki.
Kluczowe linki:
- Kod źródłowy
- Pakiet (npm)
- Dokumentacja referencyjna interfejsu API
- dokumentacja produktu
- Próbki
Wprowadzenie
Obecnie obsługiwane środowiska
- Wersje LTS systemu Node.js
Wymagania wstępne
- Subskrypcja platformy Azure
- zasób usługi Key Vault
- Istniejąca azure Key Vault. Jeśli musisz utworzyć magazyn kluczy, możesz to zrobić w witrynie Azure Portal, wykonując kroki opisane w tym dokumencie. Alternatywnie możesz użyć interfejsu wiersza polecenia platformy Azure, wykonując kroki opisane w tym dokumencie.
Instalowanie pakietu
Zainstaluj bibliotekę klienta wpisu tajnego usługi Azure Key Vault przy użyciu narzędzia npm:
npm install @azure/keyvault-secrets
Instalowanie biblioteki tożsamości
Klienci usługi Key Vault uwierzytelniają się przy użyciu biblioteki tożsamości platformy Azure. Zainstaluj go również przy użyciu narzędzia npm
npm install @azure/identity
Konfigurowanie języka TypeScript
Użytkownicy języka TypeScript muszą mieć zainstalowane definicje typu węzła:
npm install @types/node
Należy również włączyć compilerOptions.allowSyntheticDefaultImports
w tsconfig.json. Należy pamiętać, że jeśli włączono compilerOptions.esModuleInterop
, allowSyntheticDefaultImports
jest domyślnie włączona. Aby uzyskać więcej informacji, zobacz podręcznik opcje kompilatora języka TypeScript.
Najważniejsze pojęcia
- klienta wpisu tajnego jest podstawowym interfejsem umożliwiającym interakcję z metodami interfejsu API powiązanymi z wpisami tajnymi w interfejsie API usługi Azure Key Vault z poziomu aplikacji JavaScript. Po zainicjowaniu udostępnia on podstawowy zestaw metod, których można użyć do tworzenia, odczytywania, aktualizowania i usuwania wpisów tajnych.
- wersja wpisu tajnego jest wersją wpisu tajnego w usłudze Key Vault. Za każdym razem, gdy użytkownik przypisuje wartość do unikatowej nazwy wpisu tajnego, tworzona jest nowa wersja tego wpisu tajnego. Pobranie wpisu tajnego według nazwy zawsze zwróci najnowszą przypisaną wartość, chyba że do zapytania zostanie podana określona wersja.
- usuwanie nietrwałe umożliwia magazynom kluczy obsługę usuwania i przeczyszczania jako dwóch oddzielnych kroków, dlatego usunięte wpisy tajne nie zostaną natychmiast utracone. Dzieje się tak tylko wtedy, gdy usługa Key Vault włączona usuwania nietrwałego.
- kopii zapasowej wpisu tajnego można wygenerować na podstawie dowolnego utworzonego wpisu tajnego. Te kopie zapasowe są danymi binarnymi i mogą być używane tylko do ponownego wygenerowania wcześniej usuniętego wpisu tajnego.
Uwierzytelnianie za pomocą usługi Azure Active Directory
Usługa Key Vault korzysta z usługi Azure Active Directory do uwierzytelniania żądań w swoich interfejsach API. Pakiet @azure/identity
udostępnia różne typy poświadczeń, których aplikacja może użyć do tego celu. Plik README dla @azure/identity
zawiera więcej szczegółów i przykładów, które ułatwiają rozpoczęcie pracy.
Aby móc korzystać z usługi Azure Key Vault, należy utworzyć wystąpienie klasy SecretClient
, adres URL magazynu i obiekt poświadczeń. Przykłady przedstawione w tym dokumencie używają obiektu poświadczeń o nazwie DefaultAzureCredential
, który jest odpowiedni dla większości scenariuszy, w tym lokalnych środowisk programistycznych i produkcyjnych. Ponadto zalecamy użycie tożsamości zarządzanej
Więcej informacji na temat różnych sposobów uwierzytelniania i odpowiadających im typów poświadczeń można znaleźć w dokumentacji Azure Identity.
Oto szybki przykład. Najpierw zaimportuj DefaultAzureCredential
i SecretClient
. Po zaimportowaniu tych elementów możemy połączyć się z usługą 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);
Określanie wersji interfejsu API usługi Azure Key Vault
Domyślnie ten pakiet używa najnowszej wersji usługi Azure Key Vault, która jest 7.1
. Jedyną obsługiwaną wersją jest 7.0
. Możesz zmienić używaną wersję usługi, ustawiając opcję serviceVersion
w konstruktorze klienta, jak pokazano poniżej:
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
});
Przykłady
W poniższych sekcjach przedstawiono fragmenty kodu, które obejmują niektóre typowe zadania korzystające z wpisów tajnych usługi Azure Key Vault. Scenariusze, które zostały tutaj omówione, składają się z następujących elementów:
- Tworzenie i ustawianie wpisu tajnego.
- Uzyskiwanie wpisu tajnego.
- Tworzenie i aktualizowanie wpisów tajnych za pomocą atrybutów.
- Usuwanie wpisu tajnego.
- iterowanie list wpisów tajnych.
Tworzenie i ustawianie wpisu tajnego
setSecret
przypisuje podaną wartość do określonej nazwy wpisu tajnego. Jeśli wpis tajny o tej samej nazwie już istnieje, zostanie utworzona nowa wersja wpisu tajnego.
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);
Uzyskiwanie wpisu tajnego
Najprostszym sposobem odczytu wpisów tajnych z magazynu jest uzyskanie wpisu tajnego według nazwy. Spowoduje to pobranie najnowszej wersji wpisu tajnego. Opcjonalnie możesz pobrać inną wersję klucza, jeśli określisz go jako część parametrów opcjonalnych.
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,
);
Tworzenie i aktualizowanie wpisów tajnych za pomocą atrybutów
Wpis tajny może zawierać więcej informacji niż jego nazwa i jego wartość. Mogą również zawierać następujące atrybuty:
-
tags
: dowolny zestaw klucz-wartości, których można użyć do wyszukiwania i filtrowania wpisów tajnych. -
contentType
: dowolny ciąg, którego można użyć, aby ułatwić odbiorcy wpisu tajnego zrozumienie sposobu używania wartości wpisu tajnego. -
enabled
: wartość logiczna określająca, czy wartość wpisu tajnego może być odczytywana, czy nie. -
notBefore
: dana data, po której można pobrać wartość wpisu tajnego. -
expiresOn
: dana data, po której nie można pobrać wartości wpisu tajnego.
Obiekt z tymi atrybutami można wysłać jako trzeci parametr setSecret
, bezpośrednio po nazwie i wartości wpisu tajnego w następujący sposób:
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,
});
Spowoduje to utworzenie nowej wersji tego samego wpisu tajnego, która będzie zawierać najnowsze udostępnione atrybuty.
Atrybuty można również zaktualizować do istniejącej wersji wpisu tajnego za pomocą updateSecretProperties
, w następujący sposób:
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 });
Usuwanie wpisu tajnego
Metoda beginDeleteSecret
rozpoczyna usuwanie wpisu tajnego.
Ten proces będzie występować w tle natychmiast po udostępnieniu niezbędnych zasobów.
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);
Jeśli usuwania nietrwałego jest włączona dla usługi Key Vault, ta operacja będzie oznaczać tylko wpis tajny jako usunięty wpis tajny. Nie można zaktualizować usuniętego wpisu tajnego. Mogą być tylko odczytywane, odzyskiwane lub czyszczone.
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);
Ponieważ wpisy tajne zajmują trochę czasu, aby w pełni usunąć, beginDeleteSecret
zwraca obiekt Poller, który śledzi podstawową operację długotrwałą zgodnie z naszymi wytycznymi: https://azure.github.io/azure-sdk/typescript_design.html#ts-lro
Odebrany element poller umożliwia pobranie usuniętego wpisu tajnego przez wywołanie polecenia poller.getResult()
.
Możesz również poczekać na zakończenie usuwania, uruchamiając poszczególne wywołania usługi do momentu usunięcia wpisu tajnego lub czekając na zakończenie procesu:
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);
Innym sposobem oczekiwania na pełne usunięcie wpisu tajnego jest wykonywanie poszczególnych wywołań w następujący sposób:
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`);
Iterowanie list wpisów tajnych
Za pomocą obiektu SecretClient można pobierać i iterować wszystkie wpisy tajne w usłudze Key Vault, a także za pośrednictwem wszystkich usuniętych wpisów tajnych i wersji określonego wpisu tajnego. Dostępne są następujące metody interfejsu API:
-
listPropertiesOfSecrets
wyświetli listę wszystkich nieu usuniętych wpisów tajnych według ich nazw, tylko w najnowszych wersjach. -
listDeletedSecrets
wyświetli listę wszystkich usuniętych wpisów tajnych według ich nazw, tylko w ich najnowszych wersjach. -
listPropertiesOfSecretVersions
wyświetli listę wszystkich wersji wpisu tajnego na podstawie nazwy wpisu tajnego.
Których można użyć w następujący sposób:
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);
}
Wszystkie te metody będą zwracać wszystkie dostępne wyniki jednocześnie. Aby pobrać je według stron, dodaj .byPage()
bezpośrednio po wywołaniu metody interfejsu API, której chcesz użyć, w następujący sposób:
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);
}
}
Rozwiązywanie problemów
Zobacz nasz przewodnik rozwiązywania problemów z , aby uzyskać szczegółowe informacje na temat diagnozowania różnych scenariuszy awarii.
Włączenie rejestrowania może pomóc odkryć przydatne informacje o błędach. Aby wyświetlić dziennik żądań i odpowiedzi HTTP, ustaw zmienną środowiskową AZURE_LOG_LEVEL
na info
. Alternatywnie rejestrowanie można włączyć w czasie wykonywania, wywołując setLogLevel
w @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Dalsze kroki
Więcej przykładów kodu można znaleźć za pośrednictwem następujących linków:
- przykłady wpisów tajnych usługi Key Vault (JavaScript)
- przykłady wpisów tajnych usługi Key Vault (TypeScript)
- przypadki testowe wpisów tajnych usługi Key Vault
Wkład
Jeśli chcesz współtworzyć tę bibliotekę, przeczytaj przewodnik dotyczący współtworzenia , aby dowiedzieć się więcej na temat tworzenia i testowania kodu.
Azure SDK for JavaScript