Udostępnij za pośrednictwem


Programowalność poufnej księgi platformy Azure (ACL)

Programowalność to nowa funkcja w rejestrze poufnym, która umożliwia klientom uruchamianie niestandardowego kodu w tej samej zaufanej bazie obliczeniowej (TCB) co zwykłe transakcje rejestru poufnego platformy Azure (ACL). Zaletą wykonywania niestandardowego kodu i transakcji w TCB jest zapewnienie tej samej poufności i integralności gwarancji dla kodu niestandardowego i transakcji generowanych przez nią. Programowalność obsługuje również kontrolę dostępu opartą na rolach (RBAC) za pośrednictwem ról niestandardowych zdefiniowanych w listach ACL i używanych w kodzie.

Kilka scenariuszy, które można włączyć za pomocą możliwości programowania, są następujące:

  • Agregacja i analiza danych: Poufne informacje można analizować w TCB i udostępniać uczestnikom projektu tylko zagregowane informacje.
  • Zaświadczenie: poufne informacje, takie jak dane osobowe, ocena kredytowa i informacje o kondycji, mogą być udostępniane obciążeniom działającym w innych poufnych ofertach obliczeniowych, takich jak poufne ACI platformy Azure i poufne maszyny wirtualnej po zaświadczaniu

Wymagania wstępne

W tym samouczku założono, że utworzono wystąpienie poufnego rejestru. Rejestr poufny można utworzyć za pomocą witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.

Tworzenie i wdrażanie aplikacji

Aplikacje są opracowywane przy użyciu języka TypeScript i umieszczane w pakiecie JavaScript. Aby dowiedzieć się więcej na temat procesu programowania, zapoznaj się z dokumentacją platformy Confidential Consortium Framework (CCF).

Ważne

Tylko użytkownicy administratorów mogą wdrażać aplikacje i zarządzać niestandardową kontrolą dostępu opartą na rolach w rejestrze poufnym. W pozostałej części sekcji założono, że administrator wykonuje następujące kroki.

W poniższej sekcji założono, że aplikacja jest gotowa do wdrożenia. Aby zademonstrować proces wdrażania, użyjemy przykładowej aplikacji bankowej dostępnej w repozytorium azureconfidentialledger-app-samples (https://github.com/microsoft/azureconfidentialledger-app-samples).

Uwaga

Aplikacja pokazuje, w jaki sposób typowe przypadki użycia bankowości, takie jak otwieranie kont, depozytowanie i przenoszenie funduszy, można zrealizować za pośrednictwem aplikacji JavaScript wdrożonej w wystąpieniu poufnego rejestru. Pokazuje również, jak role niestandardowe i kontrola dostępu na podstawie ról mogą służyć do autoryzowania akcji użytkownika.

Logowanie się do platformy Azure

Uwaga

Rejestr poufny obsługuje wbudowaną usługę Microsoft Entra. Nie jest wymagana żadna żadna konfiguracja. Jeśli aplikacja używa protokołu JWT wystawionego przez innych dostawców tożsamości, skontaktuj się z pomocą techniczną klienta, aby skonfigurować ją w wystąpieniu poufnej księgi.

Uzyskaj token entra firmy Microsoft w celu uwierzytelnienia w wystąpieniu rejestru poufnego.

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

Skopiuj nieprzetworzone wartości tokenu z danych wyjściowych polecenia.

Pobieranie tożsamości rejestru

Każde wystąpienie rejestru poufnego jest skojarzone z unikatową tożsamością reprezentowaną przez certyfikat nazywany certyfikatem usługi. Wymagane jest nawiązanie bezpiecznego połączenia z wystąpieniem. Pobierz go i zapisz go w pliku servicer_cert.pem.

Uwaga

contoso to nazwa wystąpienia poufnego rejestru. Zastąp ją nazwą wystąpienia.

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

Wdrażanie aplikacji

Wdróż pakiet aplikacji JavaScript, wywołując polecenie /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"

Tworzenie ról niestandardowych i użytkowników

Aplikacja bankowa obejmuje dwie osoby, a mianowicie "menedżera" i "teller". Tworzymy dwie role i użytkowników do reprezentowania osób.

Uwaga

Użytkownik jest reprezentowany przez unikatowy certyfikat.

Uwaga

Użytkownicy aplikacji mogą mieć przypisane wbudowane role, a mianowicie Administrator, Współautor i Czytelnik. Role niestandardowe są wrażliwe na wielkość liter, a wbudowane role są niewrażliwe na wielkość liter. Użytkownik może mieć przypisane wiele ról.

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"

Aktualizowanie konfiguracji środowiska uruchomieniowego (opcjonalnie)

Konfigurację środowiska uruchomieniowego języka JavaScript można zaktualizować, wywołując punkt końcowy /app/userDefinedEndpoints/runTimeOptions. Aby to zademonstrować, ustawmy maksymalny czas wykonywania na 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"

Teraz możesz wywoływać punkty końcowe aplikacji i przesyłać transakcje.

Czyszczenie zasobów

Inne przewodniki szybkiego startu i samouczki w tej kolekcji bazują na tym przewodniku. Jeśli planujesz korzystać z kolejnych przewodników Szybki start i samouczków, pozostaw te zasoby na swoim miejscu.

Gdy grupa zasobów i wszystkie powiązane zasoby nie będą już potrzebne, możesz użyć polecenia az group delete interfejsu wiersza polecenia platformy Azure:

az group delete --name "myResourceGroup"

Następne kroki

W tym samouczku wdrożono niestandardową aplikację JavaScript w wystąpieniu poufnego rejestru. Aby dowiedzieć się więcej o poufnym rejestrze platformy Azure i sposobie integrowania go z aplikacjami, przejdź do tych artykułów.