Stratégie

Stratégie IAM (Identity and Access Management) qui spécifie les contrôles d'accès pour les ressources Google Cloud.

Une stratégie Policy correspond à un ensemble de bindings. Une liaison binding associe un ou plusieurs members à un seul role. Les membres peuvent être des comptes utilisateur, des comptes de service, des groupes Google et des domaines (tels que G Suite). Un role est une liste nommée d'autorisations. Chaque role peut être un rôle IAM prédéfini ou un rôle personnalisé créé par l'utilisateur.

Si vous le souhaitez, une liaison binding peut spécifier une condition, qui est une expression logique n'autorisant l'accès à une ressource que si l'expression renvoie la valeur true. Une condition peut ajouter des contraintes en fonction des attributs de la requête, de la ressource ou des deux.

Exemple JSON :

{
  "bindings": [
    {
      "role": "roles/resourcemanager.organizationAdmin",
      "members": [
        "user:mike@example.com",
        "group:admins@example.com",
        "domain:google.com",
        "serviceAccount:my-project-id@appspot.gserviceaccount.com"
      ]
    },
    {
      "role": "roles/resourcemanager.organizationViewer",
      "members": ["user:eve@example.com"],
      "condition": {
        "title": "expirable access",
        "description": "Does not grant access after Sep 2020",
        "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
      }
    }
  ],
  "etag": "BwWWja0YfJA=",
  "version": 3
}

Exemple YAML :

bindings:
- members:
  - user:mike@example.com
  - group:admins@example.com
  - domain:google.com
  - serviceAccount:my-project-id@appspot.gserviceaccount.com
  role: roles/resourcemanager.organizationAdmin
- members:
  - user:eve@example.com
  role: roles/resourcemanager.organizationViewer
  condition:
    title: expirable access
    description: Does not grant access after Sep 2020
    expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
- etag: BwWWja0YfJA=
- version: 3

Pour obtenir une description d'IAM et de ses fonctionnalités, consultez la documentation IAM.

Représentation JSON

{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
Champs
version

integer

Spécifie le format de la stratégie.

Les valeurs valides sont 0, 1 et 3. Les requêtes spécifiant une valeur non valide sont rejetées.

Toute opération qui affecte les liaisons de rôle conditionnelles doit spécifier la version 3. Cette exigence s'applique aux opérations suivantes :

  • Obtenir une stratégie qui inclut une liaison de rôle conditionnelle
  • Ajouter une liaison de rôle conditionnelle à une stratégie
  • Modifier une liaison de rôle conditionnelle dans une stratégie
  • Supprimer toute liaison de rôle, avec ou sans condition, d'une règle incluant des conditions

Important : Si vous utilisez des conditions IAM, vous devez inclure le champ etag chaque fois que vous appelez setIamPolicy. Si vous omettez ce champ, IAM vous permet de remplacer une stratégie de version 3 par une stratégie de version 1 qui supprime toutes les conditions de la stratégie de version 3.

Si une stratégie n'inclut aucune condition, les opérations associées à cette stratégie peuvent spécifier une version valide ou laisser le champ non défini.

bindings[]

object (Binding)

Associe une liste de members à un role. Si vous le souhaitez, vous pouvez spécifier une condition qui détermine la façon dont les liaisons bindings sont appliquées et à quel moment. Chacune des liaisons bindings doit contenir au moins un membre.

auditConfigs[]

object (AuditConfig)

Spécifie la configuration de journalisation d'audit du cloud pour cette stratégie.

etag

string (bytes format)

etag permet d'effectuer un contrôle de simultanéité positive, pour éviter que les mises à jour simultanées d'une stratégie ne s'écrasent les unes les autres. Afin d'éviter les situations de concurrence, il est fortement suggéré que les systèmes utilisent etag dans le cycle lecture-modification-écriture pour effectuer des mises à jour de stratégies : un etag est renvoyé dans la réponse à getIamPolicy, et les systèmes doivent mettre cet élément dans la requête destinée à setIamPolicy de sorte à s'assurer que leur modification sera appliquée à la même version de la stratégie.

Important : Si vous utilisez des conditions IAM, vous devez inclure le champ etag chaque fois que vous appelez setIamPolicy. Si vous omettez ce champ, IAM vous permet de remplacer une stratégie de version 3 par une stratégie de version 1 qui supprime toutes les conditions de la stratégie de version 3.

Chaîne encodée en base64.

Binding

Associe des membres members à un rôle role.

Représentation JSON

{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
Champs
role

string

Rôle attribué aux members. Par exemple, roles/viewer, roles/editor ou roles/owner.

members[]

string

Spécifie les identités demandant l'accès à une ressource Cloud Platform. Les members peuvent prendre les valeurs suivantes :

  • allUsers : identifiant spécial qui représente toute personne ayant accès à Internet et possédant ou non un compte Google.

  • allAuthenticatedUsers : identifiant spécial qui représente toute personne authentifiée avec un compte Google ou un compte de service.

  • user:{emailid} : adresse e-mail qui représente un compte Google spécifique. Par exemple, alice@example.com.

  • serviceAccount:{emailid} : adresse e-mail qui représente un compte de service. Exemple :my-other-app@appspot.gserviceaccount.com

  • group:{emailid} : adresse e-mail qui représente un groupe Google. Exemple :admins@example.com

  • deleted:user:{emailid}?uid={uniqueid} : adresse e-mail (plus un identifiant unique) représentant un utilisateur récemment supprimé. Par exemple, alice@example.com?uid=123456789012345678901. Si l'utilisateur est récupéré, cette valeur revient à user:{emailid} et l'utilisateur récupéré conserve son rôle dans la liaison.

  • deleted:serviceAccount:{emailid}?uid={uniqueid} : adresse e-mail (plus un identifiant unique) représentant un compte de service récemment supprimé. Par exemple, my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901. Si le compte de service est restauré, cette valeur revient à serviceAccount:{emailid} et le compte de service restauré conserve son rôle dans la liaison.

  • deleted:group:{emailid}?uid={uniqueid} : adresse e-mail (plus un identifiant unique) représentant un groupe Google récemment supprimé. Exemple :admins@example.com?uid=123456789012345678901 Si le groupe est récupéré, cette valeur revient à group:{emailid} et le groupe récupéré conserve son rôle dans la liaison.

  • domain:{domain} : domaine G Suite (principal) qui représente tous les utilisateurs de ce domaine. Par exemple, google.com ou example.com.
condition

object (Expr)

Condition associée à cette liaison. REMARQUE : Une condition non remplie empêchera l'accès de l'utilisateur via la liaison actuelle. Les différentes liaisons, y compris leurs conditions, sont examinées indépendamment.

Expr

Représente une expression textuelle dans la syntaxe CEL (Common Expression Language). CEL est un langage d'expression de type C. La syntaxe et la sémantique du langage CEL sont décrites sur la page https://github.com/google/cel-spec.

Exemple (comparaison) :

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

Exemple (égalité) :

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

Exemple (logique) :

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

Exemple (manipulation de données) :

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

Les fonctions et variables exactes pouvant être référencées dans une expression sont déterminées par le service qui l'évalue. Pour en savoir plus, consultez la documentation sur le service.

Représentation JSON

{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
Champs
expression

string

Représentation textuelle d'une expression à l'aide de la syntaxe CEL (Common Expression Language).

title

string

Facultatif. Titre de l'expression qui correspond à une courte chaîne décrivant sa finalité. Il peut par exemple être utilisé dans les interfaces utilisateur qui permettent de saisir l'expression.

description

string

Facultatif. Description de l'expression. Il s'agit d'un texte plus long décrivant l'expression (par exemple, lorsque l'utilisateur passe la souris sur celle-ci dans une interface utilisateur).

location

string

Chaîne facultative indiquant l'emplacement de l'expression pour la création de rapports d'erreurs (par exemple, un nom de fichier et une position dans le fichier).

AuditConfig

Spécifie la configuration d'audit d'un service. La configuration détermine les types d'autorisations consignés et les identités, le cas échéant, qui sont exclues de la journalisation. Une AuditConfig doit avoir une ou plusieurs AuditLogConfigs.

Si des AuditConfigs existent pour allServices et pour un service spécifique, l'union des deux AuditConfigs est utilisée pour ce service : les log_types spécifiés dans chaque AuditConfig sont activés, et les exempted_members de chaque AuditLogConfig sont exclus.

Exemple de stratégie avec plusieurs AuditConfigs :

{
  "auditConfigs": [
    {
      "service": "allServices"
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE",
        },
        {
          "logType": "ADMIN_READ",
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com"
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

Pour sampleservice, cette stratégie active la journalisation DATA_READ, DATA_WRITE et ADMIN_READ. Par ailleurs, elle exclut jose@example.com de la journalisation DATA_READ et aliya@example.com de la journalisation DATA_WRITE.

Représentation JSON

{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
Champs
service

string

Spécifie un service qui sera activé pour la journalisation d'audit. Par exemple, storage.googleapis.com et cloudsql.googleapis.com. allServices est une valeur spéciale qui couvre tous les services.

auditLogConfigs[]

object (AuditLogConfig)

Configuration de la journalisation de chaque type d'autorisation.

AuditLogConfig

Permet la configuration de la journalisation d'un type d'autorisation. Exemple :

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE",
    }
  ]
}

Ce code active la journalisation DATA_READ et DATA_WRITE, tout en excluant jose@example.com de la journalisation DATA_READ.

Représentation JSON

{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
Champs
logType

enum (LogType)

Type de journal que cette configuration active.

exemptedMembers[]

string

Spécifie les identités qui ne génèrent pas de journalisation pour ce type d'autorisation. Ce champ utilise le même format que Binding.members.

LogType

Liste des types d'autorisations valides pour lesquels la journalisation peut être configurée. Les écritures des administrateurs sont systématiquement consignées. Cela ne peut pas être modifié.

Enums
LOG_TYPE_UNSPECIFIED Cas par défaut. Ce type ne devrait jamais être utilisé.
ADMIN_READ L'administrateur lit des données. Exemple : CloudIAM getIamPolicy
DATA_WRITE Des données sont écrites. Exemple : CloudSQL Users create
DATA_READ Des données sont lues. Exemple : CloudSQL Users list