啟動 Azure 受控 CCF 資源中的成員
在本指南中,您將了解如何在 Azure 受控 CCF (受控 CCF) 資源中啟動成員。 本教學課程是以快速入門:使用 Azure 入口網站建立 Azure 受控 CCF 資源教學課程中所建立的受控 CCF 資源為基礎。
必要條件
- Python 3+。
- 安裝最新版的 CCF Python 套件。
下載服務識別
Azure 受控 CCF 資源具有稱為服務識別的唯一身分識別。 其會以憑證表示,並且會在資源建立期間建立。 屬於 Azure 受控 CCF 資源的每個個別節點都有其自我簽署憑證,並由服務識別背書,以對其建立信任。
建議客戶下載服務識別憑證,並在與服務互動時,將其用來建立 TLS 連線。 下列命令會下載憑證,並將其儲存至 service_cert.pem。
curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/confidentialbillingapp --silent | jq ' .ledgerTlsCertificate' | xargs echo -e > service_cert.pem
啟動成員
當成員新增至受控 CCF 資源時,其會處於接受狀態。 在啟動之前,成員無法參與治理。 若要這樣做,成員必須確認他們對於服務狀態感到滿意 (例如,在稽核目前的憲法和目前受信任的節點之後)。
- 成員必須更新並擷取最新的狀態摘要。 這樣做時,新成員會確認他們對服務的目前狀態感到滿意。
curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/ack/update_state_digest -X POST --cacert service_cert.pem --key member0_privk.pem --cert member0_cert.pem --silent | jq > request.json
cat request.json
{
"state_digest": <...>
}
注意
在 Mac 上執行命令時,請將 date -Is
取代為 date +%FT%T%z
。
- 成員必須使用 ccf_cose_sign1 公用程式簽署狀態摘要。 此公用程式會隨 CCF Python 套件一起安裝。
ccf_cose_sign1 --ccf-gov-msg-type ack --ccf-gov-msg-created_at `date -Is` --signing-key member0_privk.pem --signing-cert member0_cert.pem --content request.json | \
curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/ack --cacert service_cert.pem --data-binary @- -H "content-type: application/cose"
- 命令完成之後,成員會處於作用中狀態,且可以參與治理。 您可以使用下列命令來檢視成員。
curl --cacert service_cert.pem https://confidentialbillingapp.confidential-ledger.azure.com/gov/members | jq
{
"710c4d7ce6a70a89137b39170cd5c48f94b4756a66e66b2242370111c1c47564": {
"cert": "-----BEGIN CERTIFICATE-----\nMIIB9zCCAX2gAwIBAgIQW20I1iR...l8Uv8rRce\n-----END CERTIFICATE-----",
"member_data": {
"is_operator": true,
"owner": "Microsoft Azure"
},
"public_encryption_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI...n3QIDAQAB\n-----END PUBLIC KEY-----\n",
"status": "Active"
},
"f9ea379051e5292b538ff2a3dc97f1bb4d5046f12e2bdbf5b8e3acc4516f34e3": {
"cert": "-----BEGIN CERTIFICATE-----\nMIIBuzCCAUKgAwIBAgIURuSESLma...yyK1EHhxx\n-----END CERTIFICATE-----",
"member_data": {
"group": "",
"identifier": "member0"
},
"public_encryption_key": null,
"status": "Active"
}
}