Aracılığıyla paylaş


Hızlı Başlangıç: JavaScript için Azure Key Vault gizli istemci kitaplığı

JavaScript için Azure Key Vault gizli istemci kitaplığını kullanmaya başlayın. Azure Key Vault gizli bilgileri güvenli bir şekilde depolayan 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 bir Azure Anahtar Kasası'ndan gizli anahtarlar oluşturmayı, almayı ve silmeyi öğreneceksiniz.

Key Vault istemci kitaplığı kaynakları:

API referans belgeleri | Kitaplık kaynak kodu | Paket (npm)

Key Vault ve gizli bilgiler hakkında daha fazla bilgi için bkz:

Önkoşullar

Önkoşullar

Bu hızlı başlangıçta Azure CLI çalıştırdığınız varsayılır.

Azure'da oturum açma

  1. login komutunu çalıştırın.

    az login
    

    CLI 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.

  2. Tarayıcıda hesabınızın kimlik bilgileriyle oturum açın.

Kaynak grubu ve Key Vault oluşturma

  1. az group create Kaynak grubu oluşturmak için komutunu kullanın:

    az group create --name "myResourceGroup" --location "EastUS"
    

    İsterseniz "EastUS" değerini size daha yakın bir konuma değiştirebilirsiniz.

  2. az keyvault create kullanarak anahtar kasası oluşturun.

    az keyvault create --name "<vault-name>" --resource-group "myResourceGroup" --enable-rbac-authorization true --enable-purge-protection true
    

    Azure genelinde benzersiz bir adla <vault-name> değiştirin. Genellikle kişisel veya şirket adınızı diğer numaralar ve tanımlayıcılarla birlikte kullanırsınız.

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 Secrets 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).

Yeni Node.js uygulaması oluşturma

Anahtar kasanızı kullanan bir Node.js uygulaması oluşturun.

  1. Terminalde adlı key-vault-node-app bir klasör oluşturun ve bu klasöre geçin:

    mkdir key-vault-node-app && cd key-vault-node-app
    
  2. Node.js projesini başlatın:

    npm init -y
    

Key Vault paketlerini yükleme

  1. Terminali kullanarak Node.js için Azure Key Vault gizli dizileri istemci kitaplığını @azure/keyvault-secrets yükleyin.

    npm install @azure/keyvault-secrets
    
  2. Key Vault'ta kimlik doğrulaması yapmak için Azure Identity istemci kitaplığını @azure/kimlik paketini yükleyin.

    npm install @azure/identity
    

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

Aşağıdaki kod örnekleri bir istemci oluşturmayı, gizli anahtar belirlemeyi, gizli anahtar almayı ve gizli anahtar silmeyi gösterir.

Bu kod aşağıdaki Key Vault Gizli Dizi 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 { 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);
    });
    

Örnek uygulamayı çalıştırın

  1. Uygulamayı çalıştırın:

    node index.js
    
  2. Oluşturma ve alma yöntemleri gizli dizi için tam bir JSON nesnesi döndürür:

    {
        "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"
        }
    }
    

    Güncelleştirme yöntemi, özellik adı/değer çiftlerini döndürür:

    "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"
    
  • Yeni metin dosyası oluşturun ve aşağıdaki kodu index.ts dosyasına yapıştırın.

    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);
    });
    

Örnek uygulamayı çalıştırın

  1. TypeScript uygulamasını oluşturun:

    tsc
    
  2. Uygulamayı çalıştırın:

    node index.js
    
  3. Oluşturma ve alma yöntemleri gizli dizi için tam bir JSON nesnesi döndürür:

    {
        "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"
        }
    }
    

    Güncelleştirme yöntemi, özellik adı/değer çiftlerini döndürür:

    "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"
    

Uygulama Yapılandırması ile entegrasyon

Azure SDK, verilen Key Vault Gizli Dizi Kimliğini ayrıştırmak için parseKeyVaultSecretIdentifier adlı bir yardımcı yöntem sağlar. Bu, Uygulama Yapılandırması başvurularını Key Vault ile kullanıyorsanız gereklidir. Uygulama Yapılandırması, Key Vault Gizli Kimliği depolar. Gizli dizi adını almak için bu kimliği ayrıştırmak amacıyla parseKeyVaultSecretIdentifier yöntemine ihtiyacınız vardır. Gizli adı aldıktan sonra, bu hızlı başlangıç rehberindeki kodu kullanarak geçerli gizli değeri alabilirsiniz.

Sonraki adımlar

Bu hızlı başlangıçta bir anahtar deposu oluşturdunuz, bir gizli bilgi depoladınız ve bu gizli bilgiyi elde ettiniz. Key Vault ve uygulamalarınızla tümleştirme hakkında daha fazla bilgi edinmek için aşağıdaki makalelere geçin.