使用 IAM 角色保护 MPC 服务

安全模型:纵深防御

多方计算 (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 操作)。最适合审计员或监控工具。

您可以授予此角色的最低级层资源:
  • 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
Multi-party Compute Editor
(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 Admin
(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 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." \
  --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)。