ACL(Azure Confidential Ledger) 프로그래밍 기능
프로그래밍 기능은 고객이 일반 ACL(Azure Confidential Ledger) 트랜잭션과 동일한 TCB(신뢰할 수 있는 컴퓨팅 베이스)에서 사용자 지정 코드를 실행할 수 있도록 하는 Confidential Ledger의 새로운 기능입니다. TCB에서 사용자 지정 코드 및 트랜잭션을 실행할 때의 이점은 사용자 지정 코드와 생성된 트랜잭션에 동일한 기밀성 및 무결성을 보장한다는 것입니다. 프로그래밍 기능은 ACL에 정의되고 코드에 사용되는 사용자 지정 역할을 통해 RBAC(역할 기반 액세스 제어)도 지원합니다.
프로그래밍 기능을 통해 사용할 수 있는 몇 가지 시나리오는 다음과 같습니다.
- 데이터 집계 및 분석: 중요한 정보는 TCB에서 분석할 수 있으며 집계된 정보만 관련자와 공유할 수 있습니다.
- 증명: PII, 신용 점수 및 상태 정보와 같은 중요한 정보는 증명 후 Azure 기밀 ACI 및 기밀 VM과 같은 다른 기밀 컴퓨팅 제품에서 실행되는 워크로드와 공유할 수 있습니다.
필수 조건
- 구독 소유자 - Azure 구독에 대한 소유자 권한이 있는 사용자만 Confidential Ledger를 만들 수 있습니다. 이 빠른 시작을 계속하기 전에 적절한 액세스 권한이 있는지 확인합니다.
이 자습서에서는 기밀 원장 인스턴스를 만들었다고 가정합니다. Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 기밀 원장을 만들 수 있습니다.
애플리케이션 개발 및 배포
애플리케이션은 TypeScript를 사용하여 개발되고 JavaScript 번들로 롤업됩니다. 개발 프로세스에 대한 자세한 내용은 CCF(기밀 컨소시엄 프레임워크) 설명서를 참조 하세요.
Important
관리자 사용자만 기밀 원장에서 애플리케이션을 배포하고 사용자 지정 RBAC를 관리할 수 있습니다. 섹션의 나머지 부분에서는 관리자가 다음 단계를 실행한다고 가정합니다.
다음 섹션에서는 애플리케이션을 배포할 준비가 되었다고 가정합니다. 배포 프로세스를 보여주기 위해 azureconfidentialledger-app-samples 리포지토리(https://github.com/microsoft/azureconfidentialledger-app-samples)에서 사용할 수 있는 샘플 뱅킹 애플리케이션을 사용합니다.
참고 항목
이 애플리케이션은 기밀 원장 인스턴스에 배포된 JavaScript 애플리케이션을 통해 계좌 개설, 입금 및 양도와 같은 일반적인 뱅킹 사용 사례를 실현하는 방법을 보여 줍니다. 또한 사용자 지정 역할 및 RBAC를 사용하여 사용자 작업에 권한을 부여하는 방법을 보여 줍니다.
Azure에 로그인
참고 항목
Confidential Ledger는 Microsoft Entra를 기본으로 지원합니다. 더 이상 구성이 필요하지 않습니다. 애플리케이션이 다른 ID 공급자가 발급한 JWT를 사용하는 경우 고객 지원팀에 문의하여 기밀 원장 인스턴스에서 구성하도록 합니다.
기밀 원장 인스턴스에 인증할 Microsoft Entra 토큰을 가져옵니다.
az login --use-device-code
az account get-access-token --resource https://confidential-ledger.azure.com
명령 출력에서 원시 토큰 값을 복사합니다.
원장 ID 다운로드
모든 기밀 원장 인스턴스는 서비스 인증서라는 인증서로 표현되는 고유 ID와 연결됩니다. 인스턴스에 대한 보안 연결을 설정해야 합니다. 다운로드하여 servicer_cert.pem에 저장합니다.
참고 항목
contoso
는 Confidential Ledger 인스턴스의 이름입니다. 인스턴스 이름으로 대체합니다.
curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/contoso --silent | jq ' .ledgerTlsCertificate' | xargs echo -e > service_cert.pem
애플리케이션 배포
/app/userDefinedEndpoints를 호출하여 JavaScript 애플리케이션 번들을 배포합니다.
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"
런타임 구성 업데이트(선택 사항)
/app/userDefinedEndpoints/runTimeOptions 엔드포인트를 호출하여 JavaScript 런타임 구성을 업데이트할 수 있습니다. 이를 보여주기 위해 최대 실행 시간을 2000ms로 설정해 보겠습니다.
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 confidential ledger 및 애플리케이션과 통합하는 방법에 대해 자세히 알아보려면 다음 문서를 계속 진행하세요.