共用方式為


快速入門:使用適用於 JavaScript 和 TypeScript 的 Azure SDK 建立 Azure 受控 CCF 資源

Microsoft Azure 受控 CCF (受控 CCF) 是一項新的高度安全服務,用於部署機密應用程式。 如需 Azure 受控 CCF 的詳細資訊,請參閱 關於 Azure 受控機密聯盟架構

如果您沒有 Azure 帳戶,請先建立 免費帳戶 ,再開始。

API 參考文件 | 程式庫原始碼 | 套件 (npm)

先決條件

設定

本快速入門會使用 Azure 身分識別程式庫,以及 Azure CLI 或 Azure PowerShell,向 Azure 服務驗證使用者。 開發人員也可以使用 Visual Studio 或 Visual Studio Code 來驗證其呼叫。 如需詳細資訊,請參閱 使用 Azure 身分識別用戶端程式庫驗證用戶端

登入 Azure

使用 Azure CLI az login 命令或 Azure PowerShell Connect-AzAccount Cmdlet 登入 Azure。

az login

如果 CLI 或 PowerShell 可以開啟您的預設瀏覽器,它會這樣做並載入 Azure 登入頁面。 否則,請造訪 https://aka.ms/devicelogin 並輸入終端機中顯示的授權碼。

如果出現提示,請在瀏覽器中使用您的帳戶憑據登錄。

初始化新的 npm 專案

在終端機或命令提示字元中,建立合適的專案資料夾並初始化專案 npm 。 如果您有現有的節點專案,則可以略過此步驟。

cd <work folder>
npm init -y

安裝套件

安裝 Azure Active Directory 身分識別用戶端程式庫。

npm install --save @azure/identity

安裝 Azure 機密總帳管理平面用戶端程式庫。

npm install -save @azure/arm-confidentialledger@1.3.0-beta.1

全域安裝 TypeScript 編譯器和工具

npm install -g typescript

建立資源群組

資源群組是部署和管理 Azure 資源的邏輯容器。 使用 Azure PowerShell New-AzResourceGroup Cmdlet 在 southcentralus 位置建立名為 myResourceGroup 的資源群組。

New-AzResourceGroup -Name "myResourceGroup" -Location "SouthCentralUS"

註冊資源提供者

建立資源之前,必須先在訂用帳戶中註冊 Azure 受控 CCF 資源類型。

az feature registration create --namespace Microsoft.ConfidentialLedger --name ManagedCCF

az provider register --namespace Microsoft.ConfidentialLedger

建立成員

產生成員的金鑰組。 下列指令完成後,成員的公開金鑰會儲存在 中 member0_cert.pem ,而私密金鑰會儲存在 member0_privk.pem中。

openssl ecparam -out "member0_privk.pem" -name "secp384r1" -genkey
openssl req -new -key "member0_privk.pem" -x509 -nodes -days 365 -out "member0_cert.pem" -"sha384" -subj=/CN="member0"

建立 JavaScript 應用程式

使用管理平面用戶端程式庫

適用於 JavaScript 和 TypeScript 的 Azure SDK 和 TypeScript 程式庫 azure/arm-confidentialledger 允許對受控 CCF 資源進行作業,例如建立和刪除、列出與訂用帳戶相關聯的資源,以及檢視特定資源的詳細資料。

若要執行下列範例,請將程式碼片段儲存到具有副檔名的檔案 .ts 中,並作為 TypeScript 專案的一部分進行編譯,或執行以下命令將腳本單獨編譯為 JavaScript:

tsc <filename.ts>

編譯後的 JavaScript 檔案將具有相同的名稱,但副檔名。*.js 然後在nodeJS中執行腳本:

node <filename.js>

下列範例 TypeScript 程式碼會建立並檢視受控 CCF 資源的屬性。

import  { ConfidentialLedgerClient, ManagedCCFProperties, ManagedCCF, KnownLanguageRuntime, DeploymentType, MemberIdentityCertificate } from "@azure/arm-confidentialledger";
import { DefaultAzureCredential } from "@azure/identity";

// Please replace these variables with appropriate values for your project
const subscriptionId = "0000000-0000-0000-0000-000000000001";
const rgName = "myResourceGroup";
const ledgerId = "testApp";
const memberCert0 = "-----BEGIN CERTIFICATE-----\nMIIBvjCCAUSgAwIBAg...0d71ZtULNWo\n-----END CERTIFICATE-----";
const memberCert1 = "-----BEGIN CERTIFICATE-----\nMIIBwDCCAUagAwIBAgI...2FSyKIC+vY=\n-----END CERTIFICATE-----";

async function main() {
    console.log("Creating a new instance.")
    const client = new ConfidentialLedgerClient(new DefaultAzureCredential(), subscriptionId);

    const properties = <ManagedCCFProperties> {
        deploymentType: <DeploymentType> {
            appSourceUri: "",
            languageRuntime: KnownLanguageRuntime.JS
        },
        memberIdentityCertificates: [
            <MemberIdentityCertificate>{
                certificate: memberCert0,
                encryptionkey: "",
                tags: { 
                    "owner":"member0"
                }
            },
            <MemberIdentityCertificate>{
                certificate: memberCert1,
                encryptionkey: "",
                tags: { 
                    "owner":"member1"
                }
            },
        ],
        nodeCount: 3,
    };

    const mccf = <ManagedCCF> {
        location: "SouthCentralUS",
        properties: properties,
    }

    const createResponse = await client.managedCCFOperations.beginCreateAndWait(rgName, ledgerId, mccf);
    console.log("Created. Instance id: " +  createResponse.id);

    // Get details of the instance
    console.log("Getting instance details.");
    const getResponse = await client.managedCCFOperations.get(rgName, ledgerId);
    console.log(getResponse.properties?.identityServiceUri);
    console.log(getResponse.properties?.nodeCount);

    // List mccf instances in the RG
    console.log("Listing the instances in the resource group.");
    const instancePages = await client.managedCCFOperations.listByResourceGroup(rgName).byPage();
    for await(const page of instancePages){
        for(const instance of page)
        {
            console.log(instance.name + "\t" + instance.location + "\t" + instance.properties?.nodeCount);
        }
    }

    console.log("Delete the instance.");
    await client.managedCCFOperations.beginDeleteAndWait(rgName, ledgerId);
    console.log("Deleted.");
}

(async () => {
    try {
        await main();
    } catch(err) {
        console.error(err);
    }
})();

刪除受控 CCF 資源

下列程式碼片段會刪除受控 CCF 資源。 其他受控 CCF 文章可以建立在此快速入門之上。 如果您打算繼續使用後續的快速入門和教學課程,您可能想要保留這些資源。

import  { ConfidentialLedgerClient, ManagedCCFProperties, ManagedCCF, KnownLanguageRuntime, DeploymentType, MemberIdentityCertificate } from "@azure/arm-confidentialledger";
import { DefaultAzureCredential } from "@azure/identity";

const subscriptionId = "0000000-0000-0000-0000-000000000001"; // replace
const rgName = "myResourceGroup";
const ledgerId = "confidentialbillingapp";

async function deleteManagedCcfResource() {
    const client = new ConfidentialLedgerClient(new DefaultAzureCredential(), subscriptionId);

    console.log("Delete the instance.");
    await client.managedCCFOperations.beginDeleteAndWait(rgName, ledgerId);
    console.log("Deleted.");
}

(async () => {
    try {
        await deleteManagedCcfResource();
    } catch(err) {
        console.error(err);
    }
})();

清理資源

其他受控 CCF 文章可以建立在此快速入門之上。 如果您打算繼續使用後續的快速入門和教學課程,您可能想要保留這些資源。

否則,當您完成本文中建立的資源時,請使用 Azure CLI az group delete 命令來刪除資源群組及其所有包含的資源。

az group delete --resource-group myResourceGroup

後續步驟

在本快速入門中,您已使用適用於機密分類帳的 Azure Python SDK 建立受控 CCF 資源。 若要深入瞭解 Azure 受控 CCF 以及如何將它與您的應用程式整合,請繼續閱讀下列文章: