Compartilhar via


Programação do Razão Confidencial do Azure (ACL)

A programação é um novo recurso no Razão Confidencial que permite que os clientes executem código personalizado na mesma Base de Computação Confiável (TCB) que as transações regulares do Razão Confidencial do Azure (ACL). O benefício de executar o código personalizado e as transações no TCB é que ele fornece as mesmas garantias de confidencialidade e integridade ao código personalizado e às transações produzidas por ele. A programação também dá suporte ao Controle de Acesso Baseado em Função (RBAC) por meio de funções personalizadas definidas em ACL e usadas no código.

Alguns cenários que podem ser habilitados por meio da programação são os seguintes:

  • Agregação e análise de dados: informações confidenciais podem ser analisadas no TCB e somente informações agregadas podem ser compartilhadas com os stakeholders.
  • Atestado: informações confidenciais como PII, pontuação de crédito e informações de integridade podem ser compartilhadas com cargas de trabalho em execução em outras ofertas de computação confidencial, como a ACI Confidencial do Azure e a VM Confidencial após o atestado

Pré-requisitos

  • Proprietário da assinatura: um razão confidencial só pode ser criado por usuários que tenham permissões de Proprietário na assinatura do Azure. Confirme se você tem o acesso apropriado antes de continuar com este início rápido.

Este tutorial pressupõe que você criou uma instância do Razão Confidencial. Você pode criar um Razão Confidencial com oportal do Azure, a CLI do Azure ou o Azure PowerShell .

Desenvolvendo e implantando aplicativos

Os aplicativos são desenvolvidos usando TypeScript e acumulados em um pacote JavaScript. Para saber mais sobre o processo de desenvolvimento, consulte a documentação da Estrutura Consulte do Consórcio (CCF).

Importante

Somente usuários administradores podem implantar aplicativos e gerenciar RBAC personalizado no Razão Confidencial. O restante da seção pressupõe que um Administrador execute as etapas a seguir.

A seção a seguir pressupõe que o aplicativo está pronto para implantação. Para demonstrar o processo de implantação, usamos o aplicativo bancário de exemplo disponível no repositório azureconfidentialledger-app-samples (https://github.com/microsoft/azureconfidentialledger-app-samples).

Observação

O aplicativo demonstra como casos de uso bancário comuns, como abrir contas, depositar e transferir fundos, podem ser realizados por meio de um aplicativo JavaScript implantado em uma instância do Razão Confidencial. Ele também demonstra como as funções personalizadas e o RBAC podem ser usados para autorizar ações do usuário.

Entrar no Azure

Observação

O Razão Confidencial dá suporte ao Microsoft Entra pronto para uso. Nenhuma configuração é necessária. Se o aplicativo usar o JWT emitido por outros provedores de identidade, entre em contato com o suporte do cliente para configurá-lo na instância do Razão Confidencial.

Obtenha um token do Microsoft Entra para autenticar na instância do Razão Confidencial.

az login --use-device-code
az account get-access-token --resource https://confidential-ledger.azure.com

Copie o valor bruto do token da saída do comando.

Baixar a identidade do Razão

Cada instância do Razão Confidencial está associada a uma identidade exclusiva representada por um certificado chamaxdo certificado de serviço. Ela é obrigatória para estabelecer uma conexão segura com a instância. Baixe-o e salve-o em servicer_cert.pem.

Observação

contoso é o nome da instância do Razão Confidencial. Substitua-o pelo nome da instância.

curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/contoso --silent | jq ' .ledgerTlsCertificate' | xargs echo -e > service_cert.pem

Implantar o aplicativo

Implante o pacote de aplicativos JavaScript chamando /app/userDefinedEndpoints.

apiVersion="2024-08-22-preview"
content_type_application_json="Content-Type: application/json"
bundle="/path/to/bundle.json"
authorization="Authorization: Bearer raw_token_value"
server_identity="--cacert service_cert.pem"

# Deploy the application
#
curl $server_identity -X PUT "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints?api-version=$apiVersion" -H "$content_type_application_json" -H "$authorization" -d @$bundle

# View the application
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints?api-version=$apiVersion" -H "$authorization"

Criar funções e usuários personalizados

O aplicativo bancário envolve duas personas, ou seja, um "gerente" e um "caixa". Criamos duas funções e usuários para representar as personas.

Observação

O usuário é representado por um certificado exclusivo.

Observação

Os usuários do aplicativo podem receber as funções internas, ou seja, Administrador, Colaborador e Leitor. As funções personalizadas diferenciam maiúsculas de minúsculas e as funções internas não diferenciam maiúsculas de minúsculas. Um usuário pode receber várias funções ou nenhuma função.

apiVersion="2024-08-22-preview"
content_type_application_json="Content-Type: application/json"
content_type_merge_patch_json="Content-Type: application/merge-patch+json"
authorization="Authorization: Bearer raw_token_value"
curve="secp384r1"
server_identity="--cacert service_cert.pem"

# These actions must match (case-sensitive) the values defined in the application.
#
role_actions='{"roles":[{"role_name":"manager","role_actions":["/banking/accounts/post","/banking/accounts/put","/banking/accounts/get","/banking/accounts/patch"]},{"role_name":"teller","role_actions":["/banking/accounts/put","/banking/accounts/get","/banking/accounts/patch"]}]}'

# Create the roles.
#
curl $server_identity -X PUT "https://contoso.confidential-ledger.azure.com/app/roles?api-version=$apiVersion" -H "$content_type_application_json" -H "$authorization" -d $role_actions

# View the roles
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/roles?api-version=$apiVersion" -H "$authorization"

# Create a certificate for the manager user.
#
openssl ecparam -out "manager_privk.pem" -name "$curve" -genkey
openssl req -new -key "manager_privk.pem" -x509 -nodes -days 365 -out "manager_cert.pem" -sha384 -subj=/CN="manager"
manager_cert_fingerprint=$(openssl x509 -in "manager_cert.pem" -noout -fingerprint -sha256 | cut -d "=" -f 2)
manager_user="{\"user_id\":\"$manager_cert_fingerprint\",\"assignedRoles\":[\"manager\"]}"

# Create a certificate for the teller user.
#
openssl ecparam -out "teller_privk.pem" -name "$curve" -genkey
openssl req -new -key "teller_privk.pem" -x509 -nodes -days 365 -out "teller_cert.pem" -sha384 -subj=/CN="teller"
teller_cert_fingerprint=$(openssl x509 -in "teller_cert.pem" -noout -fingerprint -sha256 | cut -d "=" -f 2)
teller_user="{\"user_id\":\"$teller_cert_fingerprint\",\"assignedRoles\":[\"teller\"]}"

# Create the manager user.
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/ledgerUsers/$manager_cert_fingerprint?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $manager_user

# Create the teller user.
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/ledgerUsers/$teller_cert_fingerprint?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $teller_user

# View the users
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/ledgerUsers?api-version=$apiVersion" -H "$authorization"

Atualizar a configuração de runtime (opcional)

A configuração de runtime do JavaScript pode ser atualizada chamando o ponto de extremidade /app/userDefinedEndpoints/runTimeOptions. Para demonstrar isso, vamos definir o tempo máximo de execução como 2000 ms.

apiVersion="2024-08-22-preview"
content_type_merge_patch_json="Content-Type: application/merge-patch+json"
authorization="Authorization: Bearer raw_token_value"
runtime_options="{\"max_heap_bytes\":1024,\"max_stack_bytes\":1024,\"max_execution_time_ms\":2000,\"log_exception_details\":false,\"return_exception_details\":false,\"max_cached_interpreters\":1024}"
server_identity="--cacert service_cert.pem"

# Patch the runtime options
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints/runTimeOptions?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $runtime_options

# View the runtime options
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints/runTimeOptions?api-version=$apiVersion" -H "$authorization"

Agora você está pronto para chamar os pontos de extremidade do aplicativo e enviar transações.

Limpar os recursos

Outros guias de início rápido e tutoriais da coleção aproveitam esse guia de início rápido. Se você planeja continuar a trabalhar com os tutoriais e inícios rápidos subsequentes, deixe esses recursos onde estão.

Quando não forem mais necessários, você poderá usar o comando az group delete da CLI do Azure para remover o grupo de recursos e todos os recursos relacionados:

az group delete --name "myResourceGroup"

Próximas etapas

Neste tutorial, você implantou um aplicativo JavaScript personalizado em uma instância de razão confidencial. Para obter mais informações sobre o razão confidencial do Azure e como integrá-lo aos seus aplicativos, continue lendo estes artigos.