Benutzerdefinierte Einschränkungen für Projekte anwenden

Als Organisationsadministrator können Sie benutzerdefinierte Einschränkungen für Cloud Run-Dienste und ‑Jobs erstellen. Mit Organisationsrichtlinien werden diese benutzerdefinierten Einschränkungen auf Projekt-, Ordner- oder Organisationsebene erzwungen.

Auf dieser Seite erfahren Sie, wie Sie benutzerdefinierte Einschränkungen für Dienste und Jobs erstellen und auf Projektebene erzwingen. Informationen zu benutzerdefinierten Organisationsrichtlinien finden Sie unter Benutzerdefinierte Organisationsrichtlinien erstellen und verwalten.

In Cloud Run können Sie mit den meisten von Nutzern konfigurierten Feldern in der Cloud Run Admin API beliebig viele benutzerdefinierte Einschränkungen schreiben. Sie können beispielsweise eine benutzerdefinierte Einschränkung erstellen, die verhindert, dass Dienste oder Jobs die Einführungsphase auf „Alpha“ oder „Beta“ festlegen.

Nach der Anwendung werden Anfragen, die gegen eine Richtlinie verstoßen, die eine benutzerdefinierte Einschränkung erzwingt, in der gcloud-Befehlszeile und in Cloud Run-Protokollen mit einer Fehlermeldung angezeigt. Die Fehlermeldung enthält die Einschränkungs-ID und eine Beschreibung der verletzten benutzerdefinierten Einschränkung.

Hinweise

  • Sie benötigen die Rolle „Organization Policy Administrator“ roles/orgpolicy.policyAdmin, um Richtlinien für Kundenorganisationen zu erstellen und aufzurufen. Weitere Informationen finden Sie unter Erforderliche Rollen.

Beschränkungen

Gängige Einschränkungen anpassen

In den folgenden Beispielen wird gezeigt, wie Sie mit der gcloud CLI benutzerdefinierte Einschränkungen für gängige Anwendungsfälle angeben. Eine Anleitung für die Google Cloud Console finden Sie unter Benutzerdefinierte Organisationsrichtlinien erstellen und verwalten.

Einstellungen für eingehenden Traffic einschränken

Erstellen Sie eine benutzerdefinierte Einschränkung, die die Einstellung für eingehenden Traffic für neue oder überarbeitete Cloud Run-Dienste einschränkt, und erzwingen Sie diese Einschränkung dann auf Projektebene.

So legen Sie mit der Google Cloud CLI eine benutzerdefinierte Einschränkung fest, bei der ein Dienst auf „Intern“ gesetzt werden muss:

  1. Erstellen Sie eine neue Datei vom Typ ingressConstraint.yaml mit folgendem Inhalt:

      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

    Ersetzen Sie ORGANIZATION_ID durch die ID Ihrer Organisation.

  2. Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:

    gcloud org-policies set-custom-constraint /ingressConstraint.yaml
  3. Geben Sie eine neue Richtlinie an, die die im vorherigen Schritt erstellte benutzerdefinierte Einschränkung erzwingt. Erstellen Sie dazu eine neue enforceIngressConstraint.yaml-Datei mit folgendem Inhalt:

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  4. Legen Sie die neue Richtlinie fest, indem Sie den folgenden Befehl ausführen:

    gcloud org-policies set-policy /enforceIngressConstraint.yaml

Maximales Arbeitsspeicherlimit vorschreiben

Alle Container neuer oder überarbeiteter Cloud Run-Dienste müssen ein Arbeitsspeicherlimit haben, das unter einem bestimmten Wert liegt.

So legen Sie mit der Google Cloud CLI ein benutzerdefiniertes Arbeitsspeicherlimit für den Container des Dienstes fest:

  1. Erstellen Sie eine neue Datei vom Typ memorylimitConstraint.yaml mit folgendem Inhalt:

      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

    Ersetzen Sie:

    • ORGANIZATION_ID durch die ID Ihrer Organisation.
    • MEMORY_LIMIT durch das gewünschte Arbeitsspeicherlimit.
  2. Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:

    gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
  3. Geben Sie eine neue Richtlinie an, die die im vorherigen Schritt erstellte benutzerdefinierte Einschränkung erzwingt. Erstellen Sie dazu eine neue enforceMemorylimitConstraint.yaml-Datei mit folgendem Inhalt:

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  4. Legen Sie die neue Richtlinie fest, indem Sie den folgenden Befehl ausführen:

    gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml

Einführungsphasen verhindern, die nicht GA entsprechen

Verhindern Sie, dass die Einführungsphase von Cloud Run vom Standard „GA“ in „Alpha“ oder „Beta“ geändert wird.

So verhindern Sie, dass die Einführungsphase auf eine nicht GA-Einführungsphase festgelegt wird:

  1. Erstellen Sie eine neue Datei vom Typ launchstageConstraint.yaml mit folgendem Inhalt:

      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).

    Ersetzen Sie ORGANIZATION_ID durch die ID Ihrer Organisation.

  2. Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:

    gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
  3. Geben Sie eine neue Richtlinie an, die die im vorherigen Schritt erstellte benutzerdefinierte Einschränkung erzwingt. Erstellen Sie dazu eine neue enforceLaunchstageConstraint.yaml-Datei mit folgendem Inhalt:

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  4. Legen Sie die neue Richtlinie fest, indem Sie den folgenden Befehl ausführen:

    gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml

Binärautorisierung anfordern

Die Binärautorisierung muss auf default festgelegt sein.

So legen Sie fest, dass die Binärautorisierung auf default gesetzt sein muss:

  1. Erstellen Sie eine neue Datei vom Typ binaryauthorizationConstraint.yaml mit folgendem Inhalt:

      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.

    Ersetzen Sie ORGANIZATION_ID durch die ID Ihrer Organisation.

  2. Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:

    gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
  3. Geben Sie die neue Richtlinie an, die die im vorherigen Schritt erstellte benutzerdefinierte Einschränkung erzwingt. Erstellen Sie dazu eine neue enforceBinaryauthorizationConstraint.yaml-Datei mit folgendem Inhalt:

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  4. Legen Sie die neue Richtlinie fest, indem Sie den folgenden Befehl ausführen:

    gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml

Für jeden Container eine Aktivitätsprüfung erfordern

Machen Sie erforderlich, dass Dienste für jeden Container eine Aktivitätsprüfung haben, indem das Feld livenessProbe.initialDelaySeconds auf einen Wert festgelegt wird.

So erzwingen Sie für jeden Container eine Aktivitätsprüfung:

  1. Erstellen Sie eine neue Datei vom Typ livenessprobeConstraint.yaml mit folgendem Inhalt:

      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.

    Ersetzen Sie ORGANIZATION_ID durch die ID Ihrer Organisation.

  2. Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:

    gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
  3. Geben Sie eine neue Richtlinie an, die die im vorherigen Schritt erstellte benutzerdefinierte Einschränkung erzwingt. Erstellen Sie dazu eine neue enforceLivenessprobeConstraint.yaml-Datei mit folgendem Inhalt:

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  4. Legen Sie die neue Richtlinie fest, indem Sie den folgenden Befehl ausführen:

    gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml

Sidecar über ein Container-Image-Präfix und einen Port erfordern

Machen Sie erforderlich, dass ein Dienst mindestens einen Sidecar-Container hat, der ein Image verwendet, das mit einem bestimmten Präfix beginnt und einen Port hat, der einer bestimmten Zahl entspricht.

Wenn ein Container mit einem festgelegten Präfix beginnen und PORT = 8081 verwenden soll, gehen Sie so vor:

  1. Erstellen Sie eine neue Datei vom Typ requireSidecarConstraint.yaml mit folgendem Inhalt:

      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

    Ersetzen Sie ORGANIZATION_ID durch die ID Ihrer Organisation.

  2. Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:

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

  3. Geben Sie eine neue Richtlinie an, die die im vorherigen Schritt erstellte benutzerdefinierte Einschränkung erzwingt. Erstellen Sie dazu eine neue enforceRequireSidecarConstraint.yaml-Datei mit folgendem Inhalt:

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  4. Legen Sie die neue Richtlinie fest, indem Sie den folgenden Befehl ausführen:

    gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml