Die Organisationsrichtlinie bietet vordefinierte Einschränkungen für Cloud Storage. Wenn Sie jedoch eine detailliertere, anpassbare Steuerung der spezifischen Felder wünschen, die in Ihren Organisationsrichtlinien eingeschränkt werden, können Sie auch benutzerdefinierte Einschränkungen erstellen und diese benutzerdefinierten Einschränkungen in einer Organisationsrichtlinie verwenden.
Auf dieser Seite wird beschrieben, wie Sie benutzerdefinierte Einschränkungen festlegen, um Richtlinien für Cloud Storage-Ressourcen zu erzwingen.
Verwenden Sie den Richtliniensimulator, um eine neue Einschränkung zu testen, bevor sie in Ihrer Produktionsumgebung erzwungen wird.
Übernahme von Richtlinien
Standardmäßig werden Organisationsrichtlinien von den Nachfolgerelementen der Ressourcen übernommen, für die Sie die Richtlinie erzwingen. Wenn Sie beispielsweise eine Richtlinie für eine Organisation erzwingen, erzwingt Google Cloud die Richtlinie für alle Projekte in der Organisation. 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 Einschränkungen, wird kostenlos angeboten.
Beschränkungen
Benutzerdefinierte Einschränkungen für Cloud Storage-Ressourcen können nur über die Google Cloud Console oder die Google Cloud CLI eingerichtet werden.
Benutzerdefinierte Einschränkungen können nur für die Methode
CREATE
oderUPDATE
für Cloud Storage-Ressourcen erzwungen werden.Neu erzwungene benutzerdefinierte Einschränkungen gelten nicht automatisch für vorhandene Ressourcen. Vorhandene Ressourcen müssen aktualisiert werden, damit die Einschränkung angewendet wird.
Sie können eine Organisationsrichtlinie für einen Probelauf erzwingen, um vorhandene Ressourcen zu finden, die aktualisiert werden müssen.
Benutzerdefinierte Einschränkungen können nicht verwendet werden, um ACLs oder IAM-Richtlinien für Objekte oder Buckets einzuschränken.
Von Cloud Storage unterstützte Ressourcen
Bei Cloud Storage können Sie für die folgende Ressource benutzerdefinierte Einschränkungen festlegen:
- Buckets:
storage.googleapis.com/Bucket
Erforderliche Rollen
Informationen zu den Rollen, die zum Verwalten von Organisationsrichtlinien mit benutzerdefinierten Einschränkungen erforderlich sind, finden Sie unter Erforderliche Rollen.
Zusätzlich zum Verwalten von Organisationsrichtlinien möchten Sie möglicherweise die von Ihnen erstellten benutzerdefinierten Einschränkungen testen. Zum Testen benutzerdefinierter Einschränkungen wird empfohlen, die vordefinierte oder benutzerdefinierte Rolle mit den geringsten Berechtigungen zu verwenden, die die Berechtigungen enthält, die zum Testen der spezifischen Einschränkung erforderlich sind. Informationen zu den erforderlichen Berechtigungen und Rollen finden Sie unter Rollen und Berechtigungen für Cloud Storage.
Benutzerdefinierte Einschränkung einrichten
Console
Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.
Klicken Sie oben auf der Seite auf Projektauswahl.
Wählen Sie in der Projektauswahl das Projekt aus, für das Sie die Organisationsrichtlinie festlegen möchten.
Klicken Sie auf
Benutzerdefinierte Einschränkung.Geben Sie im Feld Anzeigename einen nutzerfreundlichen Namen für die Einschränkung ein. Dieses Feld hat eine maximale Länge von 200 Zeichen. Verwenden Sie keine personenidentifizierbaren Informationen oder vertraulichen Daten in Einschränkungsnamen, da diese in Fehlermeldungen angezeigt werden können.
Geben Sie im Feld Einschränkungs-ID den gewünschten Namen für die neue benutzerdefinierte Einschränkung ein. Eine benutzerdefinierte Einschränkung muss mit
custom.
beginnen und darf nur Großbuchstaben, Kleinbuchstaben oder Ziffern enthalten, z. B.custom.enforceBucketVersioning
. Die maximale Länge dieses Feldes beträgt 70 Zeichen, das Präfix wird nicht gezählt (z. B.organizations/123456789/customConstraints/custom.
).Geben Sie im Feld Beschreibung eine nutzerfreundliche Beschreibung der Einschränkung ein, die bei einer Verletzung der Richtlinie als Fehlermeldung angezeigt wird. Dieses Feld hat eine maximale Länge von 2000 Zeichen.
Wählen Sie im Feld Ressourcentyp den Namen der REST-Ressource von Google Cloud aus, die das Objekt und das Feld enthält, das Sie einschränken möchten. Beispiel:
storage.googleapis.com/Bucket
Wählen Sie unter Methode erzwingen aus, ob die Einschränkung für die REST-Methode
CREATE
oderUPDATE
erzwungen werden soll.Klicken Sie zum Definieren einer Bedingung auf
Bedingung bearbeiten.Erstellen Sie im Bereich Bedingung hinzufügen eine CEL-Bedingung, die auf eine unterstützte Dienstressource verweist, z. B.
resource.versioning.enabled == true
. Dieses Feld hat eine maximale Länge von 1000 Zeichen.Klicken Sie auf Speichern.
Wählen Sie unter Aktion aus, ob die ausgewertete Methode zugelassen oder abgelehnt werden soll, wenn die Bedingung erfüllt ist.
Klicken Sie auf Einschränkung erstellen.
Wenn Sie in jedes Feld einen Wert eingegeben haben, wird rechts die entsprechende YAML-Konfiguration für diese benutzerdefinierte Einschränkung angezeigt.
gcloud
Zum Erstellen einer benutzerdefinierten Einschränkung mit der Google Cloud CLI erstellen Sie eine YAML-Datei für die benutzerdefinierte Einschränkung:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Ersetzen Sie dabei Folgendes:
ORGANIZATION_ID
: Ihre Organisations-ID, z. B.123456789
.CONSTRAINT_NAME
: Name, den Sie für Ihre neue benutzerdefinierte Einschränkung verwenden möchten. Eine benutzerdefinierte Einschränkung muss mitcustom.
beginnen und darf nur Großbuchstaben, Kleinbuchstaben oder Ziffern enthalten, z. B.custom.enforceBucketVersioning
. Die maximale Länge dieses Feldes beträgt 70 Zeichen, das Präfix wird nicht gezählt (z. B.organizations/123456789/customConstraints/custom.
).RESOURCE_NAME
: der voll qualifizierte Name der REST-Ressource von Google Cloud, die das Objekt und das Feld enthält, das Sie einschränken möchten. Beispiel:storage.googleapis.com/Bucket
.METHOD1,METHOD2
: Liste der RESTful-Methoden, für die die Einschränkung erzwungen werden soll. KannCREATE
oderCREATE
undUPDATE
sein.CONDITION
: eine CEL-Bedingung, die auf eine unterstützte Dienstressource verweist, z. B."resource.versioning.enabled == true"
. Dieses Feld hat eine maximale Länge von 1.000 Zeichen. Weitere Informationen zur Verwendung von CEL finden Sie unter Common Expression Language.ACTION
: Aktion, die ausgeführt werden soll, wenncondition
erfüllt ist. Dies kann entwederALLOW
oderDENY
sein.DISPLAY_NAME
: Ein nutzerfreundlicher Name für die Einschränkung. Dieses Feld hat eine maximale Länge von 200 Zeichen.DESCRIPTION
: Eine nutzerfreundliche Beschreibung der Einschränkung, die als Fehlermeldung angezeigt werden soll, wenn die Richtlinie verletzt wird Dieses Feld hat eine maximale Länge von 2000 Zeichen.
Nachdem Sie eine neue benutzerdefinierte Einschränkung mit der Google Cloud CLI 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
CONSTRAINT_PATH
durch den vollständigen Pfad zu Ihrer benutzerdefinierten Einschränkungsdatei. Beispiel: /home/user/customconstraint.yaml
Nach Abschluss des Vorgangs finden Sie Ihre benutzerdefinierten Einschränkungen als verfügbare Organisationsrichtlinien in der Liste der Google Cloud-Organisationsrichtlinien.
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
ORGANIZATION_ID
durch die ID Ihrer Organisationsressource.
Weitere Informationen finden Sie unter Organisationsrichtlinien aufrufen.
Wenn die Anfrage erfolgreich ist, sieht die Ausgabe in etwa so aus:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME
custom.uniformBucketLevelAccess
DENY CREATE,UPDATE storage.googleapis.com/Bucket Enable object versioning
Weitere Informationen zum Einrichten und Verwalten benutzerdefinierter Einschränkungen finden Sie unter Benutzerdefinierte Einschränkungen erstellen und verwalten.
Eine Einschränkung erzwingen
Sie können eine boolesche Einschränkung erzwingen, indem Sie eine Organisationsrichtlinie erstellen, die darauf verweist, und diese Organisationsrichtlinie auf eine Google Cloud-Ressource anwenden.Console
So erzwingen Sie eine boolesche Einschränkung:
- Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.
- Klicken Sie oben auf der Seite auf Projektauswahl.
- Wählen Sie in der Projektauswahl das Projekt aus, für das Sie die Organisationsrichtlinie festlegen möchten.
- Wählen Sie auf der Seite Organisationsrichtlinien Ihre Einschränkung aus der Liste aus. Die Seite Richtliniendetails für diese Einschränkung sollte angezeigt werden.
- Zum Konfigurieren der Organisationsrichtlinie für diese Ressource klicken Sie auf Richtlinie verwalten.
- Wählen Sie auf der Seite Richtlinie bearbeiten die Option Richtlinie des übergeordneten Elements überschreiben aus.
- Klicken Sie auf Regel hinzufügen.
- Wählen Sie unter Erzwingung aus, ob die Erzwingung dieser Organisationsrichtlinie aktiviert oder deaktiviert werden soll.
- 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.
- 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.
- 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.uniformBucketLevelAccess
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.
Anfragen, die aufgrund eines Verstoßes gegen eine benutzerdefinierte Einschränkung abgelehnt werden, schlagen mit diesem 412
-Fehler fehl: CUSTOM_ORGPOLICY_CONSTRAINT_FAILED
.
Beispiel: Einschränkung erstellen, die vom Kunden verwaltete Verschlüsselungsschlüssel für Buckets erzwingt
gcloud
Erstellen Sie eine
enforceCMEK.yaml
-Einschränkungsdatei mit den folgenden Informationen.name: organizations/ORGANIZATION_ID/customConstraints/custom.customerManagedEncryptionKeys resource_types: storage.googleapis.com/Bucket method_types: – CREATE – UPDATE condition: "has(resource.encryption.defaultKmsKeyName)" action_type: ALLOW display_name: Enforce Cloud KMS key description: When this constraint is enforced, newly created buckets and newly updated buckets must be encrypted with a Cloud KMS key. The Cloud KMS key on existing buckets can be updated but not deleted.
Legen Sie die benutzerdefinierte Einschränkung fest.
gcloud org-policies set-custom-constraint enforceCMEK.yaml
Erstellen Sie eine
enforceCMEK-policy.yaml
-Richtliniendatei mit folgender Information:name: projects/PROJECT_ID/policies/custom.customerManagedEncryptionKeys spec: rules: – enforce: true
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.In diesem Beispiel wird diese Einschränkung auf Projektebene erzwungen. Sie können diese Einschränkung aber auch auf Organisations- oder Ordnerebene festlegen.
Richtlinie erzwingen
gcloud org-policies set-policy enforceCMEK-policy.yaml
Beispiele für benutzerdefinierte Einschränkungen für häufige Anwendungsfälle
Die folgenden Abschnitte enthalten die Syntax einiger benutzerdefinierter Einschränkungen, die für Sie nützlich sein könnten:
Anwendungsfall | Syntax |
---|---|
Aufbewahrungsrichtlinien für Buckets müssen einen Zeitraum haben, der in die angegebene Dauer fällt. | name: organizations/ORGANIZATION_ID/customConstraints/custom.retentionPolicy method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "resource.retentionPolicy.retentionPeriod not in [3600, 2678400]" action_type: DENY display_name: Bucket retention policy is either 3,600 seconds or 2,678,400 seconds description: Newly created buckets and newly updated buckets must have a retention policy that's either 3,600 seconds or 2,678,400 seconds. |
Für Buckets muss die Objektversionsverwaltung aktiviert sein | name: organizations/ORGANIZATION_ID/customConstraints/custom.enforceBucketVersioning method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "resource.versioning.enabled == true" action_type: ALLOW display_name: Buckets must have Object Versioning enabled description: Newly created buckets and newly updated buckets must have Object Versioning enabled. |
Buckets müssen mit einem bestimmten regulären Ausdruck benannt werden | name: organizations/ORGANIZATION_ID/customConstraints/custom.bucketName method_types: – CREATE resource_types: storage.googleapis.com/Bucket condition: "resource.name.matches('^[a-zA-Z]+$')" action_type: ALLOW display_name: Bucket names must match the specified regular expression description: Newly created buckets must have a name that matches the specified regular expression. Only letters are allowed in the bucket name. |
Für Buckets kann keine Bucket-Sperre aktiviert sein | name: organizations/ORGANIZATION_ID/customConstraints/custom.prohibitBucketLock method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "resource.retentionPolicy.isLocked == true" action_type: DENY display_name: Prohibit the use of Bucket Lock description: Newly created buckets and newly updated buckets cannot have Bucket Lock enabled. |
Für Buckets kann keine Objektaufbewahrungssperre aktiviert sein | name: organizations/ORGANIZATION_ID/customConstraints/custom.prohibitObjectRetentionLock method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "resource.objectRetention.mode == 'Enabled'" action_type: DENY display_name: Objects cannot have retention configurations description: Newly created buckets and newly updated buckets cannot have Object Retention Lock enabled. |
Buckets in den Mehrfachregionen US oder EU müssen eine Aufbewahrungsdauer von 86.400 Sekunden haben. |
name: organizations/ORGANIZATION_ID/customConstraints/custom.locationRetentionPolicy method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "(resource.location.startsWith('US') || resource.location.startsWith('EU')) && resource.retentionPolicy.retentionPeriod != 86400" action_type: DENY display_name: All buckets in US and EU must have a retention policy of 86,400 seconds description: Newly created buckets and newly updated buckets located in US and EU regions must have a retention policy of 86,400 seconds. |
Buckets müssen Labels haben1 | name: organizations/ORGANIZATION_ID/customConstraints/custom.labels method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "'my_annotations.data.source' in resource.labels && resource.labels['my_annotations.data.source'] in ['SOURCE_IMAGES','SOURCE_TEXT','SOURCE_VIDEOS']" action_type: ALLOW display_name: Buckets must have a label classifying the contents of the bucket description: Newly created buckets and newly updated buckets must have the label my_annotations.data.source with the SOURCE_IMAGES, SOURCE_TEXT, or SOURCE_VIDEOS key. |
Buckets müssen sich in einer Dual-Region befinden | name: organizations/ORGANIZATION_ID/customConstraints/custom.dualRegionUS method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "'US-EAST1' in resource.customPlacementConfig.dataLocations && 'US-EAST4' in resource.customPlacementConfig.dataLocations" action_type: ALLOW display_name: Buckets must be located in a dual-region description: Newly created buckets and newly updated buckets must be located in a dual-region composed of the us-east1 and us-east4 regions. |
Buckets können keine Legacy-Speicherklassen verwenden | name: organizations/ORGANIZATION_ID/customConstraints/custom.disableLegacyStorageClass method_types: – CREATE – UPDATE resource_types: storage.googleapis.com/Bucket condition: "resource.storageClass in ['STANDARD', 'NEARLINE', 'COLDLINE', 'ARCHIVE']" action_type: ALLOW display_name: Buckets cannot use legacy storage classes description: Newly created buckets and newly updated buckets must use Standard storage, Nearline storage, Coldline storage, or Archive storage. |
1 Wenn Sie einen nicht vorhandenen Bucket-Labelschlüssel angeben, wird der Fehler |
Ausdrucksfelder für Bedingungen
Die folgende Tabelle enthält die Ausdrucksfelder, die Sie zum Erstellen von Bedingungen verwenden können. Bedingungen werden in Common Expression Language (CEL) geschrieben. Beachten Sie, dass beim Wert dieser Ausdrucksfelder die Groß- und Kleinschreibung berücksichtigt wird.
Beschreibungen der folgenden Ausdrucksfelder und der Werte, die Sie angeben können, finden Sie in der Buckets-Ressourcendarstellung für die JSON API.
Ausdrucksfeld | Werttyp |
---|---|
billing.requesterPays |
bool |
cors |
list |
cors.maxAgeSeconds |
int |
cors.method |
list |
cors.origin |
list |
cors.responseHeader |
list |
customPlacementConfig.dataLocations 1 |
list |
defaultEventBasedHold |
bool |
encryption.defaultKmsKeyName |
string |
iamConfiguration.publicAccessPrevention |
string |
iamConfiguration.uniformBucketLevelAccess.enabled |
bool |
labels |
map |
lifecycle.rule |
list |
lifecycle.rule.action.storageClass 1 |
string |
lifecycle.rule.action.type |
string |
lifecycle.rule.condition.age |
int |
lifecycle.rule.condition.createdBefore |
string |
lifecycle.rule.condition.customTimeBefore |
string |
lifecycle.rule.condition.daysSinceCustomTime |
int |
lifecycle.rule.condition.daysSinceNoncurrentTime |
int |
lifecycle.rule.condition.isLive |
bool |
lifecycle.rule.condition.matchesPrefix |
list |
lifecycle.rule.condition.matchesStorageClass |
list |
lifecycle.rule.condition.matchesSuffix |
list |
lifecycle.rule.condition.noncurrentTimeBefore |
string |
lifecycle.rule.condition.numNewerVersions |
int |
location 1 |
string |
locationType |
string |
logging.logBucket |
string |
logging.logObjectPrefix |
string |
objectRetention.mode |
string |
name |
string |
projectNumber 2 |
string |
retentionPolicy.isLocked |
bool |
retentionPolicy.retentionPeriod |
int |
rpo |
string |
softDeletePolicy.retentionDurationSeconds |
int |
storageClass 1 |
string |
versioning.enabled |
bool |
website.mainPageSuffix |
string |
website.notFoundPage |
string |
1: Der Wert für dieses Feld muss in Großbuchstaben geschrieben sein.
2 Die Verwendung dieses Feldes wurde eingestellt.
Hinweise
Bucket-Labels werden nicht für die Verwendung in benutzerdefinierten Einschränkungsbedingungen empfohlen. Verwenden Sie stattdessen Tags, die nur von Personen mit den erforderlichen IAM-Rollen festgelegt werden können und strenger als Labels kontrolliert werden.