Créer un niveau d'accès personnalisé

Vous pouvez utiliser des niveaux d'accès personnalisés dans Access Context Manager pour contrôler l'accès aux Google Cloud ressources à l'aide d'expressions booléennes écrites dans un sous-ensemble du langage CEL (Common Expression Language). Vous pouvez évaluer les attributs de la requête, tels que le projet réseau d'origine, l'adresse IP, l'identité et les données de l'appareil provenant de services de sécurité tiers, afin d'appliquer des exigences d'accès précises et contextuelles.

Pour utiliser des attributs d'appareil dans des expressions de niveau d'accès personnalisé, vous devez disposer d'un abonnement payant. Pour en savoir plus sur la création d'expressions CEL, consultez la spécification des niveaux d'accès personnalisés. Une fois que vous avez créé un niveau d'accès personnalisé, vous pouvez le gérer de la même manière qu'un niveau d'accès de base accès.

Avant de commencer

Créer un niveau d'accès personnalisé

Vous pouvez créer un niveau d'accès personnalisé à l'aide de la Google Cloud console, l'outil de ligne de commande gcloud , de l'API REST ou de RPC.

Console

Pour créer un niveau d'accès personnalisé à l'aide de la Google Cloud console, procédez comme suit :

  1. Ouvrez la page Access Context Manager dans la Google Cloud console.

    Accéder à la page Access Context Manager

  2. Si vous y êtes invité, sélectionnez votre organisation.

  3. En haut de la page Access Context Manager, cliquez sur New (Nouveau).

  4. Dans le volet New Access Level (Nouveau niveau d'accès) :

    1. Dans la zone Titre du niveau d'accès, saisissez un titre de niveau d'accès. Ce titre doit contenir au maximum 50 caractères, commencer par une lettre et ne peut contenir que des chiffres, des lettres, des traits de soulignement et des espaces.

    2. À la suite de Créer des conditions en, sélectionnez Mode avancé.

    3. Dans la section Conditions, saisissez les expressions pour votre niveau d'accès personnalisé. La condition doit correspondre à une valeur booléenne unique.

      Pour obtenir des exemples et des informations supplémentaires sur la compatibilité avec le CEL (Common Expression Language) et les niveaux d'accès personnalisés, consultez la section Spécification de niveaux d'accès personnalisés.

    4. Cliquez sur Save.

gcloud

Pour créer un niveau d'accès personnalisé à l'aide de l'outil de ligne de commande gcloud, utilisez la gcloud access-context-manager levels create commande.

gcloud access-context-manager levels create LEVEL_NAME \
--title=TITLE \
--custom-level-spec=FILE \
--description=DESCRIPTION \
--policy=POLICY_NAME

Remplacez les éléments suivants :

  • LEVEL_NAME : nom unique du niveau d'accès. Le nom doit commencer par une lettre et ne contenir que des lettres, des chiffres et des traits de soulignement. Le nom ne peut pas comporter plus de 50 caractères.

  • TITLE: titre court du niveau d'accès, présenté dans un format lisible par l'humain.

  • FILE : fichier YAML contenant votre expression CEL au format d'une seule paire clé-valeur : expression: "CEL_EXPRESSION".

    Pour obtenir des exemples et des informations supplémentaires sur la compatibilité avec le CEL (Common Expression Language) et les niveaux d'accès personnalisés, consultez la section Spécification de niveaux d'accès personnalisés.

  • DESCRIPTION: description du niveau d'accès, présentée dans un format lisible par l'humain.

  • POLICY_NAME: nom au format numérique de la règle d'accès de votre organisation.

Vous pouvez éventuellement inclure n'importe quel indicateur gcloud-wide flags.

Fichier YAML custom-level-spec

Lorsque vous utilisez l'outil de ligne de commande gcloud pour créer un niveau d'accès personnalisé, vous devez fournir un fichier YAML pour l'option custom-level-spec. Le fichier YAML définit une expression CEL qui correspond à une valeur booléenne unique. Le fichier YAML doit contenir une seule paire clé-valeur au format expression: "CEL_EXPRESSION". La valeur de expression doit être une chaîne.

Exemple de fichier YAML

expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ['US'] || device.is_admin_approved_device)"

Exemple de commande

gcloud access-context-manager levels create Custom_Trust \
    --custom-level-spec=customspec.yaml \
    --description="Custom access level for corp." \
    --title="Custom Trust Level" \
    --policy=1521580097614100

REST

Pour créer un niveau d'accès personnalisé à l'aide de l'API REST, utilisez la accessPolicies.accessLevels.create méthode.

Corps de la requête

Dans le corps de la requête de l'appel, incluez une instance de l'objet AccessLevel.

{
  "name": string,
  "title": string,
  "description": string,
  "custom": {
    "expr": {
      "expression": string,
      "title": string,
      "description": string
    }
  }
}

Pour le champ custom, créez un objet qui inclut les expressions CEL associées à votre niveau d'accès personnalisé. L'expression complète doit se résoudre en une valeur booléenne. Les champs title et description sont facultatifs.

Exemple

{
  "name": "example_custom_level",
  "title": "Example custom level",
  "description": "An example custom access level.",
  "custom":  {
    "expr": {
      "expression": "device.is_corp_owned == true || (device.os_type != OsType.OS_UNSPECIFIED && device.is_admin_approved_device == true)",
      "title": "Check for known devices",
      "description": "Permits requests from corp-owned devices and admin-approved devices with a known OS."
    }
  }
}

RPC

Pour créer un niveau d'accès personnalisé à l'aide de RPC, appelez CreateAccessLevel.

Pour le champ access_level, incluez une instance de AccessLevel.

Champs
name
Type chaîne
Description

Obligatoire.

Nom de ressource pour le niveau d'accès. Le POLICY_ID est le nom au format numérique de la règle d'accès de votre organisation. Le SHORT_NAME doit commencer par une lettre et ne contenir que des lettres, des chiffres et des traits de soulignement.

Format:

            accessPolicies/policy_id/accessLevels/short_name
            
title
Type chaîne
Description

Libellé lisible par l'humain pour le niveau d'accès. Les niveaux d'accès doivent avoir des noms uniques.

description
Type chaîne
Description

Description du niveau d'accès.

custom
Type chaîne
Description

Expressions CEL associées à votre niveau d'accès personnalisé. L'expression complète doit se résoudre en une valeur booléenne.

Exemples de niveaux d'accès personnalisés

Cette section fournit des exemples de niveaux d'accès personnalisés.

Restreindre l'accès en fonction du projet source

Vous pouvez limiter l'accès aux ressources pour n'autoriser que les requêtes provenant de projets Google Cloud spécifiques et de projets locataires associés. La restriction d'accès basée sur un projet est utile pour sécuriser les interactions par des identités de charge de travail, qui sont des identités non humaines appartenant à un Google Cloud projet. Les identités de charge de travail incluent les comptes de service, les identités de fédération d'identité de charge de travail, les identités de charge de travail gérées et les identités d'agent.

L'expression suivante accorde l'accès si la requête provient de projects/123456789 :

originatesFromProjects(origin, ["projects/123456789"])

Restreindre l'accès de Workload Identity à son propre projet réseau

Vous pouvez restreindre une Workload Identity afin qu'elle ne puisse effectuer des requêtes qu'à partir de réseaux associés à un Google Cloud projet propriétaire de la Workload Identity. Le projet peut être un projet de premier niveau ou des projets locataires du projet de premier niveau. La restriction d'accès basée sur un projet est utile pour sécuriser les interactions Workload Identity. Contrairement à originatesFromProjects, vous n'avez pas besoin de spécifier de numéros de projet dans l'expression, ce qui vous permet de réutiliser le même niveau d'accès dans plusieurs projets.

L'expression suivante accorde l'accès si le projet réseau d'origine (ou ses projets locataires associés) correspond au projet propriétaire de l'identité de charge de travail appelante :

request.auth.matchesNetworkProject(origin)