Funktionsressourcen mit benutzerdefinierten Einschränkungen verwalten

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

Die Organisationsrichtlinie bietet vordefinierte Einschränkungen für verschiedene Google Cloud-Dienste. Wenn Sie jedoch eine detailliertere, anpassbare Steuerung der spezifischen Felder wünschen, die in Ihren Organisationsrichtlinien eingeschränkt werden, können Sie auch benutzerdefinierte Organisationsrichtlinien erstellen.

Auf dieser Seite erfahren Sie, wie Sie benutzerdefinierte Einschränkungen für Funktionen erstellen, die mithilfe der Cloud Functions v2 APIs erstellt wurden, und diese auf Projektebene erzwingen. Informationen zu benutzerdefinierten Organisationsrichtlinien finden Sie unter Benutzerdefinierte Organisationsrichtlinien erstellen und verwalten.

Vorteile

  • Kostenverwaltung: Verwenden Sie Organisationsrichtlinien, um die VM-Instanz und Laufwerkgrößen und -typen zu beschränken, die in Ihrer Organisation verwendet werden können. Sie können auch die Maschinenfamilie einschränken, die für die VM-Instanz verwendet wird
  • Sicherheit, Compliance und Governance :
    • Zur Durchsetzung von Sicherheitsanforderungen können Sie bestimmte Firewallregeln für VMs auf VMs festlegen.
    • Zur Unterstützung der Hardware-Isolation oder der Lizenzcompliance kann die Ausführung aller VMs in einem bestimmten Projekt oder Ordner auf Knoten für einzelne Mandanten erforderlich sein.
    • Zur Steuerung von Automatisierungsskripts können Sie benutzerdefinierte Organisationsrichtlinien verwenden, um zu prüfen, ob die Labels den erforderlichen Ausdrücken entsprechen.

Übernahme von Richtlinien

Wenn eine Organisationsrichtlinie für eine Ressource erzwungen wird, wird sie auch von allen untergeordneten Elementen der Ressource übernommen. Wenn Sie beispielsweise eine Richtlinie für einen Ordner erzwingen, erzwingt Google Cloud die Richtlinie für alle Projekte in dem Ordner. Weitere Informationen zu diesem Verhalten und zu dessen Änderung finden Sie unter Regeln für die Evaluierung der Hierarchie.

Preise

Der Organisationsrichtliniendienst, einschließlich vordefinierter und benutzerdefinierter Organisationsrichtlinien, wird kostenlos angeboten.

Beschränkungen

Für benutzerdefinierte Organisationsrichtlinien gelten die folgenden Einschränkungen:

  • Wird nicht für VM-Instanznamen erzwungen, wenn Sie die Bulk Insert API verwenden.
  • Wird nur für die Methode CREATE für Compute Engine-Ressourcen erzwungen.
  • Nur für Cloud Functions v2 APIs verfügbar. Sie können nicht auf Cloud Run Functions der 1. Generation angewendet werden.
  • Schützen Sie Funktionen nur, wenn Sie die Cloud Functions v2 APIs verwenden. Cloud Run Functions können auch über die Cloud Run API geändert werden. Für zusätzlichen Schutz müssen Sie möglicherweise auch benutzerdefinierte Einschränkungen auf Cloud Run anwenden.

Hinweise

Erforderliche Rollen

Benutzerdefinierte Einschränkung erstellen

Eine benutzerdefinierte Einschränkung wird in einer YAML-Datei durch die Ressourcen, Methoden, Bedingungen und Aktionen definiert, die von dem Dienst unterstützt werden, für den Sie die Organisationsrichtlinie erzwingen. Bedingungen für Ihre benutzerdefinierten Einschränkungen werden mithilfe der Common Expression Language (CEL) definiert. Weitere Informationen zum Erstellen von Bedingungen in benutzerdefinierten Einschränkungen mit CEL finden Sie im Abschnitt CEL unter Benutzerdefinierte Einschränkungen erstellen und verwalten.

So legen Sie eine benutzerdefinierte Einschränkung fest, die die Erstellung aller Funktionen mit einer maximalen Instanzanzahl von mehr als 150 verhindert:

  • Erstellen Sie eine neue Datei vom Typ maxInstanceConstraint.yaml mit folgendem Inhalt:

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - cloudfunctions.googleapis.com/Function
    methodTypes: 
    - CREATE
    - UPDATE
    condition: resource.serviceConfig.maxInstanceCount > 150
    actionType: DENY
    displayName: Deny functions with max instance count greater than 150
    description: Functions cannot be created with a max instance count greater than 150
    

Ersetzen Sie ORGANIZATION_ID durch Ihre Organisations-ID, z. B. 123456789.

Weitere Informationen finden Sie unter Benutzerdefinierte Einschränkungen definieren.

Benutzerdefinierte Einschränkung einrichten

Nachdem Sie die YAML-Datei für eine neue benutzerdefinierte Einschränkung erstellt haben, müssen Sie sie einrichten, um sie für Organisationsrichtlinien in Ihrer Organisation verfügbar zu machen. Verwenden Sie zum Einrichten einer benutzerdefinierten Einschränkung den Befehl gcloud org-policies set-custom-constraint:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
Ersetzen Sie CONSTRAINT_PATH durch den vollständigen Pfad zu Ihrer benutzerdefinierten Einschränkungsdatei. Beispiel: /home/user/customconstraint.yaml Nach Abschluss des Vorgangs sind Ihre benutzerdefinierten Einschränkungen als Organisationsrichtlinien in der Liste der Google Cloud-Organisationsrichtlinien verfügbar. Prüfen Sie mit dem Befehl gcloud org-policies list-custom-constraints, ob die benutzerdefinierte Einschränkung vorhanden ist:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Ersetzen Sie ORGANIZATION_ID durch die ID Ihrer Organisationsressource. Weitere Informationen finden Sie unter Organisationsrichtlinien aufrufen.

Benutzerdefinierte Organisationsrichtlinie erzwingen

Sie können eine boolesche Einschränkung erzwingen, indem Sie eine Organisationsrichtlinie erstellen, die darauf verweist, und diese Organisationsrichtlinie dann auf eine Google Cloud-Ressource anwenden.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.

    Zu den Organisationsrichtlinien

  2. Wählen Sie in der Projektauswahl das Projekt aus, für das Sie die Organisationsrichtlinie festlegen möchten.
  3. Wählen Sie auf der Seite Organisationsrichtlinien die gewünschte Einschränkung aus, um die Seite Richtliniendetails aufzurufen.
  4. Zum Konfigurieren der Organisationsrichtlinie für diese Ressource klicken Sie auf Richtlinie verwalten.
  5. Wählen Sie auf der Seite Richtlinie bearbeiten die Option Richtlinie der übergeordneten Ressource überschreiben aus.
  6. Klicken Sie auf Regel hinzufügen.
  7. Wählen Sie im Abschnitt Erzwingung aus, ob die Erzwingung dieser Organisationsrichtlinie aktiviert oder deaktiviert werden soll.
  8. Klicken Sie optional auf Bedingung hinzufügen, um die Organisationsrichtlinie von einem Tag abhängig zu machen. Wenn Sie einer Organisationsrichtlinie eine bedingte Regel hinzufügen, müssen Sie mindestens eine bedingungsfreie Regel hinzufügen oder die Richtlinie kann nicht gespeichert werden. Weitere Informationen finden Sie unter Organisationsrichtlinie mit Tags festlegen.
  9. Wenn dies eine benutzerdefinierte Einschränkung ist, können Sie auf Änderungen testen klicken, um die Auswirkungen dieser Organisationsrichtlinie zu simulieren. Weitere Informationen finden Sie unter Änderungen an Organisationsrichtlinien mit dem Richtliniensimulator testen.
  10. Klicken Sie auf Richtlinie festlegen, um den Vorgang abzuschließen und die Organisationsrichtlinie anzuwenden. Es kann bis zu 15 Minuten dauern, bis die Richtlinie wirksam wird.

gcloud

Um eine Organisationsrichtlinie zu erstellen, die eine boolesche Einschränkung erzwingt, erstellen Sie eine YAML-Richtliniendatei, die auf die Einschränkung verweist:

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: das Projekt, für das Sie die Einschränkung erzwingen möchten
  • CONSTRAINT_NAME: der Name, den Sie für Ihre benutzerdefinierte Einschränkung definiert haben. Beispiel: custom.cloudFunctionsMaxInstanceLimit.

Führen Sie den folgenden Befehl aus, um die Organisationsrichtlinie mit der Einschränkung zu erzwingen:

    gcloud org-policies set-policy POLICY_PATH
    

Ersetzen Sie POLICY_PATH durch den vollständigen Pfad zur YAML-Datei Ihrer Organisationsrichtlinie. Es kann bis zu 15 Minuten dauern, bis die Richtlinie wirksam wird.

Benutzerdefinierte Organisationsrichtlinie testen

Führen Sie den folgenden Befehl aus, um eine Funktion mit einer maximalen Instanzanzahl von 151 zu erstellen:

gcloud functions deploy FUNCTION_NAME \
  ...
  --max-instances 151

Die angezeigte Ausgabe sieht so aus:

 Operation denied by custom org policy on resource: ["customConstraints/custom.cloudFunctionsMaxInstanceLimit": "Cloud Functions cannot be created with a max instance count greater than 150."]

Von Cloud Run-Funktionen unterstützte Ressourcen und Vorgänge

Ressourcentyp Methodentypen API-Referenz
cloudfunctions.googleapis.com/Function CREATE, UPDATE projects.locations.functions

Beispiele für gängige Organisationsrichtlinien

In der folgenden Tabelle finden Sie die Syntax einiger benutzerdefinierter Organisationsrichtlinien, die für Sie nützlich sein könnten:

Beschreibung Einschränkungssyntax
Verhindern, dass Funktionen in einer bestimmten Sprache erstellt werden
    name: organizations/ORGANIZATION_IDcustomConstraints/custom.cloudFunctionRuntimeBlock
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.runtime == "python312"
    action_type: DENY
    display_name: Deny functions using Python 3.12
    description: Functions cannot be created with Python 3.12 as the language runtime
Funktionen für die Verwendung eines bestimmten Worker-Pools vorschreiben
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsWorkerPool
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.workerPool == "WORKER_POOL"
    action_type: DENY
    display_name: Require worker pool
    description: Functions must use a worker pool 
Ersetzen Sie WORKER_POOL durch den Namen Ihres Worker-Pools von Cloud Build.
Erforderlich, dass Funktionen alle Container-Images in einem bestimmten Image-Repository speichern
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsRepository
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.dockerRepository.startsWith("REPO_PATH")
    action_type: DENY
    display_name: Image repository constraint
    description: Functions must push images to a central image repository under REPO_PATH
Ersetzen Sie REPO_PATH durch den URI der Image-Repository-URL, in der alle Container-Images gespeichert werden sollen.

Nächste Schritte