Niestandardowe ograniczenia zasad organizacji

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 storageClass lub location.

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

  1. 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.

  2. 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
  • resource.location
  • resource.storageClass

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:

  1. W konsoli Google Cloud otwórz stronę Zasady organizacji.

    Otwórz Zasady organizacji

  2. W selektorze projektów wybierz projekt, dla którego chcesz ustawić zasadę organizacji.
  3. Kliknij Ograniczenie niestandardowe.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. W sekcji Metoda egzekwowania wybierz, czy chcesz wymusić ograniczenie w przypadku metody REST CREATE czy obu metod CREATE i UPDATE. (Uwaga: DefaultBucket obsługuje tylko CREATE).
  9. Aby zdefiniować warunek, kliknij Edytuj warunek.
    1. 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.
    2. Kliknij Zapisz.
  10. 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.

  11. Kliknij Utwórz ograniczenie.

gcloud

  1. 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.
  2. 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_PATH pełną ścieżką do pliku ograniczenia niestandardowego. Na przykład: /home/user/customconstraint.yaml.

  3. 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

  1. W konsoli Google Cloud otwórz stronę Zasady organizacji.

    Otwórz Zasady organizacji

  2. W selektorze projektów wybierz projekt, dla którego chcesz ustawić zasadę organizacji.
  3. Na liście na stronie Zasady organizacji wybierz ograniczenie, aby wyświetlić stronę Szczegóły zasady dla tego ograniczenia.
  4. Aby skonfigurować zasady organizacji dla tego zasobu, kliknij Zarządzaj zasadami.
  5. Na stronie Edytuj zasadę wybierz Zastąp zasadę nadrzędną.
  6. Kliknij Dodaj regułę.
  7. W sekcji Egzekwowanie wybierz, czy ta zasada organizacji ma być egzekwowana.
  8. Aby wymusić zasadę organizacji w trybie uruchomienia próbnego, kliknij Ustaw zasadę uruchamianą próbnie. Więcej informacji znajdziesz w artykule Testowanie zasad organizacji.
  9. Gdy upewnisz się, że zasada organizacji w trybie uruchomienia próbnego działa zgodnie z oczekiwaniami, ustaw aktywną zasadę, klikając Ustaw zasadę.

gcloud

  1. 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
  2. Aby wymusić zasadę organizacji w trybie próbnym, uruchom to polecenie z flagą dryRunSpec:
    gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
  3. Gdy upewnisz się, że zasada organizacji w trybie próbnym działa zgodnie z oczekiwaniami, ustaw aktywną zasadę za pomocą polecenia org-policies set-policy i flagi spec:
    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

  1. 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_ID identyfikatorem organizacji.

  2. Zastosuj ograniczenie:

    gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yaml
    
  3. Sprawdź, czy ograniczenie istnieje:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    Dane 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

  1. Zapisz ten plik jako policy-restrict-storage-class.yaml:

    name: projects/PROJECT_ID/policies/custom.restrictStorageClass
    spec:
      rules:
      -   enforce: true
    

    Zastąp PROJECT_ID identyfikatorem projektu.

  2. Zastosuj zasadę:

    gcloud org-policies set-policy ~/policy-restrict-storage-class.yaml
    
  3. Sprawdź, czy zasada istnieje:

    gcloud org-policies list --project=PROJECT_ID
    

    Dane 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?