使用 IAM 角色保護 MPC 服務

安全模型:縱深防禦

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 作業)。最適合稽核人員或監控工具。

可授予這項角色的最低層級資源:
  • KeyRing
mpc.googleapis.com/keyRings.get
mpc.googleapis.com/keyRings.list
mpc.googleapis.com/keys.get
mpc.googleapis.com/keys.list
mpc.googleapis.com/policies.get
mpc.googleapis.com/policies.list
mpc.googleapis.com/policyAuthorTrustBundles.get
mpc.googleapis.com/proposals.get
mpc.googleapis.com/proposals.list
mpc.googleapis.com/signers.get
mpc.googleapis.com/signers.list
多方運算編輯者
(roles/mpc.editor)

專為政策作者和參與者 (簽署者) 設計。可管理政策、建立提案及記錄參與者決策。

可授予這個角色的最低層級資源:
  • KeyRing
包含所有roles/mpc.viewer權限,以及:

mpc.googleapis.com/keyRings.update
mpc.googleapis.com/keys.update
mpc.googleapis.com/policies.addQuorumSignature
mpc.googleapis.com/policies.create
mpc.googleapis.com/policies.revoke
mpc.googleapis.com/proposals.create
mpc.googleapis.com/proposals.fetchProposalSignature
mpc.googleapis.com/proposals.recordParticipantDecision
Multi-party Compute 管理員
(roles/mpc.admin)

專為管理員設計。可授予完整存取權,用於佈建基礎架構、產生金鑰,以及註冊參與者公開金鑰。

可授予這個角色的最低層級資源:
  • 執行個體
包含所有roles/mpc.editor權限,以及:

mpc.googleapis.com/keyRings.create
mpc.googleapis.com/keyRings.delete
mpc.googleapis.com/keys.create
mpc.googleapis.com/policyAuthorTrustBundles.update
mpc.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)」。