Inicio rápido: Crear un recurso Azure Managed CCF mediante el SDK de Azure para JavaScript y TypeScript
Microsoft Azure Managed CCF (Managed CCF) es un servicio nuevo y muy seguro para implementar aplicaciones confidenciales. Para obtener más información sobre Azure Managed CCF, consulte Acerca de Azure Managed Confidential Consortium Framework.
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (npm)
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- Versiones de Node.js compatibles con el SDK de Azure para JavaScript.
- OpenSSL en un equipo que ejecuta Windows o Linux.
Instalación
En este artículo de inicio rápido se usa la biblioteca de identidades de Azure, junto con la CLI de Azure o Azure PowerShell, para autenticar al usuario en los servicios de Azure. Los desarrolladores también pueden usar Visual Studio o Visual Studio Code para autenticar las llamadas. Para más información, consulte Autenticación del cliente con la biblioteca cliente de Azure Identity.
Inicio de sesión en Azure
Inicie sesión en Azure mediante el comando az login de la CLI de Azure o el cmdlet Connect-AzAccount de Azure PowerShell.
az login
Si la CLI o PowerShell pueden abrir el explorador predeterminado, lo harán y cargarán una página de inicio de sesión de Azure. En caso contrario, visite https://aka.ms/devicelogin y escriba el código de autorización que se muestra en el terminal.
Si se le pide, inicie sesión con las credenciales de su cuenta en el explorador.
Inicialización de un nuevo proyecto de npm
En un terminal o símbolo del sistema, cree una carpeta de proyecto adecuada e inicialice un npm
proyecto. Puede omitir este paso si tiene un proyecto de nodo existente.
cd <work folder>
npm init -y
Instalación de los paquetes
Instalar la biblioteca cliente de identidades de Azure Active Directory.
npm install --save @azure/identity
Instalar la biblioteca cliente del plano de administración de Azure Confidential Ledger.
npm install -save @azure/arm-confidentialledger@1.3.0-beta.1
Instalación global del compilador y las herramientas de TypeScript
npm install -g typescript
Crear un grupo de recursos
Un grupo de recursos es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Use el cmdlet New-AzResourceGroup de Azure PowerShell para crear un grupo de recursos llamado myResourceGroup en la ubicación southcentralus.
New-AzResourceGroup -Name "myResourceGroup" -Location "SouthCentralUS"
Registrar el proveedor de recursos
El tipo de recurso CCF administrado de Azure debe estar registrado en la suscripción antes de crear un recurso.
az feature registration create --namespace Microsoft.ConfidentialLedger --name ManagedCCF
az provider register --namespace Microsoft.ConfidentialLedger
Crear miembros
Genere un par de claves para el miembro. Una vez completados los siguientes comandos, la clave pública del miembro se guarda en member0_cert.pem
y la clave privada se guarda en 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"
Crear la aplicación JavaScript
Usar la biblioteca cliente del plano de administración
El SDK de Azure para JavaScript y la biblioteca typeScript azure/arm-confidentialledger permite operaciones en recursos de CCF administrados, como la creación y eliminación, enumerar los recursos asociados a una suscripción y ver los detalles de un recurso específico.
Para ejecutar los ejemplos siguientes, guarde los fragmentos de código en un archivo con una extensión en la .ts
carpeta del proyecto y compilelo como parte del proyecto de TypeScript o compile el script en JavaScript por separado ejecutando:
tsc <filename.ts>
El archivo JavaScript compilado tendrá el mismo nombre, pero una *.js
extensión. A continuación, ejecute el script en nodeJS:
node <filename.js>
El código typeScript de ejemplo siguiente crea y ve las propiedades de un recurso CCF administrado.
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);
}
})();
Eliminación del recurso de Managed CCF
En el siguiente fragmento de código se elimina el recurso de Managed CCF Otros artículos de Managed CCF pueden basase en este inicio rápido. Si tiene pensado seguir trabajando en otras guías de inicio rápido y tutoriales, considere la posibilidad de dejar estos recursos activos.
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);
}
})();
Limpieza de recursos
Otros artículos de Managed CCF pueden basase en este inicio rápido. Si tiene pensado seguir trabajando en otras guías de inicio rápido y tutoriales, considere la posibilidad de dejar estos recursos activos.
De lo contrario, cuando haya terminado con los recursos creados en este artículo, use el comando az group delete de la CLI de Azure para eliminar el grupo de recursos y todos los recursos que contiene.
az group delete --resource-group myResourceGroup
Pasos siguientes
En este inicio rápido, ha creado un recurso de Managed CCF mediante el SDK de Python de Azure para Confidential Ledger. Para más información sobre Azure Managed CCF y cómo integrarlo con las aplicaciones, continúe con los artículos siguientes: