Creare, ruotare e aggiornare le proprietà di una chiave in Azure Key Vault con JavaScript
Creare il KeyClient con le credenziali di autenticazione a livello di codice appropriate, quindi usare il client per impostare, aggiornare e ruotare una chiave in Azure Key Vault.
Ruotare una chiave significa creare una nuova versione della chiave e impostare tale versione come versione più recente. La versione precedente non viene eliminata, ma non è più la versione attiva.
Creare una chiave con un criterio di rotazione
Per creare una chiave in Azure Key Vault, usare il metodo createKey della classe KeyClient. Impostare tutte le proprietà con l'oggetto facoltativo createKeyOptions. Dopo aver creato la chiave, aggiornare la chiave con un criterio di rotazione.
Viene restituito un KeyVaultKey. Aggiornare la chiave usando updateKeyRotationPolicy con un criterio, che include la notifica.
I metodi di creazione pratici sono disponibili per i tipi di chiave seguenti, che impostano le proprietà associate al tipo di chiave:
// 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);
}
Ruotare manualmente la chiave
Quando è necessario ruotare la chiave, usare il metodo rotateKey. In questo modo viene creata una nuova versione della chiave e tale versione viene impostata come versione attiva.
// 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);
}
Aggiornare le proprietà della chiave
Aggiornare le proprietà della versione più recente della chiave con updateKeyProperties o aggiornare una versione specifica di una chiave con updateKeyProperties. Tutte le proprietà UpdateKeyPropertiesOptions non specificate vengono lasciate invariate. Questo non modifica il valore della chiave.
// 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
}
);
}
Aggiorna valore della chiave
Per aggiornare il valore di una chiave, usare il metodo rotateKey. Assicurarsi di passare il nuovo valore con tutte le proprietà da mantenere dalla versione corrente della chiave. Tutte le proprietà correnti non impostate in chiamate aggiuntive a rotateKey andranno perse.
Verrà generata una nuova versione di una chiave. L'oggetto KeyVaultKey restituito include il nuovo ID versione.