Na tej stronie dowiesz się, jak używać niestandardowych ograniczeń usługi zasad organizacji Google Cloud, aby ograniczyć określone operacje na tych zasobach Cloud Storage for Firebase:
firebasestorage.googleapis.com/DefaultBucket
Więcej informacji o zasadach organizacji znajdziesz w artykule na temat niestandardowych zasad organizacji.
Informacje o zasadach organizacji i ograniczeniach
Google Cloud Usługa zasad organizacji zapewnia centralną, zautomatyzowaną kontrolę nad zasobami organizacji. Jako administrator zasad organizacji możesz zdefiniować zasadę organizacji, czyli zbiór ograniczeń nazywanych ograniczeniami, które mają zastosowanie do zasobów Google Cloud i zasobów podrzędnych w hierarchii zasobów Google Cloud. Zasady organizacji możesz egzekwować na poziomie organizacji, folderu lub projektu.
Zasady organizacji udostępniają wbudowane zarządzane ograniczenia dla różnych usług Google Cloud. Jeśli jednak chcesz mieć bardziej szczegółową, dostosowywaną kontrolę nad konkretnymi polami, które są ograniczone w zasadach organizacji, możesz też utworzyć niestandardowe ograniczenia i używać ich w zasadach organizacji.
Dziedziczenie zasad
Domyślnie zasady organizacji są dziedziczone przez elementy podrzędne zasobów, w których egzekwujesz zasadę. Jeśli na przykład zastosujesz zasadę do folderu, Google Cloud zastosuje ją do wszystkich projektów w tym folderze. Więcej informacji o tym zachowaniu i o tym, jak je zmienić, znajdziesz w artykule Reguły oceny hierarchii.
Dodatkowo, ponieważ Cloud Storage for Firebase przechowuje pliki w zasobnikach Cloud Storage, wszelkie zasady organizacji lub ograniczenia niestandardowe wymuszane na zasobach Cloud Storage dotyczą również zasobników Cloud Storage for Firebase.
Zalety
- Bezpieczeństwo i zarządzanie: wymuszaj scentralizowaną kontrolę organizacji nad udostępnianiem zasobników Cloud Storage, aby zapewnić zgodność z zasadami dotyczącymi miejsca przechowywania danych i zarządzania kosztami.
- Szczegółowa kontrola atrybutów: ogranicz domyślne tworzenie zasobników na podstawie określonych atrybutów zasobów, takich jak
storageClasslublocation.
Ograniczenia
W przypadku używania niestandardowych zasad organizacji z Cloud Storage for Firebase obowiązują te ograniczenia:
- Brak egzekwowania z mocą wsteczną: nowo egzekwowane ograniczenia niestandardowe nie mają zastosowania do istniejących zasobów. Istniejące zasobniki domyślne nie są oceniane, chyba że zostaną zaktualizowane. Aby zidentyfikować istniejące zasoby, które mogą naruszać ograniczenie, możesz przetestować zasady w trybie próbnym.
- Ograniczenia kontroli dostępu: ograniczenia niestandardowe nie mogą ograniczać list kontroli dostępu (ACL) ani zasad uprawnień w zasobnikach.
Zanim zaczniesz
W konsoli Firebase wybierz lub utwórz projekt w Firebase.
Upewnij się, że Twój projekt należy do organizacji i że znasz jej identyfikator.
Aby skonfigurować i egzekwować ograniczenia niestandardowe za pomocą wiersza poleceń, zainstaluj Google Cloud CLI (
gcloud). Niestandardowymi zasadami organizacji nie można zarządzać za pomocą wiersza poleceń Firebase.
Wymagane role
Aby uzyskać uprawnienia niezbędne do zarządzania niestandardowymi zasadami organizacji, poproś administratora o przyznanie Ci roli uprawnień administrator zasad organizacji (roles/orgpolicy.policyAdmin) w organizacji.
Obsługiwane zasoby: Cloud Storage for Firebase
W tabeli poniżej znajdziesz zasoby Cloud Storage for Firebase, do których możesz się odwoływać w ograniczeniach niestandardowych. Możesz też zapoznać się z zasobami obsługiwanymi przez Cloud Storage, ponieważ ograniczenia niestandardowe dotyczące tych zasobów mają też zastosowanie do zasobników Cloud Storage for Firebase.
| Zasób | Obsługiwane pola |
|---|---|
firebasestorage.googleapis.com/DefaultBucket |
|
Konfigurowanie ograniczenia niestandardowego
Ograniczenie niestandardowe jest definiowane w pliku YAML przez zasoby, metody, warunki i działania obsługiwane przez usługę, w której egzekwujesz zasadę organizacji. Warunki ograniczeń niestandardowych są definiowane za pomocą języka Common Expression Language (CEL). Więcej informacji o tworzeniu warunków w ograniczeniach niestandardowych za pomocą języka CEL znajdziesz w sekcji dotyczącej języka CEL w artykule Tworzenie ograniczeń niestandardowych i zarządzanie nimi.
Konsola
Aby utworzyć ograniczenie niestandardowe, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zasady organizacji.
- W selektorze projektów wybierz projekt, dla którego chcesz ustawić zasadę organizacji.
- Kliknij Ograniczenie niestandardowe.
- W polu Wyświetlana nazwa wpisz zrozumiałą dla człowieka nazwę ograniczenia. Ta nazwa jest używana w komunikatach o błędach i może służyć do identyfikacji i debugowania. Nie używaj w wyświetlanych nazwach informacji umożliwiających identyfikację ani danych wrażliwych, ponieważ mogą zostać ujawnione w komunikatach o błędach. To pole może zawierać maksymalnie 200 znaków.
- W polu Identyfikator ograniczenia wpisz identyfikator, który chcesz nadać nowemu ograniczeniu niestandardowemu. Ograniczenie niestandardowe może zawierać tylko litery (w tym wielkie i małe) lub cyfry, na przykład
custom.restrictStorageClass. To pole może zawierać maksymalnie 70 znaków, nie licząc prefiksu (custom.), np.organizations/123456789/customConstraints/custom.restrictStorageClass. Nie uwzględniaj w identyfikatorze ograniczenia informacji umożliwiających identyfikację ani danych wrażliwych, ponieważ mogą zostać ujawnione w komunikatach o błędach. - W polu Opis wpisz zrozumiały dla człowieka opis ograniczenia. Ten opis jest używany jako komunikat o błędzie w przypadku naruszenia zasad. Podaj szczegółowe informacje o przyczynie naruszenia zasad i sposobie jego rozwiązania. Nie uwzględniaj w opisie informacji umożliwiających identyfikację ani danych wrażliwych, ponieważ mogą zostać ujawnione w komunikatach o błędach. To pole może zawierać maksymalnie 2000 znaków.
- W polu Typ zasobu wybierz nazwę zasobu REST zawierającego obiekt i pole, które chcesz ograniczyć, np.
firebasestorage.googleapis.com/DefaultBucket. Większość typów zasobów obsługuje maksymalnie 20 ograniczeń niestandardowych. Jeśli spróbujesz utworzyć więcej ograniczeń niestandardowych, operacja się nie powiedzie. - W sekcji Metoda egzekwowania wybierz, czy chcesz wymusić ograniczenie w przypadku metody REST
CREATEczy obu metodCREATEiUPDATE. (Uwaga:DefaultBucketobsługuje tylkoCREATE). - Aby zdefiniować warunek, kliknij Edytuj warunek.
- W panelu Dodaj warunek utwórz warunek CEL, który odwołuje się do obsługiwanego zasobu usługi, na przykład
resource.storageClass == 'STANDARD'. To pole może zawierać maksymalnie 1000 znaków. Szczegółowe informacje o używaniu języka CEL znajdziesz w artykule Common Expression Language. - Kliknij Zapisz.
- W panelu Dodaj warunek utwórz warunek CEL, który odwołuje się do obsługiwanego zasobu usługi, na przykład
- W sekcji Działanie wybierz, czy chcesz zezwolić na ocenianą metodę, czy ją odrzucić, jeśli warunek zostanie spełniony.
Działanie odmowy oznacza, że operacja tworzenia lub aktualizowania zasobu jest blokowana, jeśli warunek jest spełniony.
Działanie zezwalające oznacza, że operacja tworzenia lub aktualizowania zasobu jest dozwolona tylko wtedy, gdy warunek jest spełniony. Wszystkie inne przypadki, z wyjątkiem tych wyraźnie wymienionych w warunku, są blokowane.
- Kliknij Utwórz ograniczenie.
gcloud
- Aby utworzyć ograniczenie niestandardowe, utwórz plik YAML w tym formacie:
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.
- Po utworzeniu pliku YAML dla nowego ograniczenia niestandardowego musisz je skonfigurować, aby było dostępne dla zasad organizacji w Twojej organizacji. Aby skonfigurować ograniczenie niestandardowe, użyj polecenia
gcloud org-policies set-custom-constraint:gcloud org-policies set-custom-constraint CONSTRAINT_PATH
Zastąp
CONSTRAINT_PATHpełną ścieżką do pliku ograniczenia niestandardowego. Na przykład:/home/user/customconstraint.yaml. - Aby sprawdzić, czy ograniczenie niestandardowe istnieje, użyj polecenia
gcloud org-policies list-custom-constraints:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Egzekwowanie niestandardowej zasady organizacji
Możesz wymusić ograniczenie, tworząc zasadę organizacji, która się do niego odwołuje, a następnie stosując tę zasadę do zasobu Google Cloud.
Konsola
- W konsoli Google Cloud otwórz stronę Zasady organizacji.
- W selektorze projektów wybierz projekt, dla którego chcesz ustawić zasadę organizacji.
- Na liście na stronie Zasady organizacji wybierz ograniczenie, aby wyświetlić stronę Szczegóły zasady dla tego ograniczenia.
- Aby skonfigurować zasady organizacji dla tego zasobu, kliknij Zarządzaj zasadami.
- Na stronie Edytuj zasadę wybierz Zastąp zasadę nadrzędną.
- Kliknij Dodaj regułę.
- W sekcji Egzekwowanie wybierz, czy ta zasada organizacji ma być egzekwowana.
- Aby wymusić zasadę organizacji w trybie uruchomienia próbnego, kliknij Ustaw zasadę uruchamianą próbnie. Więcej informacji znajdziesz w artykule Testowanie zasad organizacji.
- Gdy upewnisz się, że zasada organizacji w trybie uruchomienia próbnego działa zgodnie z oczekiwaniami, ustaw aktywną zasadę, klikając Ustaw zasadę.
gcloud
- Aby utworzyć zasadę organizacji z regułami logicznymi, utwórz plik YAML zasady, który odwołuje się do ograniczenia:
name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
- Aby wymusić zasadę organizacji w trybie próbnym, uruchom to polecenie z flagą
dryRunSpec:gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
- Gdy upewnisz się, że zasada organizacji w trybie próbnym działa zgodnie z oczekiwaniami, ustaw aktywną zasadę za pomocą polecenia
org-policies set-policyi flagispec:gcloud org-policies set-policy POLICY_PATH --update-mask=spec
Testowanie niestandardowej zasady organizacji
W tym przykładzie tworzone są ograniczenie niestandardowe i zasada, które wymagają, aby wszystkie nowo utworzone domyślne zasobniki nie używały klasy pamięci masowej STANDARD. Możesz przetestować zasadę, próbując wykonać działanie, któremu zasada powinna zapobiec.
Utwórz ograniczenie
Zapisz ten plik jako
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.Zastąp
ORGANIZATION_IDidentyfikatorem organizacji.Zastosuj ograniczenie:
gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yamlSprawdź, czy ograniczenie istnieje:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_IDDane wyjściowe są podobne do tych:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.restrictStorageClass DENY CREATE firebasestorage.googleapis.com/DefaultBucket Restrict Standard Storage Class ...
Tworzenie zasady
Zapisz ten plik jako
policy-restrict-storage-class.yaml:name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: trueZastąp
PROJECT_IDidentyfikatorem projektu.Zastosuj zasadę:
gcloud org-policies set-policy ~/policy-restrict-storage-class.yamlSprawdź, czy zasada istnieje:
gcloud org-policies list --project=PROJECT_IDDane wyjściowe są podobne do tych:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.restrictStorageClass - SET CIqktscGELiZn6cC-
Po zastosowaniu zasady odczekaj około 2 minut, aż Google Cloud zacznie ją egzekwować.
Testowanie zasady
Spróbuj utworzyć domyślny zasobnik za pomocą interfejsu API typu REST Cloud Storage for Firebase bez określania klasy pamięci (która domyślnie jest ustawiona na 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"}'
Żądanie nie powiedzie się i pojawi się błąd podobny do tego:
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
Przykładowe niestandardowe zasady organizacji w typowych przypadkach użycia
Ta tabela zawiera przykłady składni niektórych typowych ograniczeń niestandardowych.
| Opis | Składnia ograniczeń |
|---|---|
| Ogranicz tworzenie domyślnych zasobników z klasą pamięci masowej 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. |
| Wymagaj tworzenia domyślnych zasobników w określonej lokalizacji |
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. |
Co dalej?
- Dowiedz się więcej o usłudze zasad organizacji.
- Dowiedz się więcej o tworzeniu zasad organizacji i zarządzaniu nimi.
- Zobacz pełną listę zarządzanych ograniczeń zasad organizacji.