GCP - Basic Information

Wspieraj HackTricks

Hierarchia zasobów

Google Cloud używa Hierarchii zasobów, która jest koncepcyjnie podobna do tradycyjnego systemu plików. Zapewnia to logiczny przepływ rodzic/dziecko z określonymi punktami przyłączenia dla polityk i uprawnień.

Na wysokim poziomie wygląda to tak:

Organization
--> Folders
--> Projects
--> Resources

Maszyna wirtualna (nazywana Compute Instance) jest zasobem. Zasób znajduje się w projekcie, prawdopodobnie obok innych Compute Instances, storage buckets, itp.

Migracja Projektów

Możliwe jest migracja projektu bez organizacji do organizacji z uprawnieniami roles/resourcemanager.projectCreator i roles/resourcemanager.projectMover. Jeśli projekt znajduje się w innej organizacji, należy skontaktować się z pomocą techniczną GCP, aby najpierw przenieść go poza organizację. Więcej informacji znajdziesz tutaj.

Polityki Organizacyjne

Pozwalają na centralizację kontroli nad zasobami chmurowymi organizacji:

  • Centralizacja kontroli w celu konfigurowania ograniczeń dotyczących sposobu używania zasobów organizacji.

  • Definiowanie i ustanawianie barier ochronnych dla zespołów deweloperskich, aby pozostawały w granicach zgodności.

  • Pomoc właścicielom projektów i ich zespołom w szybkim działaniu bez obaw o naruszenie zgodności.

Te polityki mogą być tworzone, aby wpływać na całą organizację, folder(y) lub projekt(y). Potomkowie docelowego węzła hierarchii zasobów dziedziczą politykę organizacyjną.

Aby zdefiniować politykę organizacyjną, wybierasz ograniczenie, które jest określonym typem ograniczenia wobec usługi Google Cloud lub grupy usług Google Cloud. Konfigurujesz to ograniczenie z pożądanymi restrykcjami.

Typowe przypadki użycia

  • Ograniczenie udostępniania zasobów na podstawie domeny.

  • Ograniczenie użycia kont usług Identity and Access Management.

  • Ograniczenie fizycznej lokalizacji nowo utworzonych zasobów.

  • Wyłączenie tworzenia kont usług

Istnieje wiele innych ograniczeń, które dają szczegółową kontrolę nad zasobami organizacji. Aby uzyskać więcej informacji, zobacz listę wszystkich ograniczeń usługi Organization Policy.

Domyślne Polityki Organizacyjne

Oto polityki, które Google doda domyślnie podczas konfigurowania organizacji GCP:

Polityki Zarządzania Dostępem

  • Kontakty ograniczone do domeny: Zapobiega dodawaniu użytkowników do Essential Contacts spoza określonych domen. Ogranicza to Essential Contacts do zarządzanych tożsamości użytkowników w wybranych domenach, aby otrzymywać powiadomienia platformy.

  • Udostępnianie ograniczone do domeny: Zapobiega dodawaniu użytkowników do polityk IAM spoza określonych domen. Ogranicza to polityki IAM do zarządzanych tożsamości użytkowników w wybranych domenach, aby uzyskać dostęp do zasobów w tej organizacji.

  • Zapobieganie publicznemu dostępowi: Zapobiega udostępnianiu publicznego dostępu do Cloud Storage buckets. Zapewnia to, że deweloper nie może skonfigurować Cloud Storage buckets do nieautoryzowanego dostępu internetowego.

  • Jednolity dostęp na poziomie bucket: Zapobiega listom kontroli dostępu (ACL) na poziomie obiektów w Cloud Storage buckets. Upraszcza to zarządzanie dostępem poprzez stosowanie polityk IAM konsekwentnie do wszystkich obiektów w Cloud Storage buckets.

  • Wymagaj logowania do OS: VM utworzone w nowych projektach będą miały włączone OS Login. Pozwala to zarządzać dostępem SSH do instancji za pomocą IAM bez potrzeby tworzenia i zarządzania indywidualnymi kluczami SSH.

Dodatkowe polityki bezpieczeństwa dla kont usług

  • Wyłącz automatyczne przyznawanie IAM: Zapobiega automatycznemu przyznawaniu roli Editor IAM domyślnym kontom usług App Engine i Compute Engine podczas tworzenia projektu. Zapewnia to, że konta usług nie otrzymują zbyt szerokich ról IAM podczas tworzenia.

  • Wyłącz tworzenie kluczy kont usług: Zapobiega tworzeniu publicznych kluczy kont usług. Pomaga to zmniejszyć ryzyko ujawnienia trwałych poświadczeń.

  • Wyłącz przesyłanie kluczy kont usług: Zapobiega przesyłaniu publicznych kluczy kont usług. Pomaga to zmniejszyć ryzyko wycieku lub ponownego użycia materiału klucza.

Polityki konfiguracji bezpiecznej sieci VPC

  • Definiuj dozwolone zewnętrzne IP dla instancji VM: Zapobiega tworzeniu instancji Compute z publicznym IP, co może narażać je na ruch internetowy.

  • Wyłącz wirtualizację zagnieżdżoną VM: Zapobiega tworzeniu zagnieżdżonych VM na instancjach Compute Engine VM. Zmniejsza to ryzyko bezpieczeństwa związane z niekontrolowanymi zagnieżdżonymi VM.

  • Wyłącz port szeregowy VM: Zapobiega dostępowi do portu szeregowego instancji Compute Engine VM. Zapobiega to wprowadzaniu danych do portu szeregowego serwera za pomocą API Compute Engine.

  • Ogranicz autoryzowane sieci na instancjach Cloud SQL: Zapobiega dostępowi do baz danych Cloud SQL z publicznych lub nie wewnętrznych zakresów sieci.

  • Ogranicz przekazywanie protokołów na podstawie typu adresu IP: Zapobiega przekazywaniu protokołów VM dla zewnętrznych adresów IP.

  • Ogranicz dostęp do publicznego IP na instancjach Cloud SQL: Zapobiega tworzeniu instancji Cloud SQL z publicznym IP, co może narażać je na ruch internetowy.

  • Ogranicz usuwanie projektów hosta Shared VPC: Zapobiega przypadkowemu usunięciu projektów hosta Shared VPC.

  • Ustawia wewnętrzne ustawienie DNS dla nowych projektów na Zonal DNS Only: Zapobiega używaniu starszego ustawienia DNS, które ma zmniejszoną dostępność usługi.

  • Pomiń tworzenie domyślnej sieci: Zapobiega automatycznemu tworzeniu domyślnej sieci VPC i powiązanych zasobów. Unika to zbyt szerokich domyślnych reguł zapory.

  • Wyłącz użycie zewnętrznego IPv6 w VPC: Zapobiega tworzeniu zewnętrznych podsieci IPv6, które mogą być narażone na nieautoryzowany dostęp internetowy.

IAM Roles

Są podobne do polityk IAM w AWS, ponieważ każda rola zawiera zestaw uprawnień.

Jednak w przeciwieństwie do AWS, nie ma centralnego repozytorium ról. Zamiast tego, zasoby przyznają X role dostępu Y podmiotom, a jedynym sposobem, aby dowiedzieć się, kto ma dostęp do zasobu, jest użycie metody get-iam-policy na tym zasobie. Może to być problem, ponieważ oznacza to, że jedynym sposobem, aby dowiedzieć się, jakie uprawnienia ma podmiot, jest zapytanie każdego zasobu, komu przyznaje uprawnienia, a użytkownik może nie mieć uprawnień do uzyskania uprawnień od wszystkich zasobów.

Istnieją trzy typy ról w IAM:

  • Podstawowe/Primitivne role, które obejmują role Owner, Editor i Viewer, które istniały przed wprowadzeniem IAM.

  • Zdefiniowane role, które zapewniają szczegółowy dostęp do określonej usługi i są zarządzane przez Google Cloud. Istnieje wiele zdefiniowanych ról, możesz zobaczyć wszystkie z nich z uprawnieniami, które mają tutaj.

  • Role niestandardowe, które zapewniają szczegółowy dostęp zgodnie z listą uprawnień określoną przez użytkownika.

W GCP istnieją tysiące uprawnień. Aby sprawdzić, czy rola ma uprawnienia, możesz wyszukać uprawnienia tutaj i zobaczyć, które role je mają.

Możesz również wyszukać tutaj zdefiniowane role oferowane przez każdy produkt. Należy zauważyć, że niektóre role nie mogą być przypisane do użytkowników i tylko do SAs z powodu niektórych uprawnień, które zawierają. Ponadto, należy zauważyć, że uprawnienia będą działać tylko wtedy, gdy są przypisane do odpowiedniej usługi.

Lub sprawdź, czy rola niestandardowa może używać określonego uprawnienia tutaj.

GCP - IAM, Principals & Org Policies Enum

Użytkownicy

W konsoli GCP nie ma zarządzania Użytkownikami ani Grupami, to jest realizowane w Google Workspace. Chociaż można zsynchronizować innego dostawcę tożsamości w Google Workspace.

Możesz uzyskać dostęp do użytkowników i grup Workspaces w https://admin.google.com.

MFA może być wymuszone dla użytkowników Workspaces, jednak atakujący może użyć tokena do uzyskania dostępu do GCP przez cli, który nie będzie chroniony przez MFA (będzie chroniony przez MFA tylko wtedy, gdy użytkownik zaloguje się, aby go wygenerować: gcloud auth login).

Grupy

Kiedy tworzona jest organizacja, sugeruje się utworzenie kilku grup. Jeśli zarządzasz którąkolwiek z nich, możesz mieć skompromitowaną całą lub ważną część organizacji:

Grupa

Funkcja

gcp-organization-admins (grupa lub indywidualne konta wymagane do listy kontrolnej)

Administrowanie dowolnym zasobem należącym do organizacji. Przypisuj tę rolę oszczędnie; administratorzy organizacji mają dostęp do wszystkich zasobów Google Cloud. Alternatywnie, ponieważ ta funkcja jest wysoce uprzywilejowana, rozważ użycie indywidualnych kont zamiast tworzenia grupy.

gcp-network-admins (wymagane do listy kontrolnej)

Tworzenie sieci, podsieci, reguł zapory i urządzeń sieciowych, takich jak Cloud Router, Cloud VPN i load balancers w chmurze.

gcp-billing-admins (wymagane do listy kontrolnej)

Konfigurowanie kont rozliczeniowych i monitorowanie ich użycia.

gcp-developers (wymagane do listy kontrolnej)

Projektowanie, kodowanie i testowanie aplikacji.

gcp-security-admins

Ustanawianie i zarządzanie politykami bezpieczeństwa dla całej organizacji, w tym zarządzanie dostępem i politykami ograniczeń organizacyjnych. Zobacz przewodnik po podstawach bezpieczeństwa Google Cloud po więcej informacji na temat planowania infrastruktury bezpieczeństwa Google Cloud.

gcp-devops

Tworzenie lub zarządzanie pipeline'ami end-to-end, które wspierają ciągłą integrację i dostarczanie, monitorowanie i provisioningu systemu.

gcp-logging-admins

gcp-logging-viewers

gcp-monitor-admins

gcp-billing-viewer (już nie domyślnie)

Monitorowanie wydatków na projekty. Typowi członkowie to część zespołu finansowego.

gcp-platform-viewer (już nie domyślnie)

Przeglądanie informacji o zasobach w całej organizacji Google Cloud.

gcp-security-reviewer (już nie domyślnie)

Przeglądanie bezpieczeństwa chmury.

gcp-network-viewer (już nie domyślnie)

Przeglądanie konfiguracji sieci.

grp-gcp-audit-viewer (już nie domyślnie)

Przeglądanie logów audytu.

gcp-scc-admin (już nie domyślnie)

Administrowanie Security Command Center.

gcp-secrets-admin (już nie domyślnie)

Zarządzanie sekretami w Secret Manager.

Domyślna Polityka Haseł

  • Wymuszanie silnych haseł

  • Między 8 a 100 znaków

  • Brak ponownego użycia

  • Brak wygaśnięcia

  • Jeśli ludzie uzyskują dostęp do Workspace przez zewnętrznego dostawcę, te wymagania nie są stosowane.

Service accounts

Są to podmioty, które zasoby mogą mieć przypisane i dostęp do łatwej interakcji z GCP. Na przykład, możliwe jest uzyskanie dostępu do auth token konta usługi przypisanego do VM w metadanych. Możliwe jest napotkanie konfliktów podczas używania zarówno IAM, jak i zakresów dostępu. Na przykład, twoje konto usługi może mieć rolę IAM compute.instanceAdmin, ale instancja, którą przejąłeś, została ograniczona zakresem https://www.googleapis.com/auth/compute.readonly. To uniemożliwiłoby wprowadzanie jakichkolwiek zmian za pomocą tokena OAuth, który jest automatycznie przypisany do twojej instancji

PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com

Jednakże możliwe jest również tworzenie i dołączanie do zasobów niestandardowych kont usługowych, które będą wyglądać tak:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Access scopes

Access scope są przypisane do generowanych tokenów OAuth w celu uzyskania dostępu do punktów końcowych API GCP. Ograniczają one uprawnienia tokena OAuth. Oznacza to, że jeśli token należy do właściciela zasobu, ale nie ma w zakresie tokena dostępu do tego zasobu, token nie może być użyty do (nadużywania) tych uprawnień.

Google faktycznie zaleca, aby nie używać access scopes i całkowicie polegać na IAM. Portal zarządzania webowego faktycznie to wymusza, ale access scopes mogą nadal być stosowane do instancji przy użyciu niestandardowych kont serwisowych programowo.

Możesz zobaczyć, jakie scopesprzypisane poprzez zapytanie:

curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'

{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}

Poprzednie scopes są generowane domyślnie przy użyciu gcloud do dostępu do danych. Dzieje się tak, ponieważ gdy używasz gcloud, najpierw tworzysz token OAuth, a następnie używasz go do kontaktu z endpointami.

Najważniejszym zakresem z tych potencjalnych jest cloud-platform, co w zasadzie oznacza, że możliwe jest uzyskanie dostępu do dowolnej usługi w GCP.

Możesz znaleźć listę wszystkich możliwych zakresów tutaj.

Jeśli masz gcloud poświadczenia przeglądarki, możliwe jest uzyskanie tokena z innymi zakresami, robiąc coś takiego:

# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db

# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user

# Print new token
gcloud auth application-default print-access-token

# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"

Terraform IAM Policies, Bindings and Memberships

Jak zdefiniowano przez terraform w https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam używając terraform z GCP istnieją różne sposoby przyznawania dostępu do zasobu:

  • Memberships: Ustawiasz principals jako członków ról bez ograniczeń dotyczących roli lub principals. Możesz umieścić użytkownika jako członka roli, a następnie umieścić grupę jako członka tej samej roli i również ustawić tych principals (użytkownika i grupę) jako członków innych ról.

  • Bindings: Kilku principals może być powiązanych z rolą. Ci principals mogą nadal być powiązani lub być członkami innych ról. Jednakże, jeśli principal, który nie jest powiązany z rolą, zostanie ustawiony jako członek powiązanej roli, następnym razem, gdy binding zostanie zastosowany, członkostwo zniknie.

  • Policies: Polityka jest autorytatywna, wskazuje role i principals, a następnie, ci principals nie mogą mieć więcej ról, a te role nie mogą mieć więcej principals, chyba że polityka zostanie zmodyfikowana (nawet w innych politykach, bindings lub memberships). Dlatego, gdy rola lub principal jest określony w polityce, wszystkie jego przywileje są ograniczone przez tę politykę. Oczywiście, można to obejść, jeśli principal ma możliwość modyfikacji polityki lub uprawnień do eskalacji przywilejów (jak stworzenie nowego principal i powiązanie go z nową rolą).

References

Support HackTricks

Last updated