Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начало работы с клиентской библиотекой секретов Azure Key Vault для JavaScript. Azure Key Vault — это облачная служба, которая предоставляет защищенное хранилище для секретов. Вы можете безопасно хранить ключи, пароли, сертификаты и другие секреты. Создать хранилища Azure Key Vault и управлять ими можно на портале Azure. Из этого краткого руководства вы узнаете, как создавать, извлекать и удалять секреты из хранилища ключей Azure с помощью клиентской библиотеки JavaScript.
Ресурсы клиентской библиотеки Key Vault:
Справочная документация по API | Исходный код библиотеки | Пакет (npm).
Дополнительные сведения о Key Vault и секретах см. в следующих статьях:
Требования
- Подписка Azure — создайте бесплатную учетную запись.
- Текущая Node.js LTS.
- Azure CLI
Требования
- Подписка Azure — создайте бесплатную учетную запись.
- Текущая Node.js LTS.
- TypeScript 5+
- Azure CLI.
В этом кратком руководстве предполагается, что вы используете Azure CLI.
Вход в Azure
Выполните команду
login.az loginЕсли CLI может открыть ваш браузер по умолчанию, он откроет его и загрузит страницу входа в Azure.
В противном случае самостоятельно откройте в браузере страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.
Выполните вход в браузере с помощью учетных данных.
Создание группы ресурсов и хранилища ключей
Для создания группы ресурсов используйте команду
az group create:az group create --name "myResourceGroup" --location "EastUS"Если вы предпочитаете, вы можете изменить "EastUS" на расположение ближе к вам.
Для создания хранилища ключей используйте
az keyvault create:az keyvault create --name "<vault-name>" --resource-group "myResourceGroup" --enable-rbac-authorization true --enable-purge-protection trueЗамените
<vault-name>именем, уникальным в пределах Azure. Обычно используется личное имя или название организации, а также числа и идентификаторы.
Предоставление доступа к хранилищу ключей
Чтобы получить разрешения для хранилища ключей с помощью контроль доступа на основе ролей (RBAC), назначьте роль для "User Principal Name" (UPN) с помощью команды az role assignment create.
az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
Замените <upn>, <subscription-id>а <vault-name> также фактическими значениями. Если вы использовали другое имя группы ресурсов, замените myResourceGroup. Ваше имя пользователя (UPN) обычно имеет формат адреса электронной почты, например username@domain.com.
Создание приложения Node.js
Создайте приложение Node.js, использующее ваше хранилище ключей.
В терминале создайте папку с именем
key-vault-node-appи перейдите в эту папку.mkdir key-vault-node-app && cd key-vault-node-appИнициализация проекта Node.js:
npm init -y
Установка пакетов Key Vault
С помощью терминала установите клиентскую библиотеку секретов Azure Key Vault @azure/keyvault-secrets для Node.js.
npm install @azure/keyvault-secretsУстановите клиентскую библиотеку Azure Identity, пакет @azure/identity, чтобы выполнить аутентификацию в Key Vault.
npm install @azure/identity
Настройка переменных среды
Это приложение использует конечную точку хранилища ключей в качестве переменной окружения KEY_VAULT_URL.
set KEY_VAULT_URL=<key-vault-endpoint>
Аутентификация и создание клиента
Запросы приложений к большинству служб Azure должны быть авторизованы.
Использование метода DefaultAzureCredential, предоставленного библиотекой клиента идентификации Azure, является рекомендуемым подходом для реализации подключений к службам Azure без пароля в вашем коде.
DefaultAzureCredential поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.
В этом кратком руководстве DefaultAzureCredential происходит аутентификация в хранилище ключей с использованием учетных данных пользователя-разработчика, подключенного к Azure CLI. При развертывании приложения в Azure тот же DefaultAzureCredential код может автоматически обнаруживать и использовать управляемое удостоверение, назначенное службе приложений, виртуальной машине или другим службам. Дополнительные сведения см. в разделе Обзор управляемых удостоверений.
В этом коде конечная точка вашего хранилища ключей используется для создания клиентского приложения хранилища ключей. Формат конечной точки, такой как https://<vault-name>.vault.azure.net, может изменяться для суверенных облаков. Дополнительные сведения о проверке подлинности в хранилище ключей см. в руководстве для разработчиков.
Пример кода
В приведенных ниже примерах кода показано, как создать клиент, а также как задать, извлечь и удалить секрет.
В этом коде используются следующие классы и методы сервиса Secret Key Vault:
Настройка платформы приложения
Создайте новый текстовый файл и вставьте приведенный ниже код в файл index.js.
const { SecretClient } = require("@azure/keyvault-secrets"); const { DefaultAzureCredential } = require("@azure/identity"); async function main() { // DefaultAzureCredential automatically uses managed identity in Azure environments. // For local development, it uses credentials from Azure CLI, Azure PowerShell, or environment variables. // See: https://learn.microsoft.com/javascript/api/@azure/identity/defaultazurecredential 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); });
Запуск примера приложения
Запустите приложение:
node index.jsМетоды создания и получения возвращают полный объект JSON для хранения секретных данных.
{ "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://<vault-name>.vault.azure.net/secrets/secret1637692472606/e13f3558b4ca4363a8e402e11e7b193c", "vaultUrl": "https://<vault-name>.vault.azure.net", "version": "e13f3558b4ca4363a8e402e11e7b193c", "name": "secret1637692472606" } }Метод обновления возвращает пары имени/значения свойств:
"createdOn": "2021-11-23T18:34:33.000Z", "updatedOn": "2021-11-23T18:34:33.000Z", "enabled": true, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "id": "https://<vault-name>.vault.azure.net/secrets/secret1637692472606/e13f3558b4ca4363a8e402e11e7b193c", "vaultUrl": "https://<vault-name>.vault.azure.net", "version": "e13f3558b4ca4363a8e402e11e7b193c", "name": "secret1637692472606"
Создайте текстовый файл и вставьте следующий код в файл 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); });
Запуск примера приложения
Создайте приложение TypeScript:
tscЗапустите приложение:
node index.jsМетоды создания и получения возвращают полный объект JSON для хранения секретных данных.
{ "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://<vault-name>.vault.azure.net/secrets/secret1637692472606/e13f3558b4ca4363a8e402e11e7b193c", "vaultUrl": "https://<vault-name>.vault.azure.net", "version": "e13f3558b4ca4363a8e402e11e7b193c", "name": "secret1637692472606" } }Метод обновления возвращает пары имени/значения свойств:
"createdOn": "2021-11-23T18:34:33.000Z", "updatedOn": "2021-11-23T18:34:33.000Z", "enabled": true, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "id": "https://<vault-name>.vault.azure.net/secrets/secret1637692472606/e13f3558b4ca4363a8e402e11e7b193c", "vaultUrl": "https://<vault-name>.vault.azure.net", "version": "e13f3558b4ca4363a8e402e11e7b193c", "name": "secret1637692472606"
Интеграция со службой "Конфигурация приложений"
Пакет SDK Azure предоставляет вспомогательный метод — parseKeyVaultSecretIdentifier для анализа заданного идентификатора секрета Key Vault. Это необходимо, если вы используете Конфигурация приложений как ссылки на Key Vault. В конфигурации приложений хранится идентификатор секрета Key Vault. Чтобы получить имя секрета, необходимо выполнить анализ этого идентификатора с помощью метода parseKeyVaultSecretIdentifier. Получив имя секрета, можно получить его текущее значение, используя код из этого краткого руководства.
Следующие шаги
При работе с этим кратким руководством вы создали хранилище ключей, сохранили в нем секрет и извлекли его. Дополнительные сведения о Key Vault и его интеграции в приложения см. в следующих статьях.