安全模型:纵深防御
多方计算 (MPC) API 实现了纵深防御安全架构,该架构依赖于严格的 Identity and Access Management (IAM) 控制。此模型可确保任何单一身份或被盗用的 Google 账号都无法单方面入侵平台或提取资产。
- 第 1 层:Identity and Access Management (IAM):所有请求都会在边缘进行验证,以确认调用方具有调用特定 Google Cloud API 方法所需的明确权限(请参阅 IAM 概览)。权限不足的账号会立即被拒绝,并返回
403 Forbidden错误,从而防止未经授权的流量到达应用层。 - 第 2 层:职责分离 (SoD):MPC 平台强制执行严格的角色分离,确保不同的治理和执行操作不能由同一个人执行。通过定义不同的角色(例如,限制政策作者只能修改政策,签署者只能对交易载荷进行签名),系统可确保单个恶意代理或被盗用的账号无法独立执行敏感交易。
- 第 3 层:最小权限原则:严格根据工作职能授予访问权限,确保用户仅拥有履行职责所需的最低权限。例如,合规或审计团队以最小权限运行,仅保留只读权限来监控活动。他们可以查看政策并检查交易日志以进行监督,但无法修改政策、发起交易或与资产互动。
角色和职责分离
通过将管理(设置董事会)、治理(定义规则)和执行(转移资产)解耦,来确保安全性。
| 角色 | 网域 | 已分配 IAM 角色 | 核心职责 |
|---|---|---|---|
| 管理员 | 管理 | mpc.admin | 预配资源。无法签署交易或编写政策。 |
| 政策作者 | 治理 | mpc.editor | 定义和修改运营政策(例如支出限额)。 |
| 签署者 | 执行 | mpc.editor | 对交易载荷进行签名。无法编写政策。 |
| 法规遵从 | 监督 | mpc.viewer | 拥有只读权限,可监控活动和检查政策。无法修改保单或发起交易。 |
预定义 IAM 角色
下表详细列出了多方计算 (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 |
Multi-party Compute Editor(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 Admin(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 A 和 KeyRing B)来强制隔离。您可以使用 IAM Condition 向服务账号授予 roles/mpc.editor,该条件会将其限制为仅在指定密钥环 (KeyRing A) 内执行操作,同时限制对同一实例中其他密钥环的访问。
示例命令
以下示例展示了如何创建 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>) 映射到人员角色(例如管理员、政策作者、签名者和合规性人员)。 - 工作负载身份联合:将项目级工作负载身份池 (
projects/<var>PROJECT_NUMBER</var>/locations/global/workloadIdentityPools/<var>WORKLOAD_POOL_ID</var>) 映射到在 AWS、Azure 或 Kubernetes 中运行的自动化共同签名者节点。
还必须为联合主账号授予使用方项目的 Service Usage Consumer 角色 (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)。