Appliquer des contraintes personnalisées aux projets

En tant qu'administrateur d'organisation, vous pouvez créer des contraintes personnalisées pour les services et les jobs Cloud Run. Les règles d'administration appliquent ces contraintes personnalisées au niveau du projet, du dossier ou de l'organisation.

Cette page explique comment créer des contraintes personnalisées pour les services et les jobs, et comment les appliquer au niveau du projet. Pour en savoir plus sur les règles d'administration personnalisées, consultez la page Créer et gérer des règles d'administration personnalisées.

Cloud Run vous permet d'écrire un nombre illimité de contraintes personnalisées à l'aide de la plupart des champs configurés par l'utilisateur dans l'API Cloud Run Admin. Par exemple, vous pouvez créer une contrainte personnalisée qui empêche les services ou les jobs de définir la phase de lancement sur "Alpha" ou "Bêta".

Une fois appliquées, les requêtes qui ne respectent pas une règle imposant une contrainte personnalisée affichent un message d'erreur dans gcloud CLI et dans les journaux Cloud Run. Le message d'erreur contient l'ID et la description de la contrainte personnalisée enfreinte.

Avant de commencer

  • Vous devez disposer du rôle Administrateur des règles d'administration roles/orgpolicy.policyAdmin pour créer et afficher les règles d'administration du client. Consultez la section Rôles requis.

Limites

Personnaliser les contraintes courantes

Les exemples suivants montrent comment spécifier des contraintes personnalisées pour des cas d'utilisation courants à l'aide de gcloud CLI. Pour obtenir des instructions sur la console Google Cloud, consultez Créer et gérer des règles d'administration personnalisées.

Restreindre les paramètres d'entrée

Créez une contrainte personnalisée qui restreint le paramètre d'entrée des services Cloud Run nouveaux ou révisés, puis appliquez la contrainte personnalisée au niveau du projet.

Pour spécifier une contrainte personnalisée qui nécessite qu'un service soit défini sur "Interne" à l'aide de Google Cloud CLI, procédez comme suit :

  1. Créez un fichier ingressConstraint.yaml avec le contenu suivant :

      name: organizations/ORGANIZATION_ID/customConstraints/custom.ingressInternal
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "'run.googleapis.com/ingress' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/ingress'] == 'internal'"
      actionType: ALLOW
      displayName: IngressInternal
      description: Require ingress to be set to internal

    Remplacez ORGANIZATION_ID par l'ID de votre organisation.

  2. Ajoutez la contrainte personnalisée en exécutant la commande suivante :

    gcloud org-policies set-custom-constraint /ingressConstraint.yaml
  3. Spécifiez une nouvelle règle qui applique la contrainte personnalisée créée à l'étape précédente en créant un fichier enforceIngressConstraint.yaml avec le contenu suivant :

      name: projects/PROJECT_ID/policies/ingressInternal
      spec:
        rules:
          - enforce: true

    Remplacez PROJECT_ID par l'ID de votre projet.

  4. Définissez la nouvelle règle en exécutant la commande suivante :

    gcloud org-policies set-policy /enforceIngressConstraint.yaml

Exiger une limite de mémoire maximale

Exigez que tous les conteneurs de services Cloud Run nouveaux ou révisés aient une limite de mémoire inférieure à une valeur spécifique.

Pour appliquer une limite de mémoire personnalisée au conteneur du service à l'aide de Google Cloud CLI, procédez comme suit :

  1. Créez un fichier memorylimitConstraint.yaml avec le contenu suivant :

      name: organizations/ORGANIZATION_ID/customConstraints/custom.memoryLimit
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.all(container, 'memory' in container.resources.limits && container.resources.limits['memory'] <= 'MEMORY_LIMIT')"
      actionType: ALLOW
      displayName: memoryLimitCap
      description: Require the container memory limit to be set to <= MEMORY_LIMIT

    Remplacez :

    • ORGANIZATION_ID par l'ID de votre organisation.
    • MEMORY_LIMIT par la limite de mémoire que vous souhaitez définir.
  2. Ajoutez la contrainte personnalisée en exécutant la commande suivante :

    gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
  3. Spécifiez une nouvelle règle qui applique la contrainte personnalisée créée à l'étape précédente en créant un fichier enforceMemorylimitConstraint.yaml avec le contenu suivant :

      name: projects/PROJECT_ID/policies/custom.memoryLimit
      spec:
        rules:
          - enforce: true

    Remplacez PROJECT_ID par l'ID de votre projet.

  4. Définissez la nouvelle règle en exécutant la commande suivante :

    gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml

Empêcher les étapes de lancement hors disponibilité générale

Empêchez la phase de lancement de Cloud Run de passer de la version DG par défaut à une version "Alpha" ou "Bêta".

Pour empêcher l'étape de lancement d'être définie sur une étape de lancement hors disponibilité générale, procédez comme suit :

  1. Créez un fichier launchstageConstraint.yaml avec le contenu suivant :

      name: organizations/ORGANIZATION_ID/customConstraints/custom.launchStage
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "!('run.googleapis.com/launch-stage' in resource.metadata.annotations)"
      actionType: ALLOW
      displayName: launchStage
      description: Only allow unset launch stage (default is GA).

    Remplacez ORGANIZATION_ID par l'ID de votre organisation.

  2. Ajoutez la contrainte personnalisée en exécutant la commande suivante :

    gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
  3. Spécifiez une nouvelle règle qui applique la contrainte personnalisée créée à l'étape précédente en créant un fichier enforceLaunchstageConstraint.yaml avec le contenu suivant :

      name: projects/PROJECT_ID/policies/launchStage
      spec:
        rules:
          - enforce: true

    Remplacez PROJECT_ID par l'ID de votre projet.

  4. Définissez la nouvelle règle en exécutant la commande suivante :

    gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml

Exiger l'autorisation binaire

Exigez que l'autorisation binaire soit définie sur default.

Pour exiger que l'autorisation binaire soit définie sur default, procédez comme suit :

  1. Créez un fichier binaryauthorizationConstraint.yaml avec le contenu suivant :

      name: organizations/ORGANIZATION_ID/customConstraints/custom.binaryAuthorization
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "'run.googleapis.com/binary-authorization' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/binary-authorization'] == 'default'"
      actionType: ALLOW
      displayName: binaryAuthorization
      description: Require binaryAuthorization to be set to default.

    Remplacez ORGANIZATION_ID par l'ID de votre organisation.

  2. Ajoutez la contrainte personnalisée en exécutant la commande suivante :

    gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
  3. Spécifiez la nouvelle règle qui applique la contrainte personnalisée créée à l'étape précédente en créant un fichier enforceBinaryauthorizationConstraint.yaml avec le contenu suivant :

      name: projects/PROJECT_ID/policies/binaryAuthorization
      spec:
        rules:
          - enforce: true

    Remplacez PROJECT_ID par l'ID de votre projet.

  4. Définissez la nouvelle règle en exécutant la commande suivante :

    gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml

Exiger une vérification de l'activité pour chaque conteneur

Exigez que les services disposent d'une vérification de l'activité pour chaque conteneur en demandant que le champ livenessProbe.initialDelaySeconds soit défini sur une valeur.

Pour exiger une vérification de l'activité pour chaque conteneur, procédez comme suit :

  1. Créez un fichier livenessprobeConstraint.yaml avec le contenu suivant :

      name: organizations/ORGANIZATION_ID/customConstraints/custom.livenessProbe
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.all(container, has(container.livenessProbe.initialDelaySeconds))"
      actionType: ALLOW
      displayName: livenessProbe
      description: Require all containers to have a liveness probe configured with initialDelaySeconds.

    Remplacez ORGANIZATION_ID par l'ID de votre organisation.

  2. Ajoutez la contrainte personnalisée en exécutant la commande suivante :

    gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
  3. Spécifiez une nouvelle règle qui applique la contrainte personnalisée créée à l'étape précédente en créant un fichier enforceLivenessprobeConstraint.yaml avec le contenu suivant :

      name: projects/PROJECT_ID/policies/livenessProbe
      spec:
        rules:
          - enforce: true

    Remplacez PROJECT_ID par l'ID de votre projet.

  4. Définissez la nouvelle règle en exécutant la commande suivante :

    gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml

Exiger un sidecar via un préfixe et un port d'image de conteneur

Exigez qu'un service dispose d'au moins un conteneur side-car qui utilise une image commençant par un préfixe spécifié et un port égal à un nombre spécifié.

Pour exiger qu'un conteneur commence par un préfixe défini et utilise PORT = 8081, procédez comme suit :

  1. Créez un fichier requireSidecarConstraint.yaml avec le contenu suivant :

      name: organizations/ORGANIZATION_ID/customConstraints/custom.requireSidecar
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.exists(container, container.image.startsWith('us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/') && container.ports.exists(port, port.containerPort == 8081))"
      actionType: ALLOW
      displayName: requireSidecar
      description: Require at least one container with an image that starts with "us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/" and uses port 8081

    Remplacez ORGANIZATION_ID par l'ID de votre organisation.

  2. Ajoutez la contrainte personnalisée en exécutant la commande suivante :

      gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
      

  3. Spécifiez une nouvelle règle qui applique la contrainte personnalisée créée à l'étape précédente en créant un fichier enforceRequireSidecarConstraint.yaml avec le contenu suivant :

      name: projects/PROJECT_ID/policies/requireSidecar
      spec:
        rules:
          - enforce: true

    Remplacez PROJECT_ID par l'ID de votre projet.

  4. Définissez la nouvelle règle en exécutant la commande suivante :

    gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml