Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mulailah dengan pustaka klien kunci Azure Key Vault untuk JavaScript. Azure Key Vault adalah layanan awan yang menyediakan penyimpanan aman untuk menyimpan rahasia. Anda dapat menyimpan kunci, kata sandi, sertifikat, dan rahasia lainnya dengan aman. Brankas kunci Azure dapat dibuat dan dikelola melalui portal Microsoft Azure. Dalam panduan cepat ini, Anda mempelajari cara membuat, mengambil, dan menghapus kunci dari brankas kunci Azure menggunakan pustaka klien untuk kunci JavaScript.
Sumber daya pustaka klien Key Vault:
Dokumentasi referensi API | Kode sumber pustaka | Paket (npm)
Untuk informasi lebih lanjut tentang Key Vault dan kunci, lihat:
Prasyarat
- Langganan pada Azure - buat satu secara gratis.
- Node.js LTS saat ini.
- Azure CLI
- Key Vault yang ada - Anda dapat membuatnya menggunakan:
- Langganan pada Azure - buat satu secara gratis.
- Node.js LTS saat ini.
- TypeScript 5+
- Azure CLI.
- Key Vault yang ada - Anda dapat membuatnya menggunakan:
Panduan memulai cepat ini beranggapan Anda menjalankan Azure CLI.
Masuk ke Azure
Jalankan perintah
login.az loginJika CLI dapat membuka browser default Anda, CLI akan melakukannya dan memuat halaman masuk Azure.
Jika tidak, buka halaman browser di https://aka.ms/devicelogin dan masukkan kode otorisasi yang ditampilkan di terminal Anda.
Masuk menggunakan kredensial akun Anda di browser.
Membuat aplikasi Node.js baru
Buat aplikasi Node.js yang menggunakan brankas kunci Anda.
Di terminal, buat folder bernama
key-vault-node-appdan ubah ke folder itu:mkdir key-vault-node-app && cd key-vault-node-appBuat proyek Node.js baru:
npm init -y
Menginstal paket Key Vault
Menggunakan terminal, instal pustaka klien kunci Azure Key Vault, @azure/keyvault-keys untuk Node.js.
npm install @azure/keyvault-keysInstal pustaka klien Azure Identity, @azure/identity untuk mengautentikasi ke Key Vault.
npm install @azure/identity
Memberikan akses ke key vault Anda
Untuk mendapatkan izin ke brankas kunci Anda melalui Kontrol Akses Berbasis Peran (RBAC), tetapkan peran untuk "Nama Prinsipal Pengguna" (UPN) Anda menggunakan perintah az role assignment create Azure CLI.
az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
Ganti <upn>, <subscription-id>, dan <vault-name> dengan nilai aktual Anda. Jika Anda menggunakan nama grup sumber daya yang berbeda, ganti "myResourceGroup" juga. UPN Anda biasanya akan dalam format alamat email (misalnya, username@domain.com).
Atur variabel lingkungan
Aplikasi ini menggunakan titik akhir brankas kunci sebagai variabel lingkungan yang disebut KEY_VAULT_URL.
set KEY_VAULT_URL=<key-vault-endpoint>
Mengautentikasi dan membuat klien
Permintaan aplikasi ke sebagian besar layanan Azure harus diotorisasi.
Menggunakan metode DefaultAzureCredential yang disediakan oleh pustaka klien Azure Identity adalah pendekatan yang direkomendasikan untuk menerapkan koneksi tanpa kata sandi ke layanan Azure dalam kode Anda.
DefaultAzureCredential mendukung beberapa metode autentikasi dan menentukan metode mana yang harus digunakan saat runtime. Pendekatan ini memungkinkan aplikasi Anda menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda (lokal vs. produksi) tanpa menerapkan kode spesifik per lingkungan.
Dalam panduan cepat ini, DefaultAzureCredential melakukan autentikasi ke Key Vault menggunakan kredensial pengguna lokal yang masuk ke Azure CLI. Saat aplikasi disebarkan ke Azure, kode yang sama DefaultAzureCredential dapat secara otomatis menemukan dan menggunakan identitas terkelola yang ditetapkan ke App Service, Komputer Virtual, atau layanan lainnya. Untuk informasi selengkapnya, lihat Gambaran Umum Identitas Terkelola.
Dalam kode ini, titik akhir brankas kunci Anda digunakan untuk membuat klien brankas kunci. Format titik akhir terlihat seperti https://<vault-name>.vault.azure.net tetapi dapat berubah untuk sovereign cloud. Untuk informasi selengkapnya tentang mengautentikasi ke brankas kunci, lihat Panduan Pengembang.
Contoh kode
Sampel kode di bawah ini akan menunjukkan kepada Anda cara membuat klien, mengatur kunci, mengambil kunci, dan menghapus kunci.
Kode ini menggunakan kelas dan metode Key Vault Key berikut:
Menyiapkan kerangka kerja aplikasi
Buat file teks baru dan tempel kode berikut ke file index.js.
const { KeyClient } = require("@azure/keyvault-keys"); 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 KeyClient(keyVaultUrl, credential); const uniqueString = Date.now(); const keyName = `sample-key-${uniqueString}`; const ecKeyName = `sample-ec-key-${uniqueString}`; const rsaKeyName = `sample-rsa-key-${uniqueString}`; // Create key using the general method const result = await client.createKey(keyName, "EC"); console.log("key: ", result); // Create key using specialized key creation methods const ecResult = await client.createEcKey(ecKeyName, { curve: "P-256" }); const rsaResult = await client.createRsaKey(rsaKeyName, { keySize: 2048 }); console.log("Elliptic curve key: ", ecResult); console.log("RSA Key: ", rsaResult); // Get a specific key const key = await client.getKey(keyName); console.log("key: ", key); // Or list the keys we have for await (const keyProperties of client.listPropertiesOfKeys()) { const key = await client.getKey(keyProperties.name); console.log("key: ", key); } // Update the key const updatedKey = await client.updateKeyProperties(keyName, result.properties.version, { enabled: false }); console.log("updated key: ", updatedKey); // Delete the key - the key is soft-deleted but not yet purged const deletePoller = await client.beginDeleteKey(keyName); await deletePoller.pollUntilDone(); const deletedKey = await client.getDeletedKey(keyName); console.log("deleted key: ", deletedKey); // Purge the key - the key is permanently deleted // This operation could take some time to complete console.time("purge a single key"); await client.purgeDeletedKey(keyName); console.timeEnd("purge a single key"); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
Jalankan aplikasi sampel
Jalankan aplikasi:
node index.jsMetode buat dan dapatkan menghasilkan objek JSON lengkap untuk kunci:
"key": { "key": { "kid": "https://<your-key-vault-name>.vault.azure.net/keys/<your-key-name>/<key-version>", "kty": "RSA", "keyOps": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], ... other properties based on key type }, "id": "https://<your-key-vault-name>.vault.azure.net/keys/<your-key-name>/<key-version>", "name": "<your-key-name>", "keyOperations": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], "keyType": "RSA", "properties": { "tags": undefined, "enabled": true, "notBefore": undefined, "expiresOn": undefined, "createdOn": 2025-11-29T18:29:11.000Z, "updatedOn": 2025-11-29T18:29:11.000Z, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "exportable": undefined, "releasePolicy": undefined, "vaultUrl": "https://<your-key-vault-name>.vault.azure.net", "version": "<key-version>", "name": "<your-key-name>", "managed": undefined, "id": "https://<your-key-vault-name>.vault.azure.net/keys/<your-key-name>/<key-version>" } }
Buat file teks baru dan tempelkan kode berikut ke dalam file index.ts .
import { KeyClient, KeyVaultKey, KeyProperties, DeletedKey, } from "@azure/keyvault-keys"; import { DefaultAzureCredential } from "@azure/identity"; import "dotenv/config"; 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 printKey(keyVaultKey: KeyVaultKey): void { const { name, key, id, keyType, keyOperations, properties } = keyVaultKey; console.log("Key: ", { name, key, id, keyType }); const { vaultUrl, version, enabled, expiresOn }: KeyProperties = properties; console.log("Key Properties: ", { vaultUrl, version, enabled, expiresOn }); console.log("Key Operations: ", keyOperations.join(", ")); } async function main(): Promise<void> { // Create a new KeyClient const client = new KeyClient(keyVaultUrl, credential); // Create unique key names const uniqueString = Date.now().toString(); const keyName = `sample-key-${uniqueString}`; const ecKeyName = `sample-ec-key-${uniqueString}`; const rsaKeyName = `sample-rsa-key-${uniqueString}`; // Create a EC key const ecKey = await client.createKey(keyName, "EC"); printKey(ecKey); // Elliptic curve key const ec256Key = await client.createEcKey(ecKeyName, { curve: "P-256", }); printKey(ec256Key); // RSA key const rsa2048Key = await client.createRsaKey(rsaKeyName, { keySize: 2048, }); printKey(rsa2048Key); // Get a key const key = await client.getKey(keyName); printKey(key); // Get properties of all keys for await (const keyProperties of client.listPropertiesOfKeys()) { const iteratedKey = await client.getKey(keyProperties.name); printKey(iteratedKey); } // Update key properties - disable key const updatedKey = await client.updateKeyProperties( keyName, ecKey.properties.version, { enabled: false, } ); printKey(updatedKey); // Delete key (without immediate purge) const deletePoller = await client.beginDeleteKey(keyName); await deletePoller.pollUntilDone(); // Get a deleted key const deletedKey = await client.getDeletedKey(keyName); console.log("deleted key: ", deletedKey.name); // Purge a deleted key console.time("purge a single key"); await client.purgeDeletedKey(keyName); console.timeEnd("purge a single key"); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
Jalankan aplikasi sampel
Buat aplikasi TypeScript:
tscJalankan aplikasi:
node index.jsMetode buat dan dapatkan menghasilkan objek JSON lengkap untuk kunci:
"key": { "key": { "kid": "https://<your-key-vault-name>.vault.azure.net/keys/<your-key-name>/<key-version>", "kty": "RSA", "keyOps": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], ... other properties based on key type }, "id": "https://<your-key-vault-name>.vault.azure.net/keys/<your-key-name>/<key-version>", "name": "<your-key-name>", "keyOperations": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], "keyType": "RSA", "properties": { "tags": undefined, "enabled": true, "notBefore": undefined, "expiresOn": undefined, "createdOn": 2025-11-29T18:29:11.000Z, "updatedOn": 2025-11-29T18:29:11.000Z, "recoverableDays": 90, "recoveryLevel": "Recoverable+Purgeable", "exportable": undefined, "releasePolicy": undefined, "vaultUrl": "https://<your-key-vault-name>.vault.azure.net", "version": "<key-version>", "name": "<your-key-name>", "managed": undefined, "id": "https://<your-key-vault-name>.vault.azure.net/keys/<your-key-name>/<key-version>" } }
Mengintegrasikan dengan App Configuration
SDK Azure menyediakan metode pembantu, parseKeyVaultKeyIdentifier, untuk mengurai ID Kunci Key Vault yang diberikan. Ini diperlukan jika Anda menggunakan referensi App Configuration ke Key Vault. Konfigurasi Aplikasi menyimpan ID Kunci dari Key Vault. Anda memerlukan metode parseKeyVaultKeyIdentifier untuk menguraikan ID tersebut agar mendapatkan nama kunci. Setelah mendapatkan nama kunci, Anda dapat memperoleh nilai kunci saat ini menggunakan kode dari panduan cepat ini.
Langkah berikutnya
Dalam panduan cepat ini, Anda akan membuat brankas kunci, menyimpan kunci, dan mengambil kunci tersebut. Untuk mempelajari lebih lanjut tentang Key Vault dan cara mengintegrasikannya dengan aplikasi Anda, lanjutkan ke artikel ini.