Share via


Guia de início rápido: criar um recurso CCF gerenciado do Azure usando o SDK do Azure para JavaScript e TypeScript

O Microsoft Azure Managed CCF (Managed CCF) é um serviço novo e altamente seguro para implantar aplicativos confidenciais. Para obter mais informações sobre o Azure Managed CCF, consulte Sobre o Azure Managed Confidential Consortium Framework.

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Documentação | de referência da API Pacote de código-fonte | da biblioteca (npm)

Pré-requisitos

Configuração

Este início rápido usa a biblioteca de Identidade do Azure, juntamente com a CLI do Azure ou o Azure PowerShell, para autenticar o usuário nos Serviços do Azure. Os desenvolvedores também podem usar o Visual Studio ou o Visual Studio Code para autenticar suas chamadas. Para obter mais informações, consulte Autenticar o cliente com a biblioteca de cliente do Azure Identity.

Iniciar sessão no Azure

Entre no Azure usando o comando azur CLI az login do Azure ou o cmdlet Azure PowerShell Connect-AzAccount .

az login

Se a CLI ou o PowerShell puder abrir seu navegador padrão, ele fará isso e carregará uma página de entrada do Azure. Caso contrário, visite https://aka.ms/devicelogin e insira o código de autorização exibido no seu terminal.

Se solicitado, inicie sessão com as credenciais da sua conta no browser.

Inicializar um novo projeto npm

Em um terminal ou prompt de comando, crie uma pasta de projeto adequada e inicialize um npm projeto. Você pode pular esta etapa se tiver um projeto de nó existente.

cd <work folder>
npm init -y

Instalar os pacotes

Instale a biblioteca de cliente de identidade do Azure Ative Directory.

npm install --save @azure/identity

Instale a biblioteca de cliente do plano de gerenciamento do Razão Confidencial do Azure.

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

Instale o compilador e as ferramentas TypeScript globalmente

npm install -g typescript

Criar um grupo de recursos

Um grupo de recursos é um contentor lógico no qual os recursos do Azure são implementados e geridos. Use o cmdlet New-AzResourceGroup do Azure PowerShell para criar um grupo de recursos chamado myResourceGroup no local southcentralus.

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

Registar o fornecedor de recursos

O tipo de recurso Azure Managed CCF deve ser registrado na assinatura antes de criar um recurso.

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

az provider register --namespace Microsoft.ConfidentialLedger

Criar membros

Gere um par de chaves para o membro. Após a conclusão dos comandos a seguir, a chave pública do membro é salva e member0_cert.pem a chave privada é salva em 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"

Criar o aplicativo JavaScript

Usar a biblioteca de cliente do plano de gerenciamento

O SDK do Azure para JavaScript e a biblioteca TypeScript azure/arm-confidentialledger permite operações em recursos CCF gerenciados, como criação e exclusão, listagem dos recursos associados a uma assinatura e exibição dos detalhes de um recurso específico.

Para executar os exemplos abaixo, salve os trechos de código em um arquivo com uma .ts extensão na pasta do projeto e compile-o como parte do seu projeto TypeScript, ou compile o script em JavaScript separadamente executando:

tsc <filename.ts>

O arquivo JavaScript compilado terá o mesmo nome, mas uma *.js extensão. Em seguida, execute o script em nodeJS:

node <filename.js>

O código TypeScript de exemplo a seguir cria e exibe as propriedades de um recurso CCF gerenciado.

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

Excluir o recurso CCF gerenciado

A parte de código a seguir exclui o recurso CCF gerenciado. Outros artigos do CCF gerenciado podem se basear neste início rápido. Se você planeja continuar a trabalhar com guias de início rápido e tutoriais subsequentes, convém deixar esses recursos no lugar.

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

Clean up resources (Limpar recursos)

Outros artigos do CCF gerenciado podem se basear neste início rápido. Se você planeja continuar a trabalhar com guias de início rápido e tutoriais subsequentes, convém deixar esses recursos no lugar.

Caso contrário, quando terminar os recursos criados neste artigo, use o comando azur CLI az group delete para excluir o grupo de recursos e todos os recursos contidos.

az group delete --resource-group myResourceGroup

Próximos passos

Neste início rápido, você criou um recurso CCF gerenciado usando o SDK do Python do Azure para Razão Confidencial. Para saber mais sobre o Azure Managed CCF e como integrá-lo com seus aplicativos, continue nestes artigos: