Hinweise
Google Cloud CLI installieren
Sie müssen zuerst die Google Cloud-Befehlszeile installieren, um gcloud beta terraform vet verwenden zu können:
Installieren Sie die Google Cloud-Befehlszeile, aber überspringen Sie den Befehl
gcloud init.Führen Sie die folgenden Befehle aus, um die Komponente "terraform-tools" zu installieren:
gcloud components update gcloud components install terraform-toolsPrüfen Sie mit dem folgenden Befehl, ob die gcloud CLI installiert ist:
gcloud beta terraform vet --help
Erforderliche Berechtigungen abrufen
Das Google Cloud -Konto, das Sie für die Validierung verwenden, muss die folgenden Berechtigungen haben:
getIamPolicy:gcloud beta terraform vetmuss die vollständigen IAM-Richtlinien (Identity and Access Management) abrufen und sie mit Mitgliedern und Bindungen zusammenführen, um einen genauen Endzustand für die Validierung zu erhalten.resourcemanager.projects.get:gcloud beta terraform vetmuss die Projektherkunft von der API abrufen, um korrekt einen vollständigen CAI-Asset-Namen für alle Projekte zu erstellen, denen validierte Ressourcen zugeordnet sind.resourcemanager.folders.get:gcloud beta terraform vetmuss die Ordnerherkunft von der API abrufen, um korrekt einen vollständigen CAI-Asset-Namen zu erstellen, wenn die validierten Ressourcen ordnerbezogene Ressourcen enthalten.
Richtlinienbibliothek einrichten
Sie müssen eine Richtlinienbibliothek erstellen, um dieses Tool verwenden zu können.
Richtlinien prüfen
1. Terraform-Plan generieren
gcloud beta terraform vet ist mit Terraform 0.12+ kompatibel. gcloud beta terraform vet verwendet terraform plan-JSON als Eingabe. Sie können die JSON-Datei generieren, wenn Sie die folgenden Befehle in Ihrem Terraform-Verzeichnis ausführen:
terraform plan -out=tfplan.tfplan terraform show -json ./tfplan.tfplan > ./tfplan.json
2. Führen Sie gcloud beta terraform vet aus
Mit gcloud beta terraform vet können Sie Ihre terraform plan-JSON-Datei mit dem POLICY_LIBRARY_REPO Ihrer Organisation validieren. Beispiel:
git clone POLICY_LIBRARY_REPO POLICY_LIBRARY_DIR gcloud beta terraform vet tfplan.json --policy-library=POLICY_LIBRARY_DIR
Wenn Sie diesen Befehl ausführen, ruft gcloud beta terraform vet Projektdaten mithilfe von Google Cloud APIs ab, die für eine genaue Validierung Ihres Plans erforderlich sind.
Flags
--policy-library=POLICY_LIBRARY_DIR: Verzeichnis, das eine Richtlinienbibliothek enthält.--project=PROJECT_ID:gcloud beta terraform vetakzeptiert ein optionales--project-Flag. Dieses Flag gibt das Standardprojekt an, wenn die Herkunft aus der Google Cloud Ressourcenhierarchie für Ressourcen erstellt wird, für die kein explizites Projekt festgelegt wurde.--format=FORMAT: Der Standardwert ist YAML. Folgende Formate sind zulässig:default,json,none,text,yaml. Weitere Einzelheiten erhalten Sie durch Ausführen von $ gcloud topic formats.
Code und Ausgabe beenden
- Wenn alle Einschränkungen validiert sind, gibt der Befehl den Exit-Code 0 zurück und zeigt keine Verstöße an.
- Wenn Verstöße gefunden werden, gibt
gcloud beta terraform vetden Exit-Code 2 zurück und zeigt eine Liste der Verstöße an. Die JSON-Ausgabe könnte beispielsweise so aussehen:
[
{
"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:me@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:me@example.com",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID"
}
},
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"severity": "high"
}
]
CI/CD-Beispiel
Ein Bash-Skript zur Verwendung von gcloud beta terraform vet in einer CI/CD-Pipeline kann so aussehen:
terraform plan -out=tfplan.tfplan terraform show -json ./tfplan.tfplan > ./tfplan.json git clone POLICY_LIBRARY_REPO POLICY_LIBRARY_DIR VIOLATIONS=$(gcloud beta terraform vet tfplan.json --policy-library=POLICY_LIBRARY_DIR --format=json) retVal=$? if [ $retVal -eq 2 ]; then # Optional: parse the VIOLATIONS variable as json and check the severity level echo "$VIOLATIONS" echo "Violations found; not proceeding with terraform apply" exit 1 fi if [ $retVal -ne 0]; then echo "Error during gcloud beta terraform vet; not proceeding with terraform apply" exit 1 fi echo "No policy violations detected; proceeding with terraform apply" terraform apply
Entwickler können gcloud beta terraform vet auch lokal verwenden, um Terraform-Änderungen zu testen, bevor Sie Ihre CI/CD-Pipeline ausführen.