Identity and Access Management (IAM) ofrece varios tipos de políticas para ayudarte a controlar a qué recursos pueden acceder los principales. En esta guía, se describe cómo usar políticas de acceso para controlar el acceso cuando se publican mensajes de eventos en un bus de Eventarc Advanced.
Las políticas de acceso de IAM pueden permitir y denegar el acceso a los recursos. Sin embargo, a diferencia de las políticas de permiso y denegación de IAM, las políticas de acceso pueden otorgar o denegar el acceso según atributos específicos del contexto del evento, 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, y que te permite habilitar el control de acceso detallado. Por ejemplo, según la evaluación de una expresión de Common Expression Language (CEL) aplicada a un atributo de contexto de evento, puedes permitir o rechazar el permiso para publicar un subconjunto de mensajes de eventos 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, luego, se crea una vinculación de política para conectar esa política a un proyecto Google Cloud .
Antes de comenzar
Antes de crear y aplicar una política de acceso, ya deberías 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 vincularse a un proyecto Google Cloud . Cada política de acceso se puede adjuntar a un máximo de 5 proyectos, y cada proyecto puede tener hasta 5 políticas de acceso adjuntas. Puedes crear un bus porGoogle Cloud proyecto y por región admitida. Una política de acceso adjunta a un proyecto controla el acceso de publicación a cualquier bus de Eventarc Advanced en ese proyecto.
Puedes usar políticas de acceso para controlar el acceso de publicación a un bus de Eventarc Advanced, pero no para controlar el acceso a la suscripción de mensajes de un bus en particular. El permiso compatible es
eventarc.messageBuses.publish.El control de acceso solo se puede basar en atributos de contexto del evento y no en el contenido de la carga útil del evento.
Se descartan los mensajes de eventos que se publican desde fuentes de Google y que se rechazan. Si la entidad principal publica directamente un mensaje de evento, un mensaje de registro
Event published successfullylo indica. Sin embargo, si la condición de la política de acceso rechaza el mensaje del evento, se produce 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 hiciste, habilita las APIs de Eventarc y de 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 de REST
Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a gcloud CLI.
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 Autentícate para usar REST en la documentación de autenticación de Google Cloud .
Roles obligatorios
Un rol de IAM 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, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Crear políticas de acceso:
Administrador de políticas de acceso (
roles/iam.accessPolicyAdmin) -
Aplica políticas de acceso:
Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para controlar el acceso a la publicación. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para controlar el acceso de publicación:
-
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 o con otros roles predefinidos.
Crear una política de acceso
Crea una política de acceso para controlar el acceso cuando publiques en un bus avanzado de Eventarc en tu proyecto.
Puedes crear una política de acceso con Google Cloud CLI o realizando una solicitud directa a la API de IAM v3.
gcloud
Puedes crear una política de acceso ejecutando 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"}}}
Reemplaza lo siguiente:
POLICY_ID: Es un nombre único para la política de acceso, por ejemplo,my-access-policy.POLICY_PROJECT_ID: Es el ID del proyecto Google Cloud en el que se creará la política.POLICY_DESCRIPTION: Es una descripción opcional de la política (256 caracteres como máximo).EFFECT: Es el efecto de la regla (ALLOWoDENY).PRINCIPALS: Son las identidades a las que se aplica esta regla. El formato del identificador depende del tipo de principal al que deseas hacer referencia. Para obtener más información, consulta Tipos de principales para políticas de acceso.EXCLUDED_PRINCIPALS: Son las identidades que se excluyen de la aplicación de la regla, incluso si se enumeran enprincipals. Por ejemplo, puedes agregar un Grupo de Google aprincipalsy, luego, excluir a usuarios específicos que pertenecen a ese grupo.CEL_EXPRESSION: Es la expresión CEL que se evaluará para determinar la aplicabilidad de la regla, por ejemplo,message.version != \"v1\". Para obtener más información, consulta Usa Common Expression Language.
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 de acceso al archivo de política de acceso, que se puede escribir en JSON o YAML (por ejemplo,--details-rules=path_to_file.json).La marca también se puede repetir cuando se configuran 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 Revisa el estado de una operación de larga duración en este documento.
Ejemplo
El siguiente comando crea una política de acceso que permite que la entidad principal 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 de REST
Puedes crear una política de acceso con
projects.locations.accessPolicies.create method.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
POLICY_DISPLAY_NAME: es opcional. Es un nombre legible para la política de acceso, por ejemplo, "Política de ejemplo". El nombre visible puede tener un máximo de 63 caracteres.POLICY_DESCRIPTION: es opcional. Es una descripción legible de la política de acceso, por ejemplo, "Descripción de ejemplo". La descripción puede tener un máximo de 256 caracteres.EFFECT: Es el efecto de la regla, que puede serALLOWoDENY.PRINCIPALS: Son las identidades a las que se aplica esta regla. El formato del identificador depende del tipo de principal al que deseas hacer referencia. Para obtener más información, consulta Tipos de principales para políticas de acceso.EXCLUDED_PRINCIPALS: Son las identidades que se excluyen de la aplicación de la regla, incluso si se enumeran enprincipals. Por ejemplo, puedes agregar un Grupo de Google aprincipalsy, luego, excluir a usuarios específicos que pertenecen a ese grupo.CEL_EXPRESSION: Es la expresión CEL que se evaluará para determinar la aplicabilidad de la regla. Para obtener más información, consulta Usa Common Expression Language.POLICY_PROJECT_ID: Es el Google Cloud ID del proyecto en el que se creará la política.POLICY_ID: Es 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, es posible 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, expande una de estas opciones:
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 Revisa 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 principal especificada publique mensajes de eventos en un bus, pero rechaza 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"
Aplica una política de acceso
Crea una vinculación de política para aplicar tu política de acceso a un proyecto Google Cloud . Cada vinculación de políticas asocia una política de acceso a un recurso.
Puedes aplicar una política de acceso con Google Cloud CLI o realizando una solicitud directa a la API de IAM v3.
gcloud
Puedes crear una vinculación 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
Reemplaza lo siguiente:
BINDING_ID: Es un nombre único para la vinculación de políticas, por ejemplo,my-access-policy-binding.BINDING_PROJECT_ID: Es el ID del proyecto Google Cloud en el que se creará la vinculación. Debe ser el mismo que el ID del proyecto en el que se crea el bus de Eventarc Advanced y debe indicar el destino de la vinculación.
La marca
--locationespecifica la ubicación de la vinculación de 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 Revisa el estado de una operación de larga duración en este documento.
Ejemplo
El siguiente comando crea una vinculación de política que aplica la política de acceso especificada a un proyecto Google Cloud :
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 de REST
Puedes crear una vinculación de política y aplicar tu política de acceso con
projects.locations.policyBindings.create method.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
BINDING_DISPLAY_NAME: Opcional. Es un nombre legible para 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á la vinculación. Debe ser el mismo que el ID del proyecto en el que se crea el bus de Eventarc Advanced y debe indicar el destino de la vinculación.POLICY_PROJECT_ID: Es el Google Cloud ID del proyecto en el que se crea la política.POLICY_ID: Es el nombre de la política de acceso que se 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, expande una de estas opciones:
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 Revisa el estado de una operación de larga duración en esta página.
{ "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 }Revisa el estado de una operación de larga duración
Cuando usas la API de REST de IAM, cualquier método que cambie una política o vinculación de acceso devuelve una operación de larga duración (LRO). La operación de larga duración realiza un seguimiento del estado de la solicitud y también indica si se completó el cambio en la política o la vinculación.
El método
operations.getmuestra el estado de una operación de larga duración.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
OPERATION_NAME: Es 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: Es el Google Cloud ID del proyecto en el que se devuelve la operación.
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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, continúa supervisando su estado obteniendo la operación repetidas veces. Usa la retirada exponencial truncada para ingresar una demora entre cada solicitud. Cuando el campodonese establece comotrue, la operación está completa, y puedes dejar de obtener la operación.¿Qué sigue?
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-12-04 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-12-04 (UTC)"],[],[]]-
Crear políticas de acceso:
Administrador de políticas de acceso (