Программируемость конфиденциального реестра Azure (ACL)
Программируемость — это новая функция в конфиденциальном реестре, которая позволяет клиентам запускать пользовательский код в той же доверенной вычислительной базе (TCB), что и обычные транзакции конфиденциального реестра Azure (ACL). Преимущество выполнения пользовательского кода и транзакций в TCB заключается в том, что она обеспечивает одинаковую конфиденциальность и целостность для пользовательского кода и транзакций, созданных им. Программируемость также поддерживает контроль доступа на основе ролей (RBAC) с помощью пользовательских ролей, определенных в ACL и используемых в коде.
Ниже приведены некоторые сценарии, которые можно включить с помощью программируемости.
- Агрегирование и аналитика данных: конфиденциальная информация может быть проанализирована в TCB и только агрегированная информация может быть предоставлена заинтересованным лицам.
- Аттестация: конфиденциальные данные, такие как PII, кредитная оценка и сведения о работоспособности, можно совместно использовать с рабочими нагрузками, работающими на других конфиденциальных вычислительных предложениях, таких как Azure Confidential ACI и Конфиденциальная виртуальная машина после аттестации.
Необходимые компоненты
- Владелец подписки . Конфиденциальный реестр может быть создан только пользователями, имеющими разрешения владельца в подписке Azure. Убедитесь, что у вас есть соответствующий доступ , прежде чем продолжить работу с этим кратким руководством.
В этом руководстве предполагается, что вы создали экземпляр конфиденциального реестра. Вы можете создать конфиденциальный реестр с помощью портал Azure, Azure CLI или Azure PowerShell.
Разработка и развертывание приложений
Приложения разрабатываются с помощью TypeScript и свернуты в пакет JavaScript. Дополнительные сведения о процессе разработки см. в документации по конфиденциальной платформе консорциума (CCF).
Внимание
Только администраторы могут развертывать приложения и управлять пользовательскими RBAC в конфиденциальном реестре. В остальной части раздела предполагается, что администратор выполняет следующие действия.
В следующем разделе предполагается, что приложение готово к развертыванию. Чтобы продемонстрировать процесс развертывания, мы используем пример банковского приложения, доступного в репозитории azureconfidentialledger-app-samples (https://github.com/microsoft/azureconfidentialledger-app-samples).
Примечание.
Приложение демонстрирует, как распространенные варианты использования банковских операций, такие как открытие счетов, депозитирование и передача средств, можно реализовать с помощью приложения JavaScript, развернутого на экземпляре конфиденциального реестра. В нем также показано, как пользовательские роли и RBAC можно использовать для авторизации действий пользователей.
Вход в Azure
Примечание.
Конфиденциальный реестр поддерживает Microsoft Entra вне коробки. Больше конфигурации не требуется. Если приложение использует JWT, выданное другими поставщиками удостоверений, обратитесь в службу поддержки клиентов, чтобы настроить ее в экземпляре конфиденциального реестра.
Получите маркер Microsoft Entra для проверки подлинности в экземпляре конфиденциального реестра.
az login --use-device-code
az account get-access-token --resource https://confidential-ledger.azure.com
Скопируйте значение необработанного маркера из выходных данных команды.
Скачивание удостоверения реестра
Каждый экземпляр конфиденциального реестра связан с уникальным удостоверением, представленным сертификатом, который называется сертификатом службы. Необходимо установить безопасное подключение к экземпляру. Скачайте его и сохраните его в servicer_cert.pem.
Примечание.
contoso
— имя экземпляра конфиденциального реестра. Замените его именем экземпляра.
curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/contoso --silent | jq ' .ledgerTlsCertificate' | xargs echo -e > service_cert.pem
Развертывание приложения
Разверните пакет приложений JavaScript, вызвав /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"
Создание пользовательских ролей и пользователей
Банковское приложение включает в себя два человека, а именно , "менеджер" и "менеджер". Мы создадим две роли и пользователей для представления ролей.
Примечание.
Пользователь представлен уникальным сертификатом.
Примечание.
Пользователям приложений можно назначить встроенные роли, а именно администратора, участника и читателя. Пользовательские роли чувствительны к регистру и встроенные роли не учитывает регистр. Пользователю может быть назначено несколько ролей.
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"
Обновление конфигурации среды выполнения (необязательно)
Конфигурацию среды выполнения JavaScript можно обновить, вызвав конечную точку /app/userDefinedEndpoints/runTimeOptions. Чтобы продемонстрировать это, задайте максимальное время выполнения в 2000 мс.
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"
Теперь вы готовы вызвать конечные точки приложения и отправить транзакции.
Очистка ресурсов
Другие руководства в этой серии созданы на основе этого документа. Если вы планируете продолжить работу с последующими краткими руководствами и статьями, эти ресурсы можно не удалять.
Вы можете удалить ставшую ненужной группу ресурсов и все связанные с ней ресурсы с помощью Azure CLI, выполнив команду az group delete:
az group delete --name "myResourceGroup"
Следующие шаги
В этом руководстве вы развернули пользовательское приложение JavaScript в экземпляре конфиденциального реестра. Чтобы узнать больше о конфиденциальном реестре Azure и о том, как интегрировать его с приложениями, перейдите к этим статьям.