Gestión de Identidades y Accesos (IAM) ofrece varios tipos de políticas para ayudarte a controlar a qué recursos pueden acceder las entidades principales. En esta guía se describe cómo usar políticas de acceso para controlar el acceso al publicar mensajes de eventos en un bus avanzado de Eventarc.
Las políticas de acceso de gestión de identidades y accesos pueden permitir y denegar el acceso a los recursos. Sin embargo, a diferencia de las políticas de admisión y de denegación de IAM, las políticas de acceso pueden conceder o denegar el acceso en función de atributos de contexto de eventos específicos, como la prioridad del mensaje del evento.
Cada política de acceso es un conjunto de reglas que te permite identificar principales y definir condiciones que determinan la aplicabilidad de una regla, así como habilitar un control de acceso pormenorizado. Por ejemplo, en función de la evaluación de una expresión del lenguaje de expresión común (CEL) aplicada a un atributo de contexto de evento, puedes permitir o denegar el permiso para publicar un subconjunto de mensajes de evento en un bus avanzado de Eventarc.
En esta guía se explica cómo crear y aplicar una política de acceso. Para ello, primero se crea una política de acceso y, a continuación, se crea un enlace de política para conectar esa política a un proyecto. Google Cloud
Antes de empezar
Antes de crear y aplicar una política de acceso, debes haber creado un bus avanzado de Eventarc en el que se puedan publicar mensajes de eventos.
Asegúrate de tener en cuenta lo siguiente:
Las políticas de acceso deben aplicarse o asociarse a un Google Cloud proyecto. Cada política de acceso se puede asociar a un máximo de 5 proyectos, y cada proyecto puede tener un máximo de 5 políticas de acceso asociadas. Puedes crear un bus por proyecto y por región admitida.Google Cloud Una política de acceso asociada a un proyecto controla el acceso de publicación a cualquier bus avanzado de Eventarc de ese proyecto.
Puedes usar políticas de acceso para controlar el acceso de publicación a un bus avanzado de Eventarc, pero no para controlar el acceso a la suscripción de mensajes de un bus concreto. El permiso admitido es
eventarc.messageBuses.publish.El control de acceso solo se puede basar en los atributos del contexto del evento y no en el contenido de la carga útil del evento.
Los mensajes de eventos que se publican desde fuentes de Google y que se deniegan se descartan. Si la entidad principal publica directamente un mensaje de evento, se indica con un mensaje de registro
Event published successfully. Sin embargo, si la condición de la política de acceso deniega el mensaje del evento, se producirá un error similar al siguiente:ERROR: (gcloud.beta.eventarc.message-buses.publish) PERMISSION_DENIED: Permission 'eventarc.googleapis.com/messageBuses.publish' denied on resource due to an IAM Access Policy. This command is authenticated as user@example.com which is the active account specified by the [core/account] property. '@type': type.googleapis.com/google.rpc.ErrorInfo domain: iam.googleapis.com metadata: permission: eventarc.googleapis.com/messageBuses.publish reason: IAM_PERMISSION_DENIED
Si aún no lo ha hecho, habilite las APIs Eventarc e IAM:
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ iam.googleapis.com
Configura la autenticación:
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
API REST
Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.
Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:
gcloud initIf you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre Google Cloud autenticación.
Roles obligatorios
Un rol de gestión de identidades y accesos contiene un conjunto de permisos que te permiten realizar acciones específicas en los recursos de Google Cloud .
Para obtener los permisos que necesitas para controlar el acceso de publicación, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:
-
Crea políticas de acceso:
Administrador de políticas de acceso (
roles/iam.accessPolicyAdmin) -
Aplica políticas de acceso:
Administrador de gestión de identidades y accesos de proyectos (
roles/resourcemanager.projectIamAdmin)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para controlar el acceso de publicación. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para controlar el acceso de publicación, se necesitan los siguientes permisos:
-
Crea políticas de acceso:
iam.accessPolicies.create -
Aplica políticas de acceso:
-
iam.accessPolicies.bind -
resourcemanager.projects.createPolicyBinding
-
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Crear una política de acceso
Crea una política de acceso para controlar el acceso al publicar en un bus avanzado de Eventarc en tu proyecto.
Puedes crear una política de acceso con la CLI de Google Cloud o haciendo una solicitud directa a la API IAM v3.
gcloud
Para crear una política de acceso, ejecuta el comando gcloud beta iam access-policies create.
gcloud beta iam access-policies create POLICY_ID \ --project=POLICY_PROJECT_ID \ --location=global \ --details-rules=description="POLICY_DESCRIPTION",effect=EFFECT, \ principals=[PRINCIPALS],excludedPrincipals=[EXCLUDED_PRINCIPALS], \ permissions=[eventarc.googleapis.com/messageBuses.publish], \ activationConditions={eventarc.googleapis.com={celCondition={expression="CEL_EXPRESSION"}}}
Haz los cambios siguientes:
POLICY_ID: un nombre único para la política de acceso. Por ejemplo,my-access-policy.POLICY_PROJECT_ID: el ID de proyecto del proyecto en el que se creará la política. Google CloudPOLICY_DESCRIPTION: una descripción opcional de la política (256 caracteres como máximo).EFFECT: el efecto de la regla (ALLOWoDENY).PRINCIPALS: las identidades a las que se aplica esta regla. El formato del identificador depende del tipo de principal al que quieras hacer referencia. Para obtener más información, consulta Tipos de principales de las políticas de acceso.EXCLUDED_PRINCIPALS: las identidades que se excluyen de la aplicación de la regla, aunque figuren enprincipals. Por ejemplo, puedes añadir un grupo de Google aprincipalsy, a continuación, excluir a usuarios específicos que pertenezcan a ese grupo.CEL_EXPRESSION: expresión CEL que se evaluará para determinar si se aplica la regla. Por ejemplo,message.version != \"v1\". Para obtener más información, consulta Usar lenguaje de expresión común.
Ten en cuenta lo siguiente:
- La marca
--locationespecifica la ubicación de la política de acceso y debe serglobal. La marca
--details-rulespuede especificar la ruta al archivo de política de acceso, que se puede escribir en formato JSON o YAML. Por ejemplo,--details-rules=path_to_file.json.También se puede repetir la marca al configurar varias reglas. Cada regla se evalúa de forma independiente.
Una política de acceso usa el siguiente formato:
{ "displayName": "POLICY_DISPLAY_NAME", "details": { "rules": [ { "description": "POLICY_DESCRIPTION", "effect": "EFFECT", "principals": [ "PRINCIPALS" ], "excludedPrincipals": [ "EXCLUDED_PRINCIPALS" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ], "activationConditions": { "eventarc.googleapis.com": { "celCondition": { "expression": "CEL_EXPRESSION" } } } } ] } }
La respuesta contiene una operación de larga duración que representa tu solicitud. Para obtener información sobre cómo obtener el estado de una operación de larga duración, consulta la sección Comprobar el estado de una operación de larga duración de este documento.
Ejemplo
El siguiente comando crea una política de acceso que permite que la entidad de seguridad especificada publique mensajes de eventos en un bus, pero deniega la publicación cuando el tipo de medio de datos es JSON.
gcloud beta iam access-policies create my-access-policy \ --project=my-project-id \ --location=global \ --details-rules=description="Allow publishing to bus",effect=ALLOW,principals=[principal://goog/subject/user@example.com],permissions=[eventarc.googleapis.com/messageBuses.publish] \ --details-rules=description="Deny publishing to bus if media type is JSON",effect=DENY,principals=[principal://goog/subject/user@example.com],permissions=[eventarc.googleapis.com/messageBuses.publish],activationConditions={eventarc.googleapis.com={celCondition={expression="message.datacontenttype=='application/json'"}}}
API REST
Puedes crear una política de acceso con la
projects.locations.accessPolicies.create method.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
POLICY_DISPLAY_NAME: opcional. Nombre legible de la política de acceso (por ejemplo, "Política de ejemplo"). El nombre visible puede tener un máximo de 63 caracteres.POLICY_DESCRIPTION: opcional. Descripción de la política de acceso legible por humanos. Por ejemplo, "Descripción de ejemplo". La descripción puede tener un máximo de 256 caracteres.EFFECT: el efecto de la regla, que puede serALLOWoDENY.PRINCIPALS: las identidades a las que se aplica esta regla. El formato del identificador depende del tipo de principal al que quieras hacer referencia. Para obtener más información, consulta Tipos de principales de las políticas de acceso.EXCLUDED_PRINCIPALS: las identidades que se excluyen de la aplicación de la regla, aunque figuren enprincipals. Por ejemplo, puedes añadir un grupo de Google aprincipalsy, a continuación, excluir a usuarios específicos que pertenezcan a ese grupo.CEL_EXPRESSION: la expresión CEL que se evaluará para determinar si se aplica la regla. Para obtener más información, consulta Usar lenguaje de expresión común.POLICY_PROJECT_ID: el Google Cloud ID del proyecto en el que se creará la política.POLICY_ID: un nombre único para la política de acceso, por ejemplo,my-access-policy.
Se pueden enumerar varias reglas. Cada regla se evalúa de forma independiente. Si una regla no se aplica, puede que se apliquen otras.
Cuerpo JSON de la solicitud:
{ "displayName": "POLICY_DISPLAY_NAME", "details": { "rules": [ { "description": "POLICY_DESCRIPTION", "effect": "EFFECT", "principals": [ "PRINCIPALS" ], "excludedPrincipals": [ "EXCLUDED_PRINCIPALS" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ], "activationConditions": { "eventarc.googleapis.com": { "celCondition": { "expression": "CEL_EXPRESSION" } } } } ] } }Para enviar tu solicitud, despliega una de estas opciones:
La respuesta contiene una operación de larga duración que representa tu solicitud. Para saber cómo obtener el estado de una operación de larga duración, consulta Comprobar el estado de una operación de larga duración en esta página.
{ "name": "projects/POLICY_PROJECT_ID/locations/global/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.iam.v3.OperationMetadata", "createTime": "2025-01-25T17:17:45.782370139Z", "target": "projects/POLICY_PROJECT_ID/locations/global/accessPolicies/POLICY_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v3" }, "done": false }Ejemplo
La siguiente política de acceso permite que la entidad de seguridad especificada publique mensajes de eventos en un bus, pero deniega la publicación cuando la prioridad del mensaje es
HIGH.cat > request.json << 'EOF' { "displayName": "Eventarc Advanced access policy", "details": { "rules": [ { "description": "Allow publishing to bus", "effect": "ALLOW", "principals": [ "principal://goog/subject/user@example.com" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ] }, { "description": "Deny publishing to bus if message priority is HIGH", "effect": "DENY", "principals": [ "principal://goog/subject/user@example.com" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ], "activationConditions": { "eventarc.googleapis.com": { "celCondition": { "expression": "message.priority == \"HIGH\"" } } } } ] } } EOF curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://iam.googleapis.com/v3/projects/POLICY_PROJECT_ID/locations/global/accessPolicies?access_policy_id=POLICY_ID"
Aplicar una política de acceso
Crea un enlace de política para aplicar tu política de acceso a un Google Cloud proyecto. Cada enlace de política vincula una política de acceso a un recurso.
Puedes aplicar una política de acceso mediante la CLI de Google Cloud o haciendo una solicitud directa a la API IAM v3.
gcloud
Puedes crear un enlace de política y aplicar tu política de acceso ejecutando el comando gcloud beta iam policy-bindings create.
gcloud beta iam policy-bindings create BINDING_ID \ --project=BINDING_PROJECT_ID \ --location=global \ --policy=projects/POLICY_PROJECT_ID/locations/global/accessPolicies/POLICY_ID \ --target-resource=//cloudresourcemanager.googleapis.com/projects/BINDING_PROJECT_ID
Haz los cambios siguientes:
BINDING_ID: un nombre único para el enlace de la política (por ejemplo,my-access-policy-binding).BINDING_PROJECT_ID: el ID del proyecto en el que se creará el enlace. Google Cloud Debe ser el mismo que el ID del proyecto en el que se crea el bus avanzado de Eventarc e indica el destino de la vinculación.
La marca
--locationespecifica la ubicación de la vinculación de la política y debe serglobal.La respuesta contiene una operación de larga duración que representa tu solicitud. Para obtener información sobre cómo obtener el estado de una operación de larga duración, consulta la sección Comprobar el estado de una operación de larga duración de este documento.
Ejemplo
El siguiente comando crea un enlace de política que aplica la política de acceso especificada a un Google Cloud proyecto:
gcloud beta iam policy-bindings create my-access-policy-binding \ --project=my-project-id \ --location=global \ --policy=projects/my-project-id/locations/global/accessPolicies/my-access-policy \ --target-resource=//cloudresourcemanager.googleapis.com/projects/my-project-id
API REST
Puedes crear un enlace de política y aplicar tu política de acceso mediante
projects.locations.policyBindings.create method.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
BINDING_DISPLAY_NAME: opcional. Nombre legible de la vinculación de la política (por ejemplo, "Vinculación de ejemplo"). El nombre visible puede tener un máximo de 63 caracteres.BINDING_PROJECT_ID: el Google Cloud ID del proyecto en el que se creará el enlace. Debe ser el mismo ID del proyecto en el que se crea el bus avanzado de Eventarc e indica el destino de la vinculación.POLICY_PROJECT_ID: el Google Cloud ID del proyecto en el que se crea la política.POLICY_ID: el nombre de la política de acceso que se va a vincular (por ejemplo,my-access-policy).
Cuerpo JSON de la solicitud:
{ "display_name": "BINDING_DISPLAY_NAME", "target": {"resource": "//cloudresourcemanager.googleapis.com/projects/BINDING_PROJECT_ID"}, "policy_kind": "ACCESS", "policy": "projects/POLICY_PROJECT_ID/locations/global/accessPolicies/POLICY_ID" }Para enviar tu solicitud, despliega una de estas opciones:
La respuesta contiene una operación de larga duración que representa tu solicitud. Para saber cómo obtener el estado de una operación de larga duración, consulta la sección Comprobar el estado de una operación de larga duración en esta página de este documento.
{ "name": "projects/BINDING_PROJECT_ID/locations/global/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.iam.v3.OperationMetadata", "createTime": "2025-01-25T17:17:45.782370139Z", "target": "projects/BINDING_PROJECT_ID/locations/global/policyBindings/POLICY_ID-binding", "verb": "create", "requestedCancellation": false, "apiVersion": "v3" }, "done": false }Comprobar el estado de una operación de larga duración
Cuando usas la API REST de IAM, cualquier método que cambie una política o una vinculación de acceso devuelve una operación de larga duración (OLD). La operación de larga duración monitoriza el estado de la solicitud e indica si se ha completado el cambio en la política o en la vinculación.
El método
operations.getdevuelve el estado de una operación de larga duración.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
OPERATION_NAME: el nombre completo de la operación. Recibirás este nombre en la respuesta a tu solicitud original.El nombre de la operación tiene el siguiente formato:
projects/PROJECT_ID/locations/global/operations/OPERATION_ID
PROJECT_ID: el ID del proyecto Google Cloud en el que se devuelve la operación.
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.iam.v3.OperationMetadata", "createTime": "2025-01-28T00:05:12.006289686Z", "endTime": "2025-01-28T00:05:12.192141801Z", "target": "projects/PROJECT_ID/locations/global/accessPolicies/POLICY_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v3" }, "done": true, "response": { ACCESS_POLICY } }Si el campo
donede la operación no está presente, sigue monitorizando su estado obteniendo la operación repetidamente. Usa un tiempo de espera exponencial truncado para introducir un retraso entre cada solicitud. Cuando el campodonese define comotrue, la operación se completa y puedes dejar de obtenerla.Siguientes pasos
- Control de acceso con la gestión de identidades y accesos
- Crear una inscripción para recibir eventos
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-12-04 (UTC).
[[["Es fácil de entender","easyToUnderstand","thumb-up"],["Me ofreció una solución al problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Es difícil de entender","hardToUnderstand","thumb-down"],["La información o el código de muestra no son correctos","incorrectInformationOrSampleCode","thumb-down"],["Me faltan las muestras o la información que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-12-04 (UTC)."],[],[]]-
Crea políticas de acceso:
Administrador de políticas de acceso (