JavaScript용 Azure Key Vault 키 클라이언트 라이브러리 - 버전 4.8.0

Azure Key Vault 보안 키를 사용하여 인증 키, 스토리지 계정 키, 데이터 암호화 키, .pfx 파일 및 암호를 암호화할 수 있는 서비스입니다. Azure Key Vault 대해 자세히 알아보려면 Azure Key Vault란?을 검토할 수 있습니다.

Azure Key Vault 관리형 HSM은 FIPS 140-2 수준 3 유효성이 검사된 HSM을 사용하여 클라우드 애플리케이션에 대한 암호화 키를 보호할 수 있는 완전 관리형 고가용성 단일 테넌트 표준 규격 클라우드 서비스입니다. Azure Key Vault 관리형 HSM에 대해 자세히 알아보려면 Azure Key Vault 관리형 HSM이란?을 검토할 수 있습니다.

Azure Key Vault 키 라이브러리 클라이언트는 관리되는 HSM에 대해 실행할 때 RSA 키, EC(타원 곡선) 키 및 대칭(10월) 키를 지원하며, 각각 HSM(하드웨어 보안 모듈)에서 해당 지원을 제공합니다. 키와 해당 버전을 만들고, 검색, 업데이트, 삭제, 제거, 백업, 복원 및 나열하는 작업을 제공합니다.

Node.js 애플리케이션에서 Azure Key Vault 키용 클라이언트 라이브러리를 사용하여 다음을 수행합니다.

  • 선택적으로 HSM(하드웨어 보안 모듈)에서 지원되는 타원 곡선 또는 RSA 암호화를 사용하여 키를 만듭니다.
  • 키를 가져오고, 삭제하고, 업데이트합니다.
  • 특성을 사용하여 하나 이상의 키와 삭제된 키를 가져옵니다.
  • 삭제된 키를 복구하고 백업된 키를 복원합니다.
  • 키의 버전을 가져옵니다.

이 라이브러리에서 사용할 수 있는 암호화 클라이언트를 사용하면 다음에도 액세스할 수 있습니다.

  • Encrypting
  • 암호 해독
  • 서명
  • 확인 중
  • 키 래핑
  • 키 래핑 해제

참고: 이 패키지는 Azure Key Vault 서비스 제한으로 인해 브라우저에서 사용할 수 없습니다. 지침은 이 문서를 참조하세요.

주요 링크:

시작

현재 지원되는 환경

필수 구성 요소

패키지 설치

npm을 사용하여 Azure Key Vault 키 클라이언트 라이브러리 설치

npm install @azure/keyvault-keys

ID 라이브러리 설치

Azure Key Vault 클라이언트는 Azure ID 라이브러리를 사용하여 인증합니다. npm을 사용하여 설치

npm install @azure/identity

TypeScript 구성

TypeScript 사용자는 노드 형식 정의를 설치해야 합니다.

npm install @types/node

또한 tsconfig.json 사용하도록 설정 compilerOptions.allowSyntheticDefaultImports 해야 합니다. 를 사용하도록 설정한 compilerOptions.esModuleInteropallowSyntheticDefaultImports 경우 는 기본적으로 사용하도록 설정됩니다. 자세한 내용은 TypeScript의 컴파일러 옵션 핸드북 을 참조하세요.

주요 개념

  • 키 클라이언트는 JavaScript 애플리케이션에서 Azure Key Vault API의 키와 관련된 API 메서드와 상호 작용하는 기본 인터페이스입니다. 초기화되면 키를 만들고, 읽고, 업데이트하고, 삭제하는 데 사용할 수 있는 기본 메서드 집합을 제공합니다.
  • 키 버전은 Key Vault 키의 버전입니다. 사용자가 고유 키 이름에 값을 할당할 때마다 해당 키의 새 버전 이 만들어집니다. 특정 버전이 쿼리에 제공되지 않는 한 이름으로 키를 검색하면 항상 할당된 최신 값이 반환됩니다.
  • 일시 삭제 를 사용하면 Key Vault가 삭제 및 제거를 두 개의 개별 단계로 지원할 수 있으므로 삭제된 키는 즉시 손실되지 않습니다. 이는 Key Vault 일시 삭제를 사용하도록 설정한 경우에만 발생합니다.
  • 생성된 키에서 키 백업 을 생성할 수 있습니다. 이러한 백업은 이진 데이터로 제공되며 이전에 삭제된 키를 다시 생성하는 데만 사용할 수 있습니다.
  • 암호화 클라이언트는 Key Vault API의 키 API 메서드와 상호 작용하는 별도의 인터페이스입니다. 이 클라이언트는 Key Vault 이미 만들어진 키를 사용하여 실행할 수 있는 암호화 작업에만 중점을 둡니다. 이 클라이언트에 대한 자세한 내용은 암호화 섹션을 참조하세요 .

Azure Active Directory를 사용하여 인증

Key Vault 서비스는 Azure Active Directory를 사용하여 API에 대한 요청을 인증합니다. 패키지는 @azure/identity 애플리케이션에서 이 작업을 수행하는 데 사용할 수 있는 다양한 자격 증명 형식을 제공합니다. 에 대한 추가 정보는 시작하기 위한 @azure/identity 자세한 내용과 샘플을 제공합니다.

Azure Key Vault 서비스와 상호 작용하려면 클래스의 instanceKeyClient, 자격 증명 모음 URL 및 자격 증명 개체를 만들어야 합니다. 이 문서에 표시된 예제에서는 라는 자격 증명 개체를 사용합니다. 이 개체 DefaultAzureCredential는 로컬 개발 및 프로덕션 환경을 비롯한 대부분의 시나리오에 적합합니다. 또한 프로덕션 환경에서 인증에 관리 ID 를 사용하는 것이 좋습니다.

다양한 인증 방법 및 해당 자격 증명 유형에 대한 자세한 내용은 Azure ID 설명서에서 확인할 수 있습니다.

다음은 빠른 예제입니다. 먼저 및 를 KeyClient가져옵니다DefaultAzureCredential.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

가져온 후에는 Key Vault 서비스에 연결할 수 있습니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

// Build the URL to reach your key vault
const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`; // or `https://${vaultName}.managedhsm.azure.net` for managed HSM.

// Lastly, create our keys client and connect to the service
const client = new KeyClient(url, credential);

Azure Key Vault 서비스 API 버전 지정

기본적으로 이 패키지는 최신 Azure Key Vault 서비스 버전()을 7.2사용합니다. 아래와 같이 클라이언트 생성자에서 옵션을 serviceVersion 설정하여 사용 중인 서비스 버전을 변경할 수 있습니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

// Change the Azure Key Vault service API version being used via the `serviceVersion` option
const client = new KeyClient(url, credential, {
  serviceVersion: "7.0", // Or 7.1
});

예제

다음 섹션에서는 Azure Key Vault 키를 사용하는 몇 가지 일반적인 작업을 다루는 코드 조각을 제공합니다. 여기서 다루는 시나리오는 다음으로 구성됩니다.

키 만들기

createKey는 Azure Key Vault 저장할 키를 만듭니다. 이름이 같은 키가 이미 있는 경우 새 버전의 키가 만들어집니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const result = await client.createKey(keyName, "RSA");
  console.log("result: ", result);
}

main();

에 전송된 createKey 두 번째 매개 변수는 키의 형식입니다. 지원되는 키 유형은 SKU 및 Azure Key Vault 또는 Azure Managed HSM을 사용하는지 여부에 따라 달라집니다. 지원되는 키 유형의 최신 목록은 키 정보를 참조하세요.

키 가져오기

자격 증명 모음에서 키를 다시 읽는 가장 간단한 방법은 이름으로 키를 가져오는 것입니다. 그러면 키의 최신 버전이 검색됩니다. 선택적 매개 변수의 일부로 지정하는 경우 필요에 따라 다른 버전의 키를 가져올 수 있습니다.

getKey는 Key Vault 이전 저장소의 키를 검색합니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const latestKey = await client.getKey(keyName);
  console.log(`Latest version of the key ${keyName}: `, latestKey);
  const specificKey = await client.getKey(keyName, { version: latestKey.properties.version! });
  console.log(`The key ${keyName} at the version ${latestKey.properties.version!}: `, specificKey);
}

main();

특성을 사용하여 키 만들기 및 업데이트

Key Vault 모든 키에 다음 특성을 할당할 수도 있습니다.

  • tags: 키를 검색하고 필터링하는 데 사용할 수 있는 키-값 집합입니다.
  • keyOps: 이 키가 수행할 수 있는 작업의 배열입니다(encrypt, , decrypt, signverify, wrapKey, unwrapKey).
  • enabled: 키 값을 읽을 수 있는지 여부를 결정하는 부울 값입니다.
  • notBefore: 키 값을 검색할 수 있는 지정된 날짜입니다.
  • expires: 키 값을 검색할 수 없는 지정된 날짜입니다.

이러한 특성을 가진 개체는 다음과 같이 키의 이름과 값 바로 뒤에 있는 의 createKey세 번째 매개 변수로 보낼 수 있습니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const result = await client.createKey(keyName, "RSA", {
    enabled: false,
  });
  console.log("result: ", result);
}

main();

이렇게 하면 동일한 키의 새 버전이 만들어지며, 이 키에는 제공된 최신 특성이 포함됩니다.

특성은 다음과 같이 를 사용하여 기존 키 버전으로 updateKeyProperties업데이트할 수도 있습니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const result = await client.createKey(keyName, "RSA");
  await client.updateKeyProperties(keyName, result.properties.version, {
    enabled: false,
  });
}

main();

키 삭제

메서드는 beginDeleteKey 키 삭제를 시작합니다. 이 프로세스는 필요한 리소스를 사용할 수 있는 즉시 백그라운드에서 발생합니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const poller = await client.beginDeleteKey(keyName);
  await poller.pollUntilDone();
}

main();

Key Vault 일시 삭제를 사용하도록 설정한 경우 이 작업은 키에 삭제된 키로만 레이블을 지정합니다. 삭제된 키는 업데이트할 수 없습니다. 읽기, 복구 또는 제거만 가능합니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const poller = await client.beginDeleteKey(keyName);

  // You can use the deleted key immediately:
  const deletedKey = poller.getResult();

  // The key is being deleted. Only wait for it if you want to restore it or purge it.
  await poller.pollUntilDone();

  // You can also get the deleted key this way:
  await client.getDeletedKey(keyName);

  // Deleted keys can also be recovered or purged:

  // recoverDeletedKey also returns a poller, just like beginDeleteKey.
  const recoverPoller = await client.beginRecoverDeletedKey(keyName);
  await recoverPoller.pollUntilDone();

  // And here is how to purge a deleted key
  await client.purgeDeletedKey(keyName);
}

main();

키는 완전히 삭제 beginDeleteKey 되는 데 다소 시간이 걸리기 때문에 지침에 따라 기본 장기 실행 작업을 추적하는 Poller 개체를 반환합니다. https://azure.github.io/azure-sdk/typescript_design.html#ts-lro

수신된 폴러를 사용하면 를 호출하여 삭제된 키를 가져올 수 있습니다 poller.getResult(). 키가 삭제될 때까지 개별 서비스 호출을 실행하거나 프로세스가 완료될 때까지 대기하여 삭제가 완료될 때까지 기다릴 수도 있습니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const poller = await client.beginDeleteKey(keyName);

  // You can use the deleted key immediately:
  let deletedKey = poller.getResult();

  // Or you can wait until the key finishes being deleted:
  deletedKey = await poller.pollUntilDone();
  console.log(deletedKey);
}

main();

키가 완전히 삭제될 때까지 기다리는 또 다른 방법은 다음과 같이 개별 호출을 수행하는 것입니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");
const { delay } = require("@azure/core-util");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  const poller = await client.beginDeleteKey(keyName);

  while (!poller.isDone()) {
    await poller.poll();
    await delay(5000);
  }

  console.log(`The key ${keyName} is fully deleted`);
}

main();

자동 키 회전 구성

KeyClient를 사용하여 회전 정책을 지정하여 키에 대한 자동 키 회전을 구성할 수 있습니다. 또한 KeyClient는 지정된 키의 새 버전을 만들어 주문형 키를 회전하는 메서드를 제공합니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const url = `https://<YOUR KEYVAULT NAME>.vault.azure.net`;
const client = new KeyClient(url, new DefaultAzureCredential());

async function main() {
  const keyName = "MyKeyName";

  // Set the key's automated rotation policy to rotate the key 30 days before expiry.
  const policy = await client.updateKeyRotationPolicy(keyName, {
    lifetimeActions: [
      {
        action: "Rotate",
        timeBeforeExpiry: "P30D",
      },
    ],
    // You may also specify the duration after which any newly rotated key will expire.
    // In this case, any new key versions will expire after 90 days.
    expiresIn: "P90D",
  });

  // You can get the current key rotation policy of a given key by calling the getKeyRotationPolicy method.
  const currentPolicy = await client.getKeyRotationPolicy(keyName);

  // Finally, you can rotate a key on-demand by creating a new version of the given key.
  const rotatedKey = await client.rotateKey(keyName);
}

main();

키 목록 반복

KeyClient를 사용하여 Azure Key Vault 모든 키와 삭제된 모든 키 및 특정 키 버전을 검색하고 반복할 수 있습니다. 다음 API 메서드를 사용할 수 있습니다.

  • listPropertiesOfKeys 는 삭제되지 않은 모든 키를 최신 버전에서만 이름으로 나열합니다.
  • listDeletedKeys 는 삭제된 모든 키를 최신 버전에서만 이름으로 나열합니다.
  • listPropertiesOfKeyVersions 는 키 이름을 기반으로 하는 키의 모든 버전을 나열합니다.

다음과 같이 사용할 수 있습니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  for await (let keyProperties of client.listPropertiesOfKeys()) {
    console.log("Key properties: ", keyProperties);
  }
  for await (let deletedKey of client.listDeletedKeys()) {
    console.log("Deleted: ", deletedKey);
  }
  for await (let versionProperties of client.listPropertiesOfKeyVersions(keyName)) {
    console.log("Version properties: ", versionProperties);
  }
}

main();

이러한 모든 메서드는 사용 가능한 모든 결과를 한 번에 반환합니다. 페이지별로 검색하려면 다음과 같이 사용하려는 API 메서드를 호출한 직후에 를 추가 .byPage() 합니다.

const { DefaultAzureCredential } = require("@azure/identity");
const { KeyClient } = require("@azure/keyvault-keys");

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const client = new KeyClient(url, credential);

const keyName = "MyKeyName";

async function main() {
  for await (let page of client.listPropertiesOfKeys().byPage()) {
    for (let keyProperties of page) {
      console.log("Key properties: ", keyProperties);
    }
  }
  for await (let page of client.listDeletedKeys().byPage()) {
    for (let deletedKey of page) {
      console.log("Deleted key: ", deletedKey);
    }
  }
  for await (let page of client.listPropertiesOfKeyVersions(keyName).byPage()) {
    for (let versionProperties of page) {
      console.log("Version: ", versionProperties);
    }
  }
}

main();

암호화

이 라이브러리는 를 통해 CryptographyClient사용할 수 있는 암호화 유틸리티 집합도 제공합니다. 와 KeyClientCryptographyClient 마찬가지로 는 제공된 자격 증명 집합을 사용하여 Azure Key Vault 연결합니다. 연결되면 키를 CryptographyClient 암호화, 암호 해독, 서명, 확인, 래핑 및 래핑 해제할 수 있습니다.

다음에는 와 마찬가지로 KeyClient키 자격 증명 모음 서비스에 연결할 수 있습니다. 연결하려는 키 자격 증명 모음에서 환경 변수에 일부 설정을 복사해야 합니다. 환경이 환경에 있으면 다음 코드를 사용하여 액세스할 수 있습니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  // Create or retrieve a key from the keyvault
  let myKey = await keysClient.createKey("MyKey", "RSA");

  // Lastly, create our cryptography client and connect to the service
  const cryptographyClient = new CryptographyClient(myKey, credential);
}

main();

Encrypt

encrypt 는 메시지를 암호화합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey.id, credential);

  const encryptResult = await cryptographyClient.encrypt({
    algorithm: "RSA1_5",
    plaintext: Buffer.from("My Message"),
  });
  console.log("encrypt result: ", encryptResult.result);
}

main();

암호 해독

decrypt 는 암호화된 메시지의 암호를 해독합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey.id, credential);

  const encryptResult = await cryptographyClient.encrypt({
    algorithm: "RSA1_5",
    plaintext: Buffer.from("My Message"),
  });
  console.log("encrypt result: ", encryptResult.result);

  const decryptResult = await cryptographyClient.decrypt({
    algorithm: "RSA1_5",
    ciphertext: encryptResult.result,
  });
  console.log("decrypt result: ", decryptResult.result.toString());
}

main();

Sign

sign 는 서명으로 메시지의 다이제스트(해시)에 암호화적으로 서명합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";
import { createHash } from "crypto";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey, credential);

  const signatureValue = "MySignature";
  let hash = createHash("sha256");

  let digest = hash.update(signatureValue).digest();
  console.log("digest: ", digest);

  const signResult = await cryptographyClient.sign("RS256", digest);
  console.log("sign result: ", signResult.result);
}

main();

데이터 서명

signData 은 서명을 사용하여 메시지에 암호화적으로 서명합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey, credential);

  const signResult = await cryptographyClient.signData("RS256", Buffer.from("My Message"));
  console.log("sign result: ", signResult.result);
}

main();

확인

verify 은 서명된 다이제스트가 지정된 서명으로 서명되었는지 암호화하여 확인합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";
import { createHash } from "crypto";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey, credential);

  const hash = createHash("sha256");
  hash.update("My Message");
  const digest = hash.digest();

  const signResult = await cryptographyClient.sign("RS256", digest);
  console.log("sign result: ", signResult.result);

  const verifyResult = await cryptographyClient.verify("RS256", digest, signResult.result);
  console.log("verify result: ", verifyResult.result);
}

main();

데이터 확인

verifyData 은 서명된 메시지가 지정된 서명으로 서명되었는지 암호화하여 확인합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey, credential);

  const buffer = Buffer.from("My Message");

  const signResult = await cryptographyClient.signData("RS256", buffer);
  console.log("sign result: ", signResult.result);

  const verifyResult = await cryptographyClient.verifyData("RS256", buffer, signResult.result);
  console.log("verify result: ", verifyResult.result);
}

main();

키 래핑

wrapKey 는 암호화 계층을 사용하여 키를 래핑합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey, credential);

  const wrapResult = await cryptographyClient.wrapKey("RSA-OAEP", Buffer.from("My Key"));
  console.log("wrap result:", wrapResult.result);
}

main();

키 래프 해제

unwrapKey 래핑된 키를 래핑 해제합니다.

import { DefaultAzureCredential } from "@azure/identity";
import { KeyClient, CryptographyClient } from "@azure/keyvault-keys";

const credential = new DefaultAzureCredential();

const vaultName = "<YOUR KEYVAULT NAME>";
const url = `https://${vaultName}.vault.azure.net`;

const keysClient = new KeyClient(url, credential);

async function main() {
  let myKey = await keysClient.createKey("MyKey", "RSA");
  const cryptographyClient = new CryptographyClient(myKey, credential);

  const wrapResult = await cryptographyClient.wrapKey("RSA-OAEP", Buffer.from("My Key"));
  console.log("wrap result:", wrapResult.result);

  const unwrapResult = await cryptographyClient.unwrapKey("RSA-OAEP", wrapResult.result);
  console.log("unwrap result: ", unwrapResult.result);
}

main();

문제 해결

다양한 오류 시나리오를 진단하는 방법에 대한 자세한 내용은 문제 해결 가이드 를 참조하세요.

로깅을 사용하도록 설정하면 실패에 대한 유용한 정보를 파악하는 데 도움이 될 수 있습니다. HTTP 요청 및 응답 로그를 보려면 AZURE_LOG_LEVEL 환경 변수를 info로 설정합니다. 또는 @azure/logger에서 setLogLevel을 호출하여 런타임에 로깅을 사용하도록 설정할 수 있습니다.

const { setLogLevel } = require("@azure/logger");

setLogLevel("info");

다음 단계

다음 링크를 통해 더 많은 코드 샘플을 찾을 수 있습니다.

참여

이 라이브러리에 기여하려면 기여 가이드 를 참조하여 코드를 빌드하고 테스트하는 방법에 대해 자세히 알아보세요.

Impressions