В этой статье рассказывается, как использовать специальные ограничения сервиса правил организации Google Cloud, чтобы запретить определенные операции со следующими ресурсами Cloud Storage for Firebase:
firebasestorage.googleapis.com/DefaultBucket
Подробнее о специальных правилах организации…
Правила и ограничения организации
Сервис Organization Policy в Google Cloud позволяет централизованно и программно управлять ресурсами организации. Администратор правил организации может задавать правила организации – набор ограничений, называемых ограничениями, которые применяются к ресурсам Google Cloud и их дочерним ресурсам в иерархии ресурсов Google Cloud. Правила организации можно применять на уровне организации, папки или проекта.
В Organization Policy есть встроенные управляемые ограничения для различных сервисов Google Cloud. Однако если вам нужен более детальный и настраиваемый контроль над определенными полями, которые ограничены в правилах вашей организации, вы также можете создать пользовательские ограничения и использовать их в правилах организации.
Наследование правил
По умолчанию правила организации наследуются потомками ресурсов, к которым вы применяете правило. Например, если вы примените правило к папке, Google Cloud применит его ко всем проектам в этой папке. Подробнее о том, как это работает и как изменить настройки, читайте в статье Правила оценки иерархии.
Кроме того, поскольку Cloud Storage for Firebase хранит файлы в базовых сегментах Cloud Storage, любые правила организации или пользовательские ограничения, применяемые к ресурсам Cloud Storage, также применяются к вашим сегментам Cloud Storage for Firebase.
Преимущества
- Безопасность и управление. Обеспечьте централизованный контроль над инициализацией сегментов Cloud Storage, чтобы гарантировать соблюдение требований к хранению данных и управлению расходами.
- Точный контроль атрибутов. Ограничьте создание сегментов по умолчанию на основе определенных атрибутов ресурсов, таких как
storageClassилиlocation.
Ограничения
При использовании специальных правил организации с Cloud Storage for Firebase действуют следующие ограничения:
- Отсутствие обратной силы. Новые специальные ограничения не применяются к существующим ресурсам. Существующие сегменты по умолчанию не оцениваются, если они не обновлены. Чтобы выявить существующие ресурсы, которые могут нарушать ограничение, вы можете протестировать правила в режиме пробного выполнения.
- Ограничения контроля доступа. Специальные ограничения не могут ограничивать списки контроля доступа (ACL) или политики IAM для сегментов.
Подготовка
В консоли Firebase выберите или создайте проект Firebase.
Убедитесь, что ваш проект относится к организации и что вы знаете ее идентификатор.
Чтобы настроить и применить специальные ограничения с помощью командной строки, установите Google Cloud CLI (
gcloud). Специальными правилами организации нельзя управлять с помощью интерфейса командной строки Firebase.
Необходимые роли
Чтобы получить разрешения, необходимые для управления специальными правилами организации, попросите администратора назначить вам роль IAM Администратор правил организации (roles/orgpolicy.policyAdmin) на уровне организации.
Cloud Storage for Firebase поддерживаемый ресурс
В таблице ниже перечислены ресурсы Cloud Storage for Firebase, на которые можно ссылаться в специальных ограничениях. Вы также можете ознакомиться с поддерживаемыми ресурсами Cloud Storage, поскольку специальные ограничения для этих ресурсов также применяются к сегментам Cloud Storage for Firebase.
| Ресурс | Поддерживаемые поля |
|---|---|
firebasestorage.googleapis.com/DefaultBucket |
|
Как настроить специальное ограничение
Пользовательское ограничение определяется в файле YAML ресурсами, методами, условиями и действиями, которые поддерживаются сервисом, в котором вы применяете правило организации. Условия для специальных ограничений определяются с помощью Common Expression Language (CEL). Подробную информацию о том, как создавать условия в специальных ограничениях с помощью CEL, можно найти в разделе CEL статьи Создание специальных ограничений и управление ими.
Консоль
Чтобы создать специальное ограничение, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу Правила организации.
- В меню выбора проекта укажите проект, для которого нужно настроить правила организации.
- Нажмите Специальное ограничение.
- В поле Отображаемое название введите человекочитаемое название ограничения. Это название используется в сообщениях об ошибках, а также для идентификации и отладки. Не используйте в отображаемых названиях информацию, позволяющую идентифицировать личность, или конфиденциальные данные, поскольку это название может быть показано в сообщениях об ошибках. Максимальная длина – 200 символов.
- В поле Constraint ID (Идентификатор ограничения) введите идентификатор нового специального ограничения. Специальное ограничение может содержать только буквы (включая заглавные и строчные) или цифры, например
custom.restrictStorageClass. Это поле может содержать до 70 символов, не считая префикса (custom.), напримерorganizations/123456789/customConstraints/custom.restrictStorageClass. Не включайте в идентификатор ограничения информацию, позволяющую идентифицировать личность, или конфиденциальные данные, поскольку они могут быть видны в сообщениях об ошибках. - В поле Описание введите человекочитаемое описание ограничения. Это описание используется в качестве сообщения об ошибке при нарушении правила. Укажите, почему произошло нарушение правил и как его устранить. Не указывайте в описании информацию, позволяющую идентифицировать личность, или конфиденциальные данные, поскольку они могут быть показаны в сообщениях об ошибках. В этом поле можно указать до 2000 символов.
- В поле Resource type (Тип ресурса) выберите название ресурса REST, содержащего объект и поле, доступ к которым нужно ограничить, например
firebasestorage.googleapis.com/DefaultBucket. Для большинства типов ресурсов поддерживается до 20 специальных ограничений. Если вы попытаетесь создать больше специальных ограничений, операция завершится ошибкой. - В разделе Способ применения выберите, нужно ли применять ограничение к методу REST
CREATEили к обоим методам (CREATEиUPDATE). Примечание.DefaultBucketподдерживает толькоCREATE. - Чтобы задать условие, нажмите Изменить условие.
- На панели Добавить условие создайте условие CEL, которое ссылается на поддерживаемый ресурс сервиса, например
resource.storageClass == 'STANDARD'. В этом поле может быть до 1000 символов. Подробные сведения об использовании CEL приведены в статье Common Expression Language. - Нажмите Сохранить.
- На панели Добавить условие создайте условие CEL, которое ссылается на поддерживаемый ресурс сервиса, например
- В разделе Действие выберите, разрешить или запретить оцениваемый метод, если условие выполнено.
Действие deny означает, что операция по созданию или обновлению ресурса блокируется, если условие оценивается как истинное.
Действие allow означает, что операция по созданию или обновлению ресурса разрешена, только если условие имеет значение true. Все остальные случаи, кроме явно перечисленных в условии, блокируются.
- Нажмите Создать ограничение.
gcloud
- Чтобы создать специальное ограничение, создайте YAML-файл в следующем формате:
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.
- После создания YAML-файла для нового специального ограничения его необходимо настроить, чтобы оно стало доступно для правил организации. Чтобы настроить специальное ограничение, используйте команду
gcloud org-policies set-custom-constraint:gcloud org-policies set-custom-constraint CONSTRAINT_PATH
Замените
CONSTRAINT_PATHполным путем к файлу с пользовательским ограничением. Пример:/home/user/customconstraint.yaml. - Чтобы проверить, существует ли специальное ограничение, используйте команду
gcloud org-policies list-custom-constraints:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Как применить специальное правило организации
Вы можете применить ограничение, создав правило организации, которое ссылается на него, а затем применив это правило организации к ресурсу Google Cloud.
Консоль
- В консоли Google Cloud перейдите на страницу Правила организации.
- В меню выбора проекта укажите проект, для которого нужно настроить правила организации.
- В списке на странице Правила организации выберите ограничение, чтобы открыть страницу Сведения о правиле.
- Чтобы настроить правила организации для этого ресурса, нажмите Управление правилами.
- На странице Изменение политики выберите Переопределять политику родительского объекта.
- Нажмите Добавить правило.
- В разделе Применение укажите, применяется ли это правило организации.
- Чтобы применить политику организации в режиме пробного выполнения, нажмите Установить политику пробного выполнения. Подробнее о том, как тестировать правила организации…
- Убедившись, что правило организации в режиме пробного запуска работает правильно, нажмите Задать правило.
gcloud
- Чтобы создать правило организации с логическими правилами, создайте YAML-файл правила, который ссылается на ограничение:
name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
- Чтобы применить правила организации в режиме пробного выполнения, выполните следующую команду с флагом
dryRunSpec:gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
- Убедившись, что правила организации в режиме пробного запуска работают правильно, задайте действующие правила с помощью команды
org-policies set-policyи флагаspec:gcloud org-policies set-policy POLICY_PATH --update-mask=spec
Как протестировать специальное правило организации
В примере ниже создается специальное ограничение и правило, которые запрещают использовать класс хранилища STANDARD для всех новых сегментов по умолчанию. Чтобы проверить правило, попробуйте выполнить действие, которое оно должно предотвратить.
Создайте ограничение
Сохраните следующий файл как
constraint-restrict-storage-class.yaml:name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.Замените
ORGANIZATION_IDидентификатором своей организации.Примените ограничение:
gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yamlУбедитесь, что ограничение существует:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_IDВыходные данные будут выглядеть примерно так:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.restrictStorageClass DENY CREATE firebasestorage.googleapis.com/DefaultBucket Restrict Standard Storage Class ...
Создайте правило
Сохраните следующий файл как
policy-restrict-storage-class.yaml:name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: trueЗамените
PROJECT_IDидентификатором своего проекта.Примените правило:
gcloud org-policies set-policy ~/policy-restrict-storage-class.yamlУбедитесь, что правило существует:
gcloud org-policies list --project=PROJECT_IDВыходные данные будут выглядеть примерно так:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.restrictStorageClass - SET CIqktscGELiZn6cC-
После применения правила подождите около двух минут, пока Google Cloud не начнет его применять.
Как протестировать правило
Попробуйте создать сегмент по умолчанию с помощью REST API Cloud Storage for Firebase, не указывая класс хранилища (по умолчанию используется STANDARD):
PROJECT_ID="PROJECT_ID"
TOKEN=$(gcloud auth print-access-token)
curl -X POST "https://firebasestorage.googleapis.com/v1beta/projects/${PROJECT_ID}/defaultBucket" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"location": "US-EAST1"}'
Запрос завершается ошибкой, похожей на следующую:
FAILED_PRECONDITION: Operation denied by org policy: ["customConstraints/custom.restrictStorageClass": "Deny creating buckets with STANDARD storage class."].
- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: iam.googleapis.com
metadata:
customConstraints: customConstraints/custom.restrictStorageClass
reason: CUSTOM_ORG_POLICY_VIOLATION
Примеры специальных правил организации для распространенных сценариев использования
В таблице ниже приведены примеры синтаксиса для некоторых распространенных специальных ограничений.
| Описание | Синтаксис ограничений |
|---|---|
| Запретить создание стандартных сегментов с классом хранилища STANDARD |
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class. |
| Требовать, чтобы сегменты по умолчанию создавались в определенном местоположении |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requireDefaultBucketLocation resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.location != 'US-EAST1'" actionType: DENY displayName: Require US-EAST1 Location description: Deny creating default buckets outside the US-EAST1 location. |
Дальнейшие действия
- Подробнее о сервисе Organization Policy…
- Подробнее о том, как создавать правила организации и управлять ими…
- Ознакомьтесь с полным списком ограничений правил организации.