Início Rápido: criar um recurso do Azure Managed CCF 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, confira Sobre o Azure Managed Confidential Consortium Framework.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

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

Pré-requisitos

Instalação

Este guia de início rápido usa a biblioteca da Identidade do Azure com a CLI do Azure ou o Azure PowerShell para autenticar usuários nos serviços do Azure. Os desenvolvedores também podem usar o Visual Studio ou o Visual Studio Code para autenticar as chamadas. Para obter mais informações, confira Autenticar o cliente com a biblioteca de clientes da Identidade do Azure.

Entrar no Azure

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

az login

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

Se solicitado, entre com suas credenciais de conta no navegador.

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 ignorar esta etapa se tiver um projeto de nó existente.

cd <work folder>
npm init -y

Instalar os pacotes

Instale a biblioteca de clientes da identidade do Azure Active Directory.

npm install --save @azure/identity

Instale a biblioteca de clientes 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 do TypeScript globalmente

npm install -g typescript

Criar um grupo de recursos

Um grupo de recursos é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados. Use o cmdlet New-AzResourceGroup do Azure PowerShell para criar um grupo de recursos chamado myResourceGroup na localização southcentralus.

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

Registre o provedor de recursos

O tipo de recurso do 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. Depois que os comandos a seguir forem concluídos, a chave pública do membro será salva em member0_cert.pem e a chave privada será 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 clientes do plano de gerenciamento

O SDK do Azure para JavaScript e a biblioteca TypeScript azure/arm-confidentialledger permitem 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 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 no 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 do Managed CCF

O trecho de código a seguir exclui o recurso do Managed CCF. Outros artigos do Managed CCF podem se basear neste início rápido. Se você planeja continuar a trabalhar com os tutoriais e inícios rápidos seguintes, deixe esses recursos onde estão.

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

Limpar os recursos

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

Caso contrário, quando tiver concluído os recursos criados neste artigo, use o comando az group delete da CLI do Azure para excluir o grupo de recursos e todos os recursos que ele contém.

az group delete --resource-group myResourceGroup

Próximas etapas

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 aos seus aplicativos, continue com estes artigos: