In dieser Kurzanleitung wird gezeigt, wie Sie eine Einschränkung anwenden, die eine Domainbeschränkung erzwingt. Sie testen diese Einschränkung und geben dabei absichtlich einen Fehler aus. Anschließend ändern Sie die Einschränkung, damit Ihre Domain übergeben wird.
Hinweise
- Sie benötigen ein Google Cloud -Projekt.
Sie benötigen die folgenden IAM-Berechtigungen (Identity and Access Management) für dieses Projekt:
resourcemanager.projects.getIamPolicy– Diese Berechtigung kann mit der Rolle "Sicherheitsprüfer" für die Organisation gewährt werden.resourcemanager.projects.get– Diese Berechtigung kann mit der Rolle "Projektbetrachter" für die Organisation gewährt werden.
Für die ersten Schritte wird in dieser Anleitung Cloud Shell verwendet, das in Terraform vorinstalliert ist, sowie ein geklontes Repository für die Richtlinienbibliothek. In der Anleitung wird davon ausgegangen, dass Sie bereits ein Google Cloud -Konto haben.
Kurzanleitung
Rufen Sie Cloud Shell auf und klonen Sie die Richtlinienbibliothek.
Kopieren Sie die Beispieleinschränkung für IAM-Domains in das Verzeichnis
policies/constraints.cp samples/iam_service_accounts_only.yaml policies/constraintsPrüfen Sie die kopierte Einschränkung und geben Sie sie dazu im Terminal aus.
cat policies/constraints/iam_service_accounts_only.yamlSie erhalten folgende Ausgabe:
# This constraint checks that all IAM policy members are in the # "gserviceaccount.com" domain. apiVersion: constraints.gatekeeper.sh/v1alpha1 kind: GCPIAMAllowedPolicyMemberDomainsConstraintV2 metadata: name: service_accounts_only annotations: description: Checks that members that have been granted IAM roles belong to allowlisted domains. spec: severity: high match: target: # {"$ref":"#/definitions/io.k8s.cli.setters.target"} - "organizations/**" parameters: domains: - gserviceaccount.comBeachten Sie unten
gserviceaccount.com. Damit wird angegeben, dass nur Mitglieder aus der Domaingserviceaccount.comin einer IAM-Richtlinie vorhanden sein können.Zum Prüfen, ob die Richtlinie wie erwartet funktioniert, erstellen Sie die folgende Terraform-Datei
main.tfim aktuellen Verzeichnis. Zum Erstellen vonpolicy-library/main.tfkönnen Sie nano, vim oder den Cloud Shell-Editor verwenden.terraform { required_providers { google = { source = "hashicorp/google" version = "~> 3.84" } } } resource "google_project_iam_binding" "sample_iam_binding" { project = "PROJECT_ID" role = "roles/viewer" members = [ "user:EMAIL_ADDRESS" ] }Dabei gilt:
PROJECT_ID: Ihre Projekt-ID.EMAIL_ADDRESS: Eine Beispiel-E-Mail-Adresse. Dies kann eine beliebige gültige E-Mail-Adresse sein. Beispiel:user@example.com.
Initialisieren Sie Terraform und generieren Sie einen Terraform-Plan mit folgendem Befehl:
terraform initExportieren Sie den Terraform-Plan, wenn Sie dazu aufgefordert werden, und klicken Sie auf Autorisieren, wenn Sie dazu aufgefordert werden:
terraform plan -out=test.tfplanKonvertieren Sie den Terraform-Plan in das JSON-Format:
terraform show -json ./test.tfplan > ./tfplan.jsonInstallieren Sie die Terraform-Tools-Komponente:
sudo apt-get install google-cloud-sdk-terraform-toolsGeben Sie den folgenden Befehl ein, um zu prüfen, ob Ihr Terraform-Plan Ihren Richtlinien entspricht:
gcloud beta terraform vet tfplan.json --policy-library=. --format=jsonDa die in der IAM-Richtlinienbindung angegebene E-Mail-Adresse zu keinem Dienstkonto gehört, verstößt der Plan gegen die von Ihnen eingerichtete Einschränkung.
[ { "constraint": "GCPIAMAllowedPolicyMemberDomainsConstraintV2.service_accounts_only", "constraint_config": { "api_version": "constraints.gatekeeper.sh/v1alpha1", "kind": "GCPIAMAllowedPolicyMemberDomainsConstraintV2", "metadata": { "annotations": { "description": "Checks that members that have been granted IAM roles belong to allowlisted domains.", "validation.gcp.forsetisecurity.org/originalName": "service_accounts_only", "validation.gcp.forsetisecurity.org/yamlpath": "policies/constraints/iam_service_accounts_only.yaml" }, "name": "service-accounts-only" }, "spec": { "match": { "target": [ "organizations/**" ] }, "parameters": { "domains": [ "gserviceaccount.com" ] }, "severity": "high" } }, "message": "IAM policy for //cloudresourcemanager.googleapis.com/projects/PROJECT_ID contains member from unexpected domain: user:user@example.com", "metadata": { "ancestry_path": "organizations/ORG_ID/projects/PROJECT_ID", "constraint": { "annotations": { "description": "Checks that members that have been granted IAM roles belong to allowlisted domains.", "validation.gcp.forsetisecurity.org/originalName": "service_accounts_only", "validation.gcp.forsetisecurity.org/yamlpath": "policies/constraints/iam_service_accounts_only.yaml" }, "labels": {}, "parameters": { "domains": [ "gserviceaccount.com" ] } }, "details": { "member": "user:user@example.com", "resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID" } }, "resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID", "severity": "high" } ]
Wenn Sie eine andere Domain (Ihre E-Mail-Adresse) zulassen möchten, bearbeiten Sie
policy-library/policies/constraints/iam_service_accounts_only.yamlund hängen Sie Ihre E-Mail-Domain an die Zulassungsliste der Domains an. Im folgenden Beispiel wurdeexample.comhinzugefügt. Sie müssen aber die Domain für Ihre E-Mail-Adresse eingeben.apiVersion: constraints.gatekeeper.sh/v1alpha1 kind: GCPIAMAllowedPolicyMemberDomainsConstraintV1 metadata: name: service_accounts_only spec: severity: high match: target: ["organizations/**"] parameters: domains: - gserviceaccount.com - example.comPrüfen Sie Ihren Terraform-Plan jetzt noch einmal. Er sollte zu keinem Verstoß führen.
gcloud beta terraform vet tfplan.json --policy-library=. --format=jsonErwartete Ausgabe:
[]
Fehlerbehebung
Wenn Sie die Fehlermeldung "Error 403: The caller does not have permission, forbidden" erhalten, haben Sie entweder PROJECT_ID in policy-library/main.tf nicht durch den Namen Ihres Projekts ersetzt oder Sie haben nicht die erforderlichen Berechtigungen für das angegebene Projekt.
Nachdem Sie den Projektnamen und/oder die Berechtigungen bearbeitet haben (resourcemanager.projects.getIamPolicy und resourcemanager.projects.get), gehen Sie zurück, exportieren Sie den Terraform-Plan noch einmal und konvertieren Sie dann den Terraform-Plan in das JSON-Format.