Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
JavaScript için Azure Key Vault sertifika istemci kitaplığını kullanmaya başlayın. Azure Key Vault , sertifikalar için güvenli bir depo sağlayan bir bulut hizmetidir. Anahtarları, parolaları, sertifikaları ve diğer gizli dizileri güvenli bir şekilde depolayabilirsiniz. Azure anahtar kasaları Azure portalı aracılığıyla oluşturulup yönetilebilir. Bu hızlı başlangıçta, JavaScript istemci kitaplığını kullanarak azure anahtar kasasından sertifika oluşturmayı, almayı ve silmeyi öğreneceksiniz.
Key Vault istemci kitaplığı kaynakları:
API referans belgeleri | Kitaplık kaynak kodu | Paket (npm)
Key Vault ve sertifikalar hakkında daha fazla bilgi için bkz:
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun.
- Geçerli Node.js LTS.
- Azure CLI
- Mevcut bir Key Vault - şunu kullanarak bir Key Vault oluşturabilirsiniz:
- Azure aboneliği - ücretsiz bir abonelik oluşturun.
- Geçerli Node.js LTS.
- TypeScript 5+
- Azure CLI
- Mevcut bir Key Vault - şunu kullanarak bir Key Vault oluşturabilirsiniz:
Bu hızlı başlangıçta Azure CLI çalıştırdığınız varsayılır.
Azure'da oturum açma
loginkomutunu çalıştırın.az loginCLI varsayılan tarayıcınızı açabiliyorsa bunu yapar ve bir Azure oturum açma sayfası yükler.
Aksi takdirde https://aka.ms/devicelogin adresinde bir tarayıcı sayfası açın ve terminalinizde görüntülenen yetkilendirme kodunu girin.
Tarayıcıda hesabınızın kimlik bilgileriyle oturum açın.
Yeni Node.js uygulaması oluşturma
Anahtar kasanızı kullanan bir Node.js uygulaması oluşturun.
Terminalde adlı
key-vault-node-appbir klasör oluşturun ve bu klasöre geçin:mkdir key-vault-node-app && cd key-vault-node-appNode.js projesini başlatın:
npm init -y
Key Vault paketlerini yükleme
Terminali kullanarak Node.js için Azure Key Vault gizli dizi kitaplığını @azure/keyvault-certificates yükleyin.
npm install @azure/keyvault-certificatesKey Vault'ta kimlik doğrulaması yapmak için azure kimlik istemci kitaplığını (@azure/kimlik) yükleyin.
npm install @azure/identity
Anahtar kasanıza erişim izni verin
Rol Tabanlı Erişim Denetimi (RBAC) aracılığıyla anahtar kasanıza izinler almak için "Kullanıcı Asıl Adı"na (UPN) bir rol atamak üzere Azure CLI komutunu az role assignment create kullanın.
az role assignment create --role "Key Vault Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
, <upn>ve <subscription-id> değerlerini gerçek değerlerinizle değiştirin<vault-name>. Eğer farklı bir kaynak grubu adı kullandıysanız, "myResourceGroup" yerine bunu koyun. UPN'niz genellikle bir e-posta adresi biçiminde olur (ör. username@domain.com).
Ortam değişkenlerini belirleme
Bu uygulama, KEY_VAULT_URL adlı bir ortam değişkeni olarak anahtar kasası uç noktasını kullanıyor.
set KEY_VAULT_URL=<key-vault-endpoint>
Kimlik doğrulaması yapma ve istemci oluşturma
Çoğu Azure hizmeti için uygulama istekleri yetkilendirilmelidir.
Azure Identity istemci kitaplığı tarafından sağlanan DefaultAzureCredential yöntemini kullanmak, kodunuzda Azure hizmetlerine parolasız bağlantılar uygulamak için önerilen yaklaşımdır.
DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim) farklı kimlik doğrulama yöntemleri kullanmasını sağlar.
Bu hızlı başlangıçta, DefaultAzureCredential Azure CLI'da oturum açmış yerel geliştirme kullanıcısının kimlik bilgilerini kullanarak anahtar kasasında kimlik doğrulaması yapar. Uygulama Azure'a dağıtıldığında, aynı DefaultAzureCredential kod App Service, Sanal Makine veya diğer hizmetlere atanan yönetilen kimliği otomatik olarak bulabilir ve kullanabilir. Daha fazla bilgi için Yönetilen Kimliğe Genel Bakış'a bkz.
Bu kodda anahtar kasası istemcisini oluşturmak için anahtar kasanızın uç noktası kullanılır. Uç nokta formatı https://<vault-name>.vault.azure.net şeklinde görünür, ancak bağımsız bulutlar için değişebilir. Anahtar kasasında kimlik doğrulaması hakkında daha fazla bilgi için Geliştirici Kılavuzu'na bakın.
Kod örneği
Bu kod aşağıdaki Key Vault Sertifika sınıflarını ve yöntemlerini kullanır:
Uygulama çerçevesini ayarlama
Yeni metin dosyası oluşturun ve aşağıdaki kodu index.js dosyasına yapıştırın.
const { CertificateClient, DefaultCertificatePolicy } = require("@azure/keyvault-certificates"); 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 CertificateClient(keyVaultUrl, credential); const uniqueString = new Date().getTime(); const certificateName = `cert${uniqueString}`; // Creating a self-signed certificate const createPoller = await client.beginCreateCertificate( certificateName, DefaultCertificatePolicy ); const pendingCertificate = createPoller.getResult(); console.log("Certificate: ", pendingCertificate); // To read a certificate with their policy: let certificateWithPolicy = await client.getCertificate(certificateName); // Note: It will always read the latest version of the certificate. console.log("Certificate with policy:", certificateWithPolicy); // To read a certificate from a specific version: const certificateFromVersion = await client.getCertificateVersion( certificateName, certificateWithPolicy.properties.version ); // Note: It will not retrieve the certificate's policy. console.log("Certificate from a specific version:", certificateFromVersion); const updatedCertificate = await client.updateCertificateProperties(certificateName, "", { tags: { customTag: "value" } }); console.log("Updated certificate:", updatedCertificate); // Updating the certificate's policy: await client.updateCertificatePolicy(certificateName, { issuerName: "Self", subject: "cn=MyOtherCert" }); certificateWithPolicy = await client.getCertificate(certificateName); console.log("updatedCertificate certificate's policy:", certificateWithPolicy.policy); // delete certificate const deletePoller = await client.beginDeleteCertificate(certificateName); const deletedCertificate = await deletePoller.pollUntilDone(); console.log("Recovery Id: ", deletedCertificate.recoveryId); console.log("Deleted Date: ", deletedCertificate.deletedOn); console.log("Scheduled Purge Date: ", deletedCertificate.scheduledPurgeDate); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
Örnek uygulamayı çalıştırın
Uygulamayı çalıştırın:
node index.jsOluşturma ve alma yöntemleri sertifika için tam bir JSON nesnesi döndürür:
{ "keyId": undefined, "secretId": undefined, "name": "<certificate-name>", "reuseKey": false, "keyCurveName": undefined, "exportable": true, "issuerName": 'Self', "certificateType": undefined, "certificateTransparency": undefined }, "properties": { "createdOn": 2021-11-29T20:17:45.000Z, "updatedOn": 2021-11-29T20:17:45.000Z, "expiresOn": 2022-11-29T20:17:45.000Z, "id": "https://<key-vault-name>.vault.azure.net/certificates/<certificate-name>/<certificate-version>", "enabled": false, "notBefore": 2021-11-29T20:07:45.000Z, "recoveryLevel": "Recoverable+Purgeable", "name": "<certificate-name>", "vaultUrl": "https://<key-vault-name>.vault.azure.net", "version": "<certificate-version>", "tags": undefined, "x509Thumbprint": undefined, "recoverableDays": 90 } }
Yeni metin dosyası oluşturun ve aşağıdaki kodu index.ts dosyasına yapıştırın.
import { CertificateClient, DefaultCertificatePolicy, KeyVaultCertificate, DeletedCertificate, CertificatePolicy, KeyVaultCertificateWithPolicy, } from "@azure/keyvault-certificates"; 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 printCertificate( certificate: KeyVaultCertificate | KeyVaultCertificateWithPolicy ): void { console.log("-- printCertificate ---------------------------"); // if policy is defined, it's a KeyVaultCertificateWithPolicy if ((certificate as KeyVaultCertificateWithPolicy).policy) { const { name, properties, policy } = certificate as KeyVaultCertificateWithPolicy; const { createdOn, updatedOn, expiresOn, vaultUrl, version, tags } = properties; console.log("Certificate: ", { name, createdOn, updatedOn, expiresOn, vaultUrl, version, }); console.log("Certificate Policy: ", policy); printObjectProperties(tags); return; } else { const { name, properties } = certificate; const { createdOn, updatedOn, expiresOn, vaultUrl, version, tags } = properties; console.log("Certificate: ", { name, createdOn, updatedOn, expiresOn, vaultUrl, version, }); printObjectProperties(tags); } } // Object properties are tags and CertificatePolicy function printObjectProperties(obj: Record<string, any>): void { if (!obj) return; console.log("-- printObjectProperties ---------------------------"); Object.entries(obj).forEach(([key, value]) => { if (key === "lifetimeActions") { console.log(`${key}: ${JSON.stringify(value)}`); } else { console.log(`${key}: ${value}`); } }); } function printDeletedCertificate(deletedCertificate: DeletedCertificate): void { const { recoveryId, deletedOn, scheduledPurgeDate } = deletedCertificate; console.log("Deleted Certificate: ", { recoveryId, deletedOn, scheduledPurgeDate, }); } async function main(): Promise<void> { // Create a new CertificateClient const client = new CertificateClient(keyVaultUrl, credential); // Create a unique certificate name const uniqueString = new Date().getTime().toString(); const certificateName = `cert${uniqueString}`; // Creating a self-signed certificate const createPoller = await client.beginCreateCertificate( certificateName, DefaultCertificatePolicy ); // Get the created certificate const pendingCertificate = await createPoller.getResult(); printCertificate(pendingCertificate); // Get certificate by name let certificateWithPolicy = await client.getCertificate(certificateName); printCertificate(pendingCertificate); // Get certificate by version const certificateFromVersion = await client.getCertificateVersion( certificateName, certificateWithPolicy.properties.version! ); printCertificate(certificateFromVersion); // Update properties of the certificate const updatedCertificate = await client.updateCertificateProperties( certificateName, certificateWithPolicy.properties.version!, { tags: { customTag: "my value", }, } ); printCertificate(updatedCertificate); // Updating the certificate's policy const certificatePolicy = await client.updateCertificatePolicy( certificateName, { issuerName: "Self", subject: "cn=MyOtherCert", } ); printObjectProperties(certificatePolicy); // Get certificate again to see the updated policy certificateWithPolicy = await client.getCertificate(certificateName); printCertificate(certificateWithPolicy); // Delete certificate const deletePoller = await client.beginDeleteCertificate(certificateName); const deletedCertificate = await deletePoller.pollUntilDone(); printDeletedCertificate(deletedCertificate); } main().catch((error) => { console.error("An error occurred:", error); process.exit(1); });
Örnek uygulamayı çalıştırın
TypeScript uygulamasını oluşturun:
tscUygulamayı çalıştırın:
node index.jsOluşturma ve alma yöntemleri sertifika için tam bir JSON nesnesi döndürür:
{ "keyId": undefined, "secretId": undefined, "name": "<certificate-name>", "reuseKey": false, "keyCurveName": undefined, "exportable": true, "issuerName": 'Self', "certificateType": undefined, "certificateTransparency": undefined }, "properties": { "createdOn": 2021-11-29T20:17:45.000Z, "updatedOn": 2021-11-29T20:17:45.000Z, "expiresOn": 2022-11-29T20:17:45.000Z, "id": "https://<key-vault-name>.vault.azure.net/certificates/<certificate-name>/<certificate-version>", "enabled": false, "notBefore": 2021-11-29T20:07:45.000Z, "recoveryLevel": "Recoverable+Purgeable", "name": "<certificate-name>", "vaultUrl": "https://<key-vault-name>.vault.azure.net", "version": "<certificate-version>", "tags": undefined, "x509Thumbprint": undefined, "recoverableDays": 90 } }
Uygulama Yapılandırması ile entegrasyon
Azure SDK, Key Vault sertifika kimliğini ayrıştırmak için gereken parseKeyVaultCertificateIdentifier adlı bir yardımcı yöntem sağlar. Bu, App Configuration başvurularını Key Vault'a yaptığınızda gereklidir. Uygulama Yapılandırması, Key Vault sertifika kimliğini depolar. Sertifika adını almak için bu kimliği ayrıştırmak için parseKeyVaultCertificateIdentifier yöntemine ihtiyacınız vardır. Sertifika adını aldıktan sonra, bu hızlı başlangıçtaki kodu kullanarak geçerli sertifikayı alabilirsiniz.
Sonraki adımlar
Bu hızlı başlangıç kılavuzunda, bir anahtar kasası oluşturdunuz, bir sertifika depoladınız ve bu sertifikayı geri aldınız. Key Vault ve uygulamalarınızla tümleştirme hakkında daha fazla bilgi edinmek için bu makalelere geçin.
- Azure Key Vault'a Genel Bakış
- Sertifikalara genel bakış belgesini okuyun
- App Service Uygulamasından Access Key Vault Öğreticisi'ne bakın
- Sanal Makineden Access Key Vault Öğreticisi'ne bakın
- Azure Key Vault geliştirici kılavuzuna bakın
- Key Vault güvenliğine genel bakış'a göz atın
- Sertifikalara özgü güvenlik en iyi yöntemlerini gözden geçirme