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 durchzusetzen.
Wenn Sie eine neue Einschränkung testen möchten, bevor sie in Ihrer Produktionsumgebung erzwungen wird, verwenden Sie den Richtliniensimulator.
Ü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 mit der Google Cloud Console oder der 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 werden kann.
Wenn Sie vorhandene Ressourcen finden möchten, die aktualisiert werden müssen, können Sie eine Organisationsrichtlinie für den Testlauf erzwingen.
Mit benutzerdefinierten Einschränkungen können keine ACLs oder IAM-Richtlinien für Objekte oder Buckets eingeschränkt werden.
Von Cloud Storage unterstützte Ressourcen
Bei Cloud Storage können Sie benutzerdefinierte Einschränkungen für die folgende Ressource 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.
Neben der Verwaltung von Organisationsrichtlinien können Sie auch die von Ihnen erstellten benutzerdefinierten Einschränkungen testen. Für den Test benutzerdefinierter Einschränkungen wird empfohlen, die am wenigsten permissive vordefinierte oder benutzerdefinierte Rolle zu verwenden, die die Berechtigungen enthält, die zum Testen der jeweiligen 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 Google Cloud-REST-Ressource, 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 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
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
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.
Einschränkung 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
- Wechseln Sie in der Google Cloud Console zur Seite Organisationsrichtlinien.
- 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 die gewünschte Einschränkung aus, um die Seite Richtliniendetails aufzurufen.
- Zum Konfigurieren der Organisationsrichtlinie für diese Ressource klicken Sie auf Richtlinie verwalten.
- Wählen Sie auf der Seite Richtlinie bearbeiten die Option Richtlinie der übergeordneten Ressource überschreiben aus.
- Klicken Sie auf Regel hinzufügen.
- Wählen Sie im Abschnitt 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 Bucket 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 |
---|---|
Die Aufbewahrungsdauer von Bucket-Aufbewahrungsrichtlinien muss in den angegebenen Zeiträumen liegen. | 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 die Bucket 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. |
Bucket-Namen 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 Bucket kann die Bucket-Sperre nicht 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 die Objektaufbewahrungssperre nicht 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 Multi-Regionen 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. |
Für Bucket können keine Legacy-Speicherklassen verwendet werden | 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
In der folgenden Tabelle sind die Ausdrucksfelder aufgeführt, mit denen Sie Bedingungen erstellen können. Bedingungen werden in der Common Expression Language (CEL) geschrieben. Bei den Werten dieser Ausdrucksfelder wird die Groß- und Kleinschreibung berücksichtigt.
Beschreibungen der folgenden Ausdrucksfelder und der zulässigen Werte finden Sie in der Ressourcendarstellung von Buckets 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 für die Verwendung in Bedingungen für benutzerdefinierte Einschränkungen nicht empfohlen. Verwenden Sie stattdessen Tags, die nur von Personen mit den erforderlichen IAM-Rollen festgelegt werden können und strenger kontrolliert werden als Labels.