En este documento, se describen las opciones de control de acceso disponibles en Pub/Sub.
Descripción general
Pub/Sub usa la administración de identidades y accesos (IAM) para el control de acceso.
En Pub/Sub, el control de acceso se puede configurar a nivel de proyecto y a nivel de los recursos individuales. Por ejemplo:
Otorga acceso por tema o por suscripción, en lugar de hacerlo para todo el proyecto de Cloud.
Si tienes acceso de solo lectura a un solo tema o suscripción, no podrás ver el tema o la suscripción con la consola de Google Cloud. En su lugar, puedes usar Google Cloud CLI.
Otorga acceso con capacidades limitadas, por ejemplo, a fin de publicar mensajes en un tema o consumir mensajes de una suscripción, pero no para borrar el tema o la suscripción.
Otorga acceso a un grupo de desarrolladores a todos los recursos de Pub/Sub de un proyecto.
Para obtener una descripción detallada de IAM y sus características, consulta la documentación de IAM. En particular, consulta Cómo otorgar, cambiar y revocar el acceso a los recursos.
Cada método de Pub/Sub requiere los permisos necesarios. Si quieres obtener una lista de los permisos y funciones que admite IAM para Pub/Sub, consulta la sección Funciones a continuación.
Permisos y funciones
En esta sección se resumen los permisos y las funciones que admite IAM de Pub/Sub.
Permisos necesarios
En la siguiente tabla, se enumeran los permisos necesarios para llamar a cada método:
Método REST | Permisos necesarios |
---|---|
projects.snapshots.create |
pubsub.snapshots.create en el proyecto de Cloud que lo contiene y el permiso pubsub.subscriptions.consume en la suscripción de origen. |
projects.snapshots.delete |
pubsub.snapshots.delete en la instantánea solicitada. |
projects.snapshots.getIamPolicy |
pubsub.snapshots.getIamPolicy en la instantánea solicitada. |
projects.snapshots.list |
pubsub.snapshots.list en el proyecto de Cloud solicitado. |
projects.snapshots.patch |
pubsub.snapshots.update en la instantánea solicitada. |
projects.snapshots.setIamPolicy |
pubsub.snapshots.setIamPolicy en la instantánea solicitada. |
projects.snapshots.testIamPermissions |
Ninguno |
projects.subscriptions.acknowledge |
pubsub.subscriptions.consume en la suscripción solicitada. |
projects.subscriptions.create |
pubsub.subscriptions.create en el proyecto de Cloud que lo contiene y pubsub.topics.attachSubscription en el tema solicitado.
Ten en cuenta que para crear una suscripción en el proyecto A a un tema T en el proyecto B, se deben otorgar los permisos adecuados en el proyecto A y en el tema T. En este caso, la información de identidad del usuario se puede capturar en los registros de auditoría del Proyecto B. |
projects.subscriptions.delete |
pubsub.subscriptions.delete en la suscripción solicitada. |
projects.subscriptions.get |
pubsub.subscriptions.get en la suscripción solicitada. |
projects.subscriptions.getIamPolicy |
pubsub.subscriptions.getIamPolicy en la suscripción solicitada. |
projects.subscriptions.list |
pubsub.subscriptions.list en el proyecto de Cloud solicitado. |
projects.subscriptions.modifyAckDeadline |
pubsub.subscriptions.consume en la suscripción solicitada. |
projects.subscriptions.modifyPushConfig |
pubsub.subscriptions.update en la suscripción solicitada. |
projects.subscriptions.patch |
pubsub.subscriptions.update en la suscripción solicitada. |
projects.subscriptions.pull |
pubsub.subscriptions.consume en la suscripción solicitada. |
projects.subscriptions.seek |
pubsub.subscriptions.consume en la suscripción solicitada y pubsub.snapshots.seek en la instantánea solicitada, si la hubiera. |
projects.subscriptions.setIamPolicy |
pubsub.subscriptions.setIamPolicy en la suscripción solicitada. |
projects.subscriptions.testIamPermissions |
Ninguno |
projects.topics.create |
pubsub.topics.create en el proyecto de Cloud que lo contiene. |
projects.topics.delete |
pubsub.topics.delete en el tema solicitado. |
projects.topics.detachSubscription |
pubsub.topics.detachSubscription en el tema solicitado. |
projects.topics.get |
pubsub.topics.get en el tema solicitado. |
projects.topics.getIamPolicy |
pubsub.topics.getIamPolicy en el tema solicitado. |
projects.topics.list |
pubsub.topics.list en el proyecto de Cloud solicitado. |
projects.topics.patch |
pubsub.topics.update en el tema solicitado. |
projects.topics.publish |
pubsub.topics.publish en el tema solicitado. |
projects.topics.setIamPolicy |
pubsub.topics.setIamPolicy en el tema solicitado. |
projects.topics.subscriptions.list |
pubsub.topics.get en el tema solicitado. |
projects.topics.testIamPermissions |
Ninguno |
Roles
En la siguiente tabla, se enumeran todas las funciones de Pub/Sub y los permisos asociados con cada una:
Role | Permissions |
---|---|
Pub/Sub Admin( Provides full access to topics and subscriptions. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Editor( Provides access to modify topics and subscriptions, and access to publish and consume messages. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Publisher( Provides access to publish messages to a topic. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Subscriber( Provides access to consume messages from a subscription and to attach subscriptions to a topic. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Viewer( Provides access to view topics and subscriptions. Lowest-level resources where you can grant this role:
|
|
Controla el acceso a través de la consola de Google Cloud
Puedes usar la consola de Google Cloud para administrar el control de acceso a tus temas y proyectos.
Para establecer controles de acceso a nivel de proyecto, sigue estos pasos:
En la consola de Google Cloud, ve a la página IAM.
Elige tu proyecto.
Haga clic en
Agregar.Escribe uno o más nombres principales.
En la lista Selecciona un rol, elige el rol que deseas otorgar.
Haz clic en Guardar.
Verifica que la principalaparezca en la lista con la función que le otorgaste.
Para configurar controles de acceso para temas y suscripciones, sigue estos pasos:
En la consola de Google Cloud, ve a la lista Temas de Pub/Sub.
Si es necesario, selecciona el proyecto habilitado para Pub/Sub.
Realiza uno de los siguientes pasos:
Selecciona los temas para establecer roles en uno o más temas.
Si deseas establecer funciones para una suscripción vinculada a un tema, haz clic en el ID del tema. En la página Detalles del tema, haz clic en el ID de suscripción. Aparecerá la página Detalles de la suscripción.
Si el panel de información está oculto, haz clic en Mostrar panel de información.
En la pestaña Permisos, haz clic en
Agregar principal.Escribe uno o más nombres principales.
En la lista Selecciona un rol, elige el rol que deseas otorgar.
Haz clic en Guardar.
Controla el acceso a través de la API de IAM
La API de IAM de Pub/Sub te permite configurar y obtener políticas sobre temas y suscripciones individuales en un proyecto, y probar los permisos de un usuario para un recurso determinado. Al igual que con los métodos normales de Pub/Sub, puedes invocar los métodos de la API de IAM a través de las bibliotecas cliente, el Explorador de APIs o directamente a través de HTTP.
Ten en cuenta que no puedes usar la API de IAM para Pub/Sub a fin de administrar políticas a nivel de proyecto de Google Cloud.
En las siguientes secciones, se dan ejemplos de cómo establecer y obtener una política, y cómo probar cuáles son los permisos que tiene un emisor para un recurso determinado.
Obtén una política
El método getIamPolicy()
te permite obtener una política existente.
Este método muestra un objeto JSON que contiene la política asociada con el recurso.
A continuación, puedes ver un código de muestra a fin de obtener una política para una suscripción:
C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.
gcloud
Obtén la política de suscripción:
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
Resultado:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:[email protected]" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:[email protected]", "user:[email protected]" } ] }
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
PHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para PHP.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
Rita
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
A continuación, puedes ver un código de muestra a fin de obtener una política para un tema:C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.
gcloud
Obtén la política de temas:
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json
Resultado:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role":" roles/pubsub.viewer", "members": [ "user:[email protected]" ] } ] }
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
PHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para PHP.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
Rita
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
Establece una política
El método setIamPolicy()
te permite adjuntar una política a un recurso. El método setIamPolicy()
toma una SetIamPolicyRequest
, que contiene la política que se establecerá y el recurso al que se adjunta la política.
Muestra la política resultante.
A continuación, puedes ver un código de muestra a fin de establecer una política para una suscripción:
C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.
gcloud
1. Guarda la política para la suscripción.
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json > subscription_policy.json
2. Abre subscription_policy.json
y actualiza las vinculaciones. Para ello, otorga las funciones apropiadas a los miembros correspondientes.
Para obtener más información sobre cómo trabajar con archivos subscription_policy.json
, consulta Política en la documentación de IAM.
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:[email protected]" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:[email protected]" } ] }
3. Aplica la nueva política de suscripción.
gcloud pubsub subscriptions set-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ subscription_policy.json
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
PHP
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
Rita
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
A continuación, puedes ver un código de muestra a fin de establecer una política para un tema:
C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.
gcloud
1. Guarda la política para el tema.
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json > topic_policy.json
2. Abre topic_policy.json
y actualiza las vinculaciones. Para ello, otorga las funciones apropiadas a los miembros correspondientes.
Para obtener más información sobre cómo trabajar con archivos subscription_policy.json
, consulta Política en la documentación de IAM.
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.editor", "members": [ "user:[email protected]", "user:[email protected]" ] } ] }
3. Aplica la nueva política de temas.
gcloud pubsub topics set-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ topic_policy.json
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
PHP
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
Rita
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
Prueba permisos
Puedes usar el método testIamPermissions()
para verificar qué permisos se pueden agregar o quitar para el recurso determinado. Toma como parámetros un nombre de recurso y un conjunto de permisos, y muestra el subconjunto de permisos.
A continuación, puedes ver un código de muestra para probar los permisos de una suscripción:
C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
Resultado:
[ { "name": "pubsub.subscriptions.consume", "stage": "GA" }, { "name": "pubsub.subscriptions.delete", "stage": "GA" }, { "name": "pubsub.subscriptions.get", "stage": "GA" }, { "name": "pubsub.subscriptions.getIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.setIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.update", "stage": "GA" } ]
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
PHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para PHP.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
Rita
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
A continuación, puedes ver un código de muestra para probar los permisos de un tema:
C#
Antes de probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/topics/${TOPIC} \ --format json
Salida
[ { "name": "pubsub.topics.attachSubscription", "stage": "GA" }, { "name": "pubsub.topics.delete", "stage": "GA" }, { "name": "pubsub.topics.detachSubscription", "stage": "GA" }, { "name": "pubsub.topics.get", "stage": "GA" }, { "name": "pubsub.topics.getIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.publish", "stage": "GA" }, { "name": "pubsub.topics.setIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.update", "stage": "GA" } ]
Go
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
PHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para PHP.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
Rita
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
Caso práctico de muestra: comunicación entre proyectos
La IAM de Pub/Sub es útil para optimizar el acceso en la comunicación entre proyectos.
Supongamos que una cuenta de servicio en el proyecto de Cloud A quiere publicar mensajes en un tema del proyecto de Cloud B. Primero, habilita la API de Pub/Sub en el Proyecto A.
Luego, otorga a la cuenta de servicio permiso de edición en el proyecto de Cloud B. Sin embargo, este acción suele resultar poco específica. Puedes usar la API de IAM para lograr un nivel de acceso más detallado.
Por ejemplo, este fragmento usa el método setIamPolicy()
en project-b y un archivo topic_policy.json
preparado para otorgar a la cuenta de servicio foobar@
project-a.iam.gserviceaccount.com
de project-a la función de publicador en el tema projects/
project-b/topics/
topic-b:
gcloud pubsub topics set-iam-policy \ projects/project-b/topics/topic-b \ topic_policy.jsonResultado:
Updated IAM policy for topic topic-b. bindings: - members: - serviceAccount:foobar@project-a.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwWGrQYX6R4=
Comportamiento de disponibilidad parcial
Las verificaciones de autorización dependen del subsistema de IAM. A fin de ofrecer una latencia de respuesta baja y coherente para las operaciones de datos (publicación y consumo de mensajes), el sistema puede recurrir a las políticas de IAM almacenadas en caché. Para obtener información sobre cuándo se aplicarán los cambios, consulta la documentación de IAM.