Identity and Access Management (IAM) propose plusieurs types de stratégies pour vous aider à contrôler les ressources auxquelles les principaux peuvent accéder. Ce guide explique comment utiliser des règles d'accès pour contrôler l'accès lors de la publication de messages d'événement sur un bus Eventarc Advanced.
Les règles d'accès IAM peuvent autoriser ou refuser l'accès aux ressources. Toutefois, contrairement aux stratégies IAM d'autorisation et de refus, les stratégies d'accès peuvent accorder ou refuser l'accès en fonction d'attributs de contexte d'événement spécifiques, tels que la priorité du message d'événement.
Chaque stratégie d'accès est un ensemble de règles qui vous permet d'identifier les comptes principaux et de définir des conditions qui déterminent l'applicabilité d'une règle. Elle vous permet également d'activer un contrôle des accès d'accès précis. Par exemple, en fonction de l'évaluation d'une expression CEL (Common Expression Language) appliquée à un attribut de contexte d'événement, vous pouvez autoriser ou refuser l'autorisation de publier un sous-ensemble de messages d'événement sur un bus Eventarc Advanced.
Ce guide explique comment créer et appliquer une règle d'accès. Pour ce faire, vous devez d'abord créer une règle d'accès, puis une liaison de règle pour associer cette règle à un projet Google Cloud .
Avant de commencer
Avant de créer et d'appliquer une règle d'accès, vous devez avoir créé un bus Eventarc Advanced sur lequel les messages d'événement peuvent être publiés.
Assurez-vous de tenir compte des points suivants :
Les règles d'accès doivent être appliquées à un projet Google Cloud ou liées à celui-ci. Chaque règle d'accès peut être associée à cinq projets maximum, et chaque projet peut être associé à cinq règles d'accès maximum. Vous pouvez créer un bus par projetGoogle Cloud et par région acceptée. Une règle d'accès associée à un projet contrôle l'accès à la publication pour tout bus Eventarc Advanced de ce projet.
Vous pouvez utiliser des règles d'accès pour contrôler l'accès à la publication sur un bus Eventarc Advanced, mais pas pour contrôler l'accès à l'abonnement aux messages d'un bus spécifique. L'autorisation acceptée est
eventarc.messageBuses.publish.Le contrôle des accès ne peut être basé que sur les attributs de contexte d'événement, et non sur le contenu de la charge utile de l'événement.
Les messages d'événement publiés à partir de sources Google et refusés sont supprimés. Si le principal publie directement un message d'événement, un message de journal
Event published successfullyl'indique. Toutefois, si le message d'événement est refusé par la condition de la règle d'accès, une erreur semblable à la suivante se produit :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 vous ne l'avez pas déjà fait, activez les API Eventarc et IAM :
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ iam.googleapis.com
Configurez l'authentification :
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
Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la 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.
Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud .
Rôles requis
Un rôle IAM contient un ensemble d'autorisations qui vous permet d'effectuer des actions spécifiques sur les ressources Google Cloud .
Pour obtenir les autorisations nécessaires pour contrôler l'accès à la publication, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
-
Créer des règles d'accès :
Administrateur de règles d'accès (
roles/iam.accessPolicyAdmin) -
Appliquer des règles d'accès :
Administrateur IAM de projet (
roles/resourcemanager.projectIamAdmin)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Ces rôles prédéfinis contiennent les autorisations requises pour contrôler l'accès à la publication. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour contrôler l'accès à la publication :
-
Créez des règles d'accès :
iam.accessPolicies.create -
Appliquez des règles d'accès :
-
iam.accessPolicies.bind -
resourcemanager.projects.createPolicyBinding
-
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Créer une règle d'accès
Créez une stratégie d'accès pour contrôler l'accès lorsque vous publiez des événements sur un bus Eventarc Advanced dans votre projet.
Vous pouvez créer une stratégie d'accès à l'aide de la Google Cloud CLI ou en envoyant une requête directe à l'API IAM v3.
gcloud
Vous pouvez créer une règle d'accès en exécutant la commande 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"}}}
Remplacez les éléments suivants :
POLICY_ID: nom unique de la règle d'accès, par exemplemy-access-policy.POLICY_PROJECT_ID: ID du projet dans lequel la règle sera créée. Google CloudPOLICY_DESCRIPTION: description facultative de la règle (256 caractères maximum).EFFECT: effet de la règle (ALLOWouDENY).PRINCIPALS: identités auxquelles s'applique cette règle. Le format de l'identifiant dépend du type de compte principal auquel vous souhaitez faire référence. Pour en savoir plus, consultez Types de comptes principaux pour les règles d'accès.EXCLUDED_PRINCIPALS: identités exclues de l'application de la règle, même si elles sont listées dansprincipals. Par exemple, vous pouvez ajouter un groupe Google àprincipals, puis exclure des utilisateurs spécifiques appartenant à ce groupe.CEL_EXPRESSION: expression CEL qui sera évaluée pour déterminer l'applicabilité de la règle (par exemple,message.version != \"v1\"). Pour en savoir plus, consultez Utiliser le Common Expression Language.
Veuillez noter les points suivants :
- L'indicateur
--locationspécifie l'emplacement de la règle d'accès et doit êtreglobal. L'indicateur
--details-rulespeut spécifier le chemin d'accès au fichier de stratégie d'accès, qui peut être écrit en JSON ou en YAML (par exemple,--details-rules=path_to_file.json).Cet indicateur peut également être répété lorsque vous configurez plusieurs règles. Chaque règle est évaluée indépendamment.
Une stratégie d'accès utilise le format suivant :
{ "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 réponse contient une opération de longue durée représentant votre demande. Pour savoir comment obtenir l'état d'une opération de longue durée, consultez la section Vérifier l'état d'une opération de longue durée dans ce document.
Exemple
La commande suivante crée une stratégie d'accès qui autorise le principal spécifié à publier des messages d'événement sur un bus, mais refuse la publication lorsque le type de support de données est 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
Vous pouvez créer une règle d'accès à l'aide de
projects.locations.accessPolicies.create method.Avant d'utiliser les données de requête, effectuez les remplacements suivants :
POLICY_DISPLAY_NAME(facultatif) : Nom lisible de la règle d'accès (par exemple, "Exemple de règle"). Le nom à afficher ne peut pas comporter plus de 63 caractères.POLICY_DESCRIPTION(facultatif) : Description lisible de la règle d'accès (par exemple, "Description de l'exemple"). La description ne peut pas comporter plus de 256 caractères.EFFECT: effet de la règle,ALLOWouDENY.PRINCIPALS: identités auxquelles cette règle s'applique. Le format de l'identifiant dépend du type de compte principal auquel vous souhaitez faire référence. Pour en savoir plus, consultez Types de comptes principaux pour les règles d'accès.EXCLUDED_PRINCIPALS: identités exclues de l'application de la règle, même si elles sont listées dansprincipals. Par exemple, vous pouvez ajouter un groupe Google àprincipals, puis exclure des utilisateurs spécifiques appartenant à ce groupe.CEL_EXPRESSION: expression CEL qui sera évaluée pour déterminer l'applicabilité de la règle. Pour en savoir plus, consultez Utiliser le Common Expression Language.POLICY_PROJECT_ID: Google Cloud ID du projet dans lequel la règle sera créée.POLICY_ID: nom unique de la stratégie d'accès, par exemplemy-access-policy.
Plusieurs règles peuvent être listées. Chaque règle est évaluée indépendamment. Si une règle ne s'applique pas, d'autres le feront peut-être.
Corps JSON de la requête :
{ "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" } } } } ] } }Pour envoyer votre requête, développez l'une des options suivantes :
La réponse contient une opération de longue durée représentant votre demande. Pour savoir comment obtenir l'état d'une opération de longue durée, consultez la section Vérifier l'état d'une opération de longue durée sur cette page.
{ "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 }Exemple
La règle d'accès suivante autorise le compte principal spécifié à publier des messages d'événement dans un bus, mais refuse la publication lorsque la priorité du message est
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"
Appliquer une règle d'accès
Créez une liaison de stratégie pour appliquer votre règle d'accès à un projet Google Cloud . Chaque liaison de stratégie associe une stratégie d'accès à une ressource.
Vous pouvez appliquer une règle d'accès à l'aide de la Google Cloud CLI ou en envoyant une requête directe à l'API IAM v3.
gcloud
Vous pouvez créer une association de stratégie et appliquer votre règle d'accès en exécutant la commande 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
Remplacez les éléments suivants :
BINDING_ID: nom unique de la liaison de stratégie, par exemplemy-access-policy-binding.BINDING_PROJECT_ID: ID du projet Google Cloud dans lequel la liaison sera créée. Il doit s'agir du même ID que celui du projet dans lequel le bus Eventarc Advanced est créé. Il indique la cible de la liaison.
L'indicateur
--locationspécifie l'emplacement de la liaison de stratégie et doit êtreglobal.La réponse contient une opération de longue durée représentant votre demande. Pour savoir comment obtenir l'état d'une opération de longue durée, consultez la section Vérifier l'état d'une opération de longue durée de ce document.
Exemple
La commande suivante crée une liaison de règle qui applique la règle d'accès spécifiée à un projet 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 REST
Vous pouvez créer une association de règles et appliquer votre règle d'accès à l'aide de
projects.locations.policyBindings.create method.Avant d'utiliser les données de requête, effectuez les remplacements suivants :
BINDING_DISPLAY_NAME: facultatif. Nom lisible de l'association de stratégie (par exemple, "Association exemple"). Le nom à afficher ne peut pas comporter plus de 63 caractères.BINDING_PROJECT_ID: Google Cloud ID du projet dans lequel la liaison sera créée. Il doit s'agir du même ID que celui du projet dans lequel le bus Eventarc Advanced est créé. Il indique la cible de la liaison.POLICY_PROJECT_ID: Google Cloud ID du projet dans lequel la règle est créée.POLICY_ID: nom de la stratégie d'accès à lier, par exemplemy-access-policy.
Corps JSON de la requête :
{ "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" }Pour envoyer votre requête, développez l'une des options suivantes :
La réponse contient une opération de longue durée représentant votre demande. Pour savoir comment obtenir l'état d'une opération de longue durée, consultez la section Vérifier l'état d'une opération de longue durée sur cette page.
{ "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 }Vérifier l'état d'une opération de longue durée
Lorsque vous utilisez l'API REST IAM, toute méthode modifiant une stratégie ou une liaison d'accès renvoie une opération de longue durée (LRO). L'opération de longue durée suit l'état de la requête et indique si la modification de la règle ou de la liaison est terminée.
La méthode
operations.getrenvoie l'état d'une opération de longue durée.Avant d'utiliser les données de requête, effectuez les remplacements suivants :
OPERATION_NAME: nom complet de l'opération. Vous recevez ce nom dans la réponse à votre requête d'origine.Il est au format suivant :
projects/PROJECT_ID/locations/global/operations/OPERATION_ID
PROJECT_ID: ID Google Cloud du projet dans lequel l'opération est renvoyée.
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "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 le champ
donede l'opération n'est pas présent, continuez à surveiller son état en obtenant l'opération de façon répétée. Utilisez un intervalle exponentiel tronqué entre les tentatives pour introduire un délai entre chaque requête. Lorsque le champdoneest défini surtrue, l'opération est terminée et vous pouvez cesser de l'obtenir.Étapes suivantes
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/12/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/12/04 (UTC)."],[],[]]-
Créer des règles d'accès :
Administrateur de règles d'accès (