Создание, смена и обновление свойств ключа в Azure Key Vault с помощью JavaScript

Создайте KeyClient с соответствующими учетными данными программной проверки подлинности, а затем используйте клиент для установки, обновления и смены ключа в Azure Key Vault.

Смена ключа означает создание новой версии ключа и установка этой версии в качестве последней версии. Предыдущая версия не удаляется, но она больше не является активной.

Создание ключа с политикой смены

Чтобы создать ключ в Azure Key Vault, используйте метод createKey класса KeyClient. Задайте любые свойства с помощью необязательного объекта createKeyOptions . После создания ключа обновите его с помощью политики смены.

Возвращается ключ KeyVaultKey . Обновите ключ с помощью updateKeyRotationPolicy с политикой, которая включает уведомление.

Удобные методы создания доступны для следующих типов ключей, которые задают свойства, связанные с этим типом ключа:

// Azure client libraries
import { DefaultAzureCredential } from '@azure/identity';
import {
  CreateKeyOptions,
  KeyClient,
  KeyRotationPolicyProperties,
  KnownKeyOperations,
  KnownKeyTypes
} from '@azure/keyvault-keys';

// Day/time manipulation
import dayjs from 'dayjs';
import duration from 'dayjs/plugin/duration';
dayjs.extend(duration);

// Authenticate to Azure Key Vault
const credential = new DefaultAzureCredential();
const client = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
);

// Name of key
const keyName = `mykey-${Date.now().toString()}`;

// Set key options
const keyOptions: CreateKeyOptions = {
enabled: true,
expiresOn: dayjs().add(1, 'year').toDate(),
exportable: false,
tags: {
    project: 'test-project'
},
keySize: 2048,
keyOps: [
    KnownKeyOperations.Encrypt,
    KnownKeyOperations.Decrypt
    // KnownKeyOperations.Verify,
    // KnownKeyOperations.Sign,
    // KnownKeyOperations.Import,
    // KnownKeyOperations.WrapKey,
    // KnownKeyOperations.UnwrapKey
]
};

// Set key type
const keyType = KnownKeyTypes.RSA; //  'EC', 'EC-HSM', 'RSA', 'RSA-HSM', 'oct', 'oct-HSM'

// Create key
const key = await client.createKey(keyName, keyType, keyOptions);
if (key) {
    // Set rotation policy properties: KeyRotationPolicyProperties
    const rotationPolicyProperties: KeyRotationPolicyProperties = {
        expiresIn: 'P90D',
        lifetimeActions: [
        {
            action: 'Rotate',
            timeAfterCreate: 'P30D'
        },
        {
            action: 'Notify',
            timeBeforeExpiry: dayjs.duration({ days: 7 }).toISOString()
        }
    ]};
    
    // Set rotation policy: KeyRotationPolicy
    const keyRotationPolicy = await client.updateKeyRotationPolicy(
        key.name,
        rotationPolicyProperties
    );
    console.log(keyRotationPolicy);
}

Смена клавиши вручную

Если необходимо сменить ключ, используйте метод rotateKey . При этом будет создана новая версия ключа и она будет установлена как активная.

// Azure client libraries
import { DefaultAzureCredential } from '@azure/identity';
import {
  KeyClient
} from '@azure/keyvault-keys';

// Authenticate to Azure Key Vault
const credential = new DefaultAzureCredential();
const client = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
);

// Get existing key
let key = await client.getKey(`MyKey`);
console.log(key);

if(key?.name){

    // rotate key
    key = await client.rotateKey(key.name);
    console.log(key);
}

Обновление свойств ключей

Обновление свойств последней версии ключа с помощью updateKeyProperties или обновление определенной версии ключа с помощью updateKeyProperties. Все не указанные свойства UpdateKeyPropertiesOptions остаются без изменений. Это не изменяет значение ключа.

// Azure client libraries
import { DefaultAzureCredential } from '@azure/identity';
import {
  KeyClient
} from '@azure/keyvault-keys';

// Authenticate to Azure Key Vault
const credential = new DefaultAzureCredential();
const client = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
);

// Get existing key
const key = await client.getKey('MyKey');

if (key) {

    // 
    const updateKeyPropertiesOptions = {
        enabled: false,
        // expiresOn,
        // keyOps,
        // notBefore, 
        // releasePolicy, 
        tags: { 
            ...key.properties.tags, subproject: 'Health and wellness' 
        }
    }
    
    // update properties of latest version
    await client.updateKeyProperties(
        key.name,
        updateKeyPropertiesOptions
    );
    
    // update properties of specific version
    await client.updateKeyProperties(
        key.name,
        key?.properties?.version,
        {
            enabled: true
        }
    );
}

Обновление значения ключа

Чтобы обновить значение ключа, используйте метод rotateKey . Обязательно передайте новое значение со всеми свойствами, которые вы хотите сохранить из текущей версии ключа. Все текущие свойства, не заданные в дополнительных вызовах rotateKey, будут потеряны.

При этом создается новая версия ключа. Возвращенный объект KeyVaultKey содержит идентификатор новой версии.

Дальнейшие действия