安全模型:縱深防禦
Multi-party Compute (MPC) API 採用縱深防禦安全架構,仰賴嚴格的身分與存取權管理 (IAM) 控制措施。這個模式可確保任何單一身分或遭入侵的 Google 帳戶,都無法單方面破壞平台或竊取資產。
- 第 1 層:Identity & Access Management (IAM):所有要求都會在邊緣進行驗證,確認呼叫端具備叫用特定 Google Cloud API 方法所需的明確權限 (請參閱 IAM 總覽)。權限不足的帳戶會立即遭到拒絕,並收到
403 Forbidden錯誤,防止未經授權的流量進入應用程式層。 - 第 2 層:分散權責 (SoD):MPC 平台會嚴格區分角色,確保同一人無法執行不同的管理和執行動作。透過定義明確的角色 (例如限制政策作者只能編輯政策,簽署者只能簽署交易酬載),系統可確保單一惡意代理或遭盜用的帳戶無法獨立執行機密交易。
- 第 3 層:最小權限原則:嚴格依據工作職務授予存取權,確保使用者僅具備執行職務所需的最低權限。舉例來說,法規遵循或稽核團隊會依據最小權限原則運作,僅保留唯讀存取權來監控活動。他們可以查看政策和檢查交易記錄,但無法修改政策、發起交易或與資產互動。
角色與分散權責
將「管理」 (設定棋盤)、「治理」 (定義規則) 和「執行」 (移動資產) 脫鉤,藉此強化安全性。
| 角色 | 網域 | 已指派 IAM 角色 | 核心職責 |
|---|---|---|---|
| 管理員 | 管理 | mpc.admin | 佈建資源。無法簽署交易或授權政策。 |
| 政策作者 | 管理 | mpc.editor | 定義及編輯營運政策 (例如支出上限)。 |
| 簽署人 | 執行作業 | mpc.editor | 簽署交易酬載。無法建立政策。 |
| 法規遵循 | 監督 | mpc.viewer | 具備監控活動和檢查政策的唯讀權限。無法修改政策或發起交易。 |
預先定義的 IAM 角色
下表詳細列出 Multi-party Compute (MPC) API 的特定 IAM 權限,以及授予這些權限的角色。如要進一步瞭解 API 作業,請參閱 MPC API 參考資料。
| 角色 | 權限 |
|---|---|
多方運算檢視者(roles/mpc.viewer)具備 API 的唯讀存取權 (可對所有資源執行 Get/List 作業)。最適合稽核人員或監控工具。 可授予這項角色的最低層級資源:
|
mpc.googleapis.com/keyRings.getmpc.googleapis.com/keyRings.listmpc.googleapis.com/keys.getmpc.googleapis.com/keys.listmpc.googleapis.com/policies.getmpc.googleapis.com/policies.listmpc.googleapis.com/policyAuthorTrustBundles.getmpc.googleapis.com/proposals.getmpc.googleapis.com/proposals.listmpc.googleapis.com/signers.getmpc.googleapis.com/signers.list |
多方運算編輯者(roles/mpc.editor)專為政策作者和參與者 (簽署者) 設計。可管理政策、建立提案及記錄參與者決策。 可授予這個角色的最低層級資源:
|
包含所有roles/mpc.viewer權限,以及:mpc.googleapis.com/keyRings.updatempc.googleapis.com/keys.updatempc.googleapis.com/policies.addQuorumSignaturempc.googleapis.com/policies.creatempc.googleapis.com/policies.revokempc.googleapis.com/proposals.creatempc.googleapis.com/proposals.fetchProposalSignaturempc.googleapis.com/proposals.recordParticipantDecision |
Multi-party Compute 管理員(roles/mpc.admin)專為管理員設計。可授予完整存取權,用於佈建基礎架構、產生金鑰,以及註冊參與者公開金鑰。 可授予這個角色的最低層級資源:
|
包含所有roles/mpc.editor權限,以及:mpc.googleapis.com/keyRings.creatempc.googleapis.com/keyRings.deletempc.googleapis.com/keys.creatempc.googleapis.com/policyAuthorTrustBundles.updatempc.googleapis.com/signers.create |
自訂角色
如要授予參與者嚴格的最小權限,而非使用 roles/mpc.editor 等較廣泛的預先定義角色,您可以建立自訂 IAM 角色,僅包含參與作業所需的確切權限。
自訂角色指令範例
gcloud iam roles create customMpcSigner \
--project="PROJECT_ID" \
--title="Custom MPC Signer" \
--description="Restricted role for transaction participants" \
--permissions="mpc.googleapis.com/proposals.get,mpc.googleapis.com/proposals.list,mpc.googleapis.com/proposals.recordParticipantDecision"
資源層級和條件式 IAM
為遵循最小權限原則,您可以使用 IAM 條件,將 IAM 角色範圍限制在特定範圍內。
如果多個業務單位在同一個 Google Cloud 專案中使用共用執行個體,您可以將資源放入不同的 KeyRing (例如 KeyRing A 和 KeyRing B),強制執行區隔。您可以使用 IAM 條件,將 roles/mpc.editor 授予服務帳戶,限制該帳戶只能在指定的 KeyRing (KeyRing A) 內執行作業,同時限制存取同一執行個體中的其他 KeyRing。
指令範例
以下是建立 KeyRing 範圍角色繫結的範例:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/mpc.editor" \
--condition="expression=resource.name.startsWith('projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mpc/keyRings/KEYRING_ID'),title=KeyRing_Scoped_Editor"
聯合身分 (自備身分)
您可以使用外部企業身分識別資訊提供者 (例如 Okta、Microsoft Entra ID 或 Ping Identity) 或外部工作負載執行階段,驗證及授權多方運算要求,不必建立 Google 帳戶或管理服務帳戶金鑰:
- 員工身分聯盟:將 IAM 角色繫結至外部 IdP 群組,藉此將組織層級的員工集區 (
locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>) 對應至管理員、政策作者、簽署者和法規遵循等使用者角色。 - Workload Identity Federation:將專案層級的 workload identity pool (
projects/<var>PROJECT_NUMBER</var>/locations/global/workloadIdentityPools/<var>WORKLOAD_POOL_ID</var>) 對應至在 AWS、Azure 或 Kubernetes 中執行的自動化共同簽署者節點。
聯合主體也必須具備用戶專案的服務使用情形消費者角色 (roles/serviceusage.serviceUsageConsumer),API 要求才能將配額和帳單歸因於該專案。
聯合角色繫結範例
# Allow members of the workforce pool to consume APIs through the consumer project
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/*" \
--role="roles/serviceusage.serviceUsageConsumer"
# Grant MPC Admin to an external IdP administrators group
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/group/mpc-admins" \
--role="roles/mpc.admin"
# Grant MPC Editor to an external IdP signers group
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/group/mpc-signers" \
--role="roles/mpc.editor"
更改下列內容:
<var>PROJECT_ID</var>:多方運算執行個體的用戶專案 ID。<var>WORKFORCE_POOL_ID</var>:組織層級員工身分集區 ID。
如需完整的端對端逐步操作說明,請參閱「設定員工身分聯盟 (BYOID)」。