Protección del servicio de MPC con roles de IAM

Modelo de seguridad: Defensa en profundidad

La API de computación multipartita (MPC) implementa una arquitectura de seguridad de defensa en profundidad que se basa en controles estrictos de Identity and Access Management (IAM). Este modelo garantiza que ninguna identidad o Cuenta de Google vulnerada pueda comprometer la plataforma de forma unilateral ni extraer activos.

  • Capa 1: Identity and Access Management (IAM): Todas las solicitudes se verifican en el perímetro para confirmar que el emisor tiene los permisos explícitos necesarios para invocar métodos específicos de la API de Google Cloud (consulta Descripción general de IAM). Las cuentas que no tienen privilegios suficientes se rechazan de inmediato con un error 403 Forbidden, lo que evita que el tráfico no autorizado llegue a la capa de aplicación.
  • Capa 2: Separación de funciones (SoD): La plataforma de MPC aplica una separación estricta de funciones para garantizar que una misma persona no pueda realizar acciones de gobernanza y ejecución distintas. Al definir roles distintos, como restringir a los autores de políticas para que solo editen políticas y a los firmantes para que solo firmen cargas útiles de transacciones, el sistema garantiza que un solo agente malicioso o una cuenta hackeada no puedan ejecutar transacciones sensibles de forma independiente.
  • Capa 3: Principio de privilegio mínimo: El acceso se otorga estrictamente en función de la función laboral, lo que garantiza que los usuarios solo tengan los permisos mínimos necesarios para realizar sus tareas. Por ejemplo, el equipo de cumplimiento o auditoría opera con el privilegio mínimo, lo que conserva el acceso de solo lectura para supervisar la actividad. Pueden ver las políticas y, además, inspeccionar los registros de transacciones para supervisarlos, pero no pueden modificar las políticas, iniciar transacciones ni interactuar con los activos.

Personas y separación de obligaciones

La seguridad se aplica desvinculando la Administración (configuración del tablero) de la Gobernanza (definición de reglas) y la Ejecución (movimiento de activos).

Personificación Dominio Se asignó el rol de IAM Responsabilidades principales
Administrador Administración mpc.admin Aprovisiona recursos. No puede firmar transacciones ni crear políticas.
Autor de la política Administración mpc.editor Define y edita políticas operativas (p.ej., límites de inversión).
Firmante Ejecución mpc.editor Firma las cargas útiles de las transacciones. No puede crear políticas.
Cumplimiento Supervisión mpc.viewer Acceso de solo lectura para supervisar la actividad y, también, inspeccionar las políticas. No puede modificar políticas ni iniciar transacciones.

Funciones predefinidas de IAM

En la siguiente tabla, se detallan los permisos de IAM específicos para la API de computación multipartita (MPC) y los roles que los otorgan. Para obtener más información sobre las operaciones de la API, consulta la referencia de la API de MPC.

Rol Permisos
Visualizador de computación multipartita
(roles/mpc.viewer)

Proporciona acceso de solo lectura en toda la API (operaciones Get y List en todos los recursos). Es más adecuado para auditores o herramientas de supervisión.

Recursos de nivel más bajo en los que puedes otorgar este rol:
  • 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
Editor de Multi-party Compute
(roles/mpc.editor)

Diseñado para autores de políticas y participantes (firmantes). Otorga la capacidad de administrar políticas, crear propuestas y registrar las decisiones de los participantes.

Recursos de nivel más bajo en los que puedes otorgar este rol:
  • KeyRing
Incluye todos los permisos de roles/mpc.viewer, además de los siguientes:

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
Administrador de Multi-party Compute
(roles/mpc.admin)

Diseñado para administradores. Otorga acceso completo para aprovisionar infraestructura, generar claves y registrar claves públicas de participantes.

Recursos de nivel más bajo en los que puedes otorgar este rol:
  • Instancia
Incluye todos los permisos de roles/mpc.editor, además de los siguientes:

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 personalizados

Para otorgar a un participante un acceso estricto de privilegio mínimo en lugar de usar los roles predefinidos más amplios, como roles/mpc.editor, puedes crear un rol de IAM personalizado que contenga solo los permisos exactos que necesita para participar en las operaciones.

Ejemplo de comando de rol personalizado

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 condicionado y a nivel de recurso

Si te adhieres al principio de privilegio mínimo, puedes definir el alcance de los roles de IAM a un límite restringido con las condiciones de IAM.

Si varias unidades de negocio operan en el mismo proyecto de Google Cloud con una instancia compartida, puedes aplicar la separación colocando los recursos en llaveros de claves independientes (p.ej., KeyRing A y KeyRing B). Puedes otorgar roles/mpc.editor a una cuenta de servicio con una condición de IAM que la restrinja exclusivamente a las operaciones que se producen dentro de un llavero de claves designado (KeyRing A), a la vez que se restringe el acceso a otros llaveros de claves de la misma instancia.

Comando de ejemplo

A continuación, se muestra un ejemplo de cómo crear una vinculación de rol con alcance de llavero de claves:

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"

Identidades federadas (Usa tu proveedor de identidad)

Puedes autenticar y autorizar solicitudes de computación multipartita con proveedores de identidad corporativos externos (como Okta, Microsoft Entra ID o Ping Identity) o entornos de ejecución de cargas de trabajo externos sin crear Cuentas de Google ni administrar claves de cuentas de servicio:

  • Federación de identidades de personal: Asigna grupos de personal a nivel de la organización (locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>) a personas físicas, como administradores, autores de políticas, firmantes y responsables de cumplimiento, vinculando roles de IAM a grupos de IdP externos.
  • Federación de identidades para cargas de trabajo: Asigna grupos de identidades para cargas de trabajo a nivel del proyecto (projects/<var>PROJECT_NUMBER</var>/locations/global/workloadIdentityPools/<var>WORKLOAD_POOL_ID</var>) a nodos de cofirmantes automatizados que se ejecutan en AWS, Azure o Kubernetes.

A las principales federadas también se les debe otorgar el rol de consumidor de Service Usage (roles/serviceusage.serviceUsageConsumer) en el proyecto de consumidor para que las solicitudes a la API puedan atribuir la cuota y la facturación al proyecto.

Ejemplos de vinculaciones de roles federados

# 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"

Reemplaza lo siguiente:

  • <var>PROJECT_ID</var>: Es el ID del proyecto de consumidor de tu instancia de procesamiento multipartita.
  • <var>WORKFORCE_POOL_ID</var>: Es el ID del grupo de identidades de personal a nivel de la organización.

Para obtener una explicación completa de extremo a extremo, consulta Configura la federación de identidades de personal (BYOID).