次の方法で共有


Azure Managed CCF リソースのメンバーを追加および削除する

ガバナンス操作を使用して、Azure Managed CCF (Managed CCF) リソースにメンバーを追加および削除できます。 このチュートリアルは、「クイック スタート: Azure portal チュートリアルを使用して Azure Managed CCF リソースを作成する」で作成したマネージド CCF リソースに基づいています。

前提条件

  • Python 3 以降。
  • 最新バージョンの CCF Python パッケージインストールします。

サービス ID をダウンロードする

Azure マネージド CCF リソースには、サービス ID と呼ばれる一意の ID があります。 証明書によって表され、リソースの作成時に作成されます。 Azure Managed CCF リソースの一部である個々のノードには、サービス ID によって承認された自己署名証明書があり、それによって信頼が確立されます。

お客様は、サービス ID 証明書をダウンロードし、それを使用してサービスと対話するときに TLS 接続を確立することをお勧めします。 次のコマンドは、証明書をダウンロードし、service_cert.pem に保存します。

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

Note

Mac でコマンドを実行する場合は、次のように置き換えますdate -Isdate +%FT%T%z

メンバーの追加

メンバーのキー ペアを生成します。 次のコマンドが完了すると、メンバーの公開キーが保存member0_cert.pemされ、秘密キーが .member0_privk.pem

openssl ecparam -out "member0_privk.pem" -name "secp384r1" -genkey
openssl req -new -key "member0_privk.pem" -x509 -nodes -days 365 -out "member0_cert.pem" -"sha384" -subj=/CN="member0"
  1. 提案を送信してメンバーを追加します。
    $cat set_member.json
    {
      "actions": [
        {
          "name": "set_member",
          "args": {
            "cert": "-----BEGIN CERTIFICATE-----\nMIIBtDCCATqgAwIBAgIUV...sy93h74oqHk=\n-----END CERTIFICATE-----",
            "encryption_pub_key": ""
          }
        }
      ]
    }
    
    $ proposal_id=$( (ccf_cose_sign1 --content set_member.json --signing-cert member0_cert.pem --signing-key member0_privk.pem --ccf-gov-msg-type proposal --ccf-gov-msg-created_at `date -Is` | curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/proposals -H 'Content-Type: application/cose' --data-binary @- --cacert service_cert.pem) )
    
  2. 投票を送信して提案を受け入れます。 リソース内のすべてのメンバーに対して手順を繰り返します。
    cat vote_accept.json
    {
      "ballot": "export function vote (proposal, proposerId) { return true }"
    }
    
    ccf_cose_sign1 --content vote_accept.json --signing-cert member0_cert.pem --signing-key member0_privk.pem --ccf-gov-msg-type ballot --ccf-gov-msg-created_at `date -Is` --ccf-gov-msg-proposal_id $proposal_id | curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/proposals/$proposal_id/ballots -H 'Content-Type: application/cose' --data-binary @- --cacert service_cert.pem
    
  3. コマンドが完了すると、メンバーがマネージド CCF リソースに追加されます。 ただし、アクティブ化されない限り、ガバナンス操作に参加することはできません。 クイックスタート チュートリアル 「メンバーをアクティブ化してメンバー をアクティブ化する」を参照してください。
  4. 次のコマンドを使用して、ネットワーク内のメンバーを表示します。
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"
  }
}

メンバーを削除する

  1. メンバーを削除する提案を送信します。 メンバーは、パブリック証明書によって識別されます。
    $cat remove_member.json
    {
      "actions": [
        {
          "name": "remove_member",
          "args": {
            "cert": "-----BEGIN CERTIFICATE-----\nMIIBtDCCATqgAwIBAgIUV...sy93h74oqHk=\n-----END CERTIFICATE-----",
          }
        }
      ]
    }
    
    $ proposal_id=$( (ccf_cose_sign1 --content remove_member.json --signing-cert member0_cert.pem --signing-key member0_privk.pem --ccf-gov-msg-type proposal --ccf-gov-msg-created_at `date -Is` | curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/proposals -H 'Content-Type: application/cose' --data-binary @- --cacert service_cert.pem) )
    
  2. 投票を送信して提案を受け入れます。 リソース内のすべてのメンバーに対して手順を繰り返します。
    cat vote_accept.json
    {
      "ballot": "export function vote (proposal, proposerId) { return true }"
    }
    
    ccf_cose_sign1 --content vote_accept.json --signing-cert member0_cert.pem --signing-key member0_privk.pem --ccf-gov-msg-type ballot --ccf-gov-msg-created_at `date -Is` --ccf-gov-msg-proposal_id $proposal_id | curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/proposals/$proposal_id/ballots -H 'Content-Type: application/cose' --data-binary @- --cacert service_cert.pem
    
  3. コマンドが完了すると、メンバーはマネージド CCF リソースから削除され、ガバナンス操作に参加できなくなります。
  4. 次のコマンドを使用して、ネットワーク内のメンバーを表示します。
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"
  }
}

次のステップ