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
- Benutzerdefinierte Cloud Run-Einschränkungen müssen mithilfe der Feldspezifikationen der Cloud Run Admin API v1 angegeben werden.
- Labels und Felder der obersten Ebene werden nicht unterstützt.
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
- Maximales Arbeitsspeicherlimit vorschreiben
- Einführungsphasen verhindern, die nicht GA entsprechen
- Binärautorisierung anfordern
- Für jeden Container eine Aktivitätsprüfung erfordern
- Sidecar über ein Container-Image-Präfix und einen Port erfordern
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:
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.
Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:
gcloud org-policies set-custom-constraint /ingressConstraint.yaml
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.
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:
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.
Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:
gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
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.
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:
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.
Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:
gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
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.
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:
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.
Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:
gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
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.
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:
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.
Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:
gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
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.
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:
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.
Fügen Sie die benutzerdefinierte Einschränkung mit dem folgenden Befehl hinzu:
gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
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.
Legen Sie die neue Richtlinie fest, indem Sie den folgenden Befehl ausführen:
gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml