Blog

Lösen Sie Probleme mit der Gcloud Terraform-Authentifizierung

Aktualisiert Oktober 21, 2025
3 Minuten

In diesem Blog möchte ich ein Problem schildern, auf das wir bei einem Kunden bei der Arbeit mit Google Cloud und Terraform gestoßen sind. Wir haben entdeckt, dass das Google SDK zwei verschiedene aktive Logins hat. Das ist auf den ersten Blick nicht ganz klar.

Benutzer ist nicht berechtigt

Um mit dem Problem zu beginnen, das wir hatten. Wir arbeiten mit einem Team von Mitarbeitern an einem Terraform-Projekt, um unsere Google Cloud-Umgebung bereitstellen zu können. Ein Kollege hat eine schöne Terraform-Konfiguration erstellt, die ich testen und mit der ich spielen wollte.

Bevor ich anfange, Dinge zur Konfiguration hinzuzufügen, wollte ich überprüfen, ob die Konfigurationsdatei noch die Google Cloud-Infrastruktur widerspiegelt:

  $ terraform plan

Dies führte zu dem folgenden Fehler:

Aktualisieren des Terraform-Status im Speicher vor dem Planen...
Der aktualisierte Status wird für die Berechnung dieses Plans verwendet, aber er wird nicht
beharrte auf  lokal  oder Remote-Status-Speicherung.

google_project.proj: Aktualisieren des Status...  (ID: projekt-x-1)
Fehler beim Aktualisieren des Status:  1  Fehler(s)  aufgetreten:

* google_project.proj:  1  Fehler(s)  aufgetreten:

* google_project.proj: google_project.proj: Fehler beim Lesen des Projekts  "Projekt-x-1": googleapi: Fehler 403: Benutzer ist nicht autorisiert., verboten

Verdammt, mal sehen, ob ich den Fehler mit den gcloud SDK-Befehlen reproduzieren kann.

  $ gcloud Projekte Liste
PROJECT_ID NAME PROJECT_NUMBER
projekt-x-1 Projekt x 123456789012
  $ gcloud Projekte beschreiben Projekt-x-1
createTime:  '2017-08-04T12:43:01.088Z'
lifecycleState: ACTIVE
Name: Projekt x
Elternteil:
  id:  '12345677889'
  Typ: Organisation
projectId: projekt-x-1
ProjektNummer:  '123456789012'

Das ist seltsam: Ich kann das Projekt mit dem gcloud SDK sehen, aber nicht mit terraform.

Nach einer Weile fand ein Kollege dies in der Google Cloud-Konsole:

Aktivität

Das ist seltsam, denn ich möchte mein GoDataDriven-Konto nicht für die Kundendaten verwenden.

Überprüfen wir meine Authentifizierung:

  $ gcloud auth list

  Berechtigte Konten
AKTIVES KONTO
*  

Um das aktive Konto festzulegen, führen Sie aus:
 $ gcloud config set account  </span>ACCOUNT<span class="sb">

Das scheint korrekt zu sein. Aber lassen Sie uns die Abmeldung und die erneute Anmeldung überprüfen.

  $ gcloud auth revoke
Widerrufene Berechtigungsnachweise:
  -  

  $ gcloud auth login
Ihr Browser wurde zum Besuch geöffnet:

 
https://accounts.google.com/o/oauth2/auth?redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&prompt=select_account...

WARNUNG: gcloud auth login schreibt nicht mehr die Standard-Anmeldeinformationen der Anwendung.
Wenn Sie ADC verwenden müssen, siehe:
 gcloud auth application-default --help

Sie sind jetzt eingeloggt als [].
Ihr aktuelles Projekt ist [None]. Sie können diese Einstellung ändern, indem Sie Folgendes ausführen:
 $ gcloud config set project PROJECT_ID 

Moment mal, was ist das WARNING??

Jetzt kommt der Affe aus dem Ärmel

Es scheint zwei verschiedene Authentifizierungssitzungen zu geben, die normal gcloud auth und gcloud auth application-default.

Die gcloud-Befehlszeile verwendet die erste, terraform die zweite.

Nachdem ich die Standardsitzung für die Anwendung widerrufen und mich erneut mit dem richtigen Konto angemeldet hatte, war der Himmel wieder blau.

  $ gcloud auth application-default revoke

Sie sind dabei, die Zugangsdaten zu widerrufen, die in:  [/Users/rvanweverwi   jk/.config/gcloud/application_default_credentials.json]

Möchten Sie fortfahren (J/N)? y

Berechtigungsnachweis widerrufen.
  $ gcloud auth application-default login
Ihr Browser wurde für einen Besuch geöffnet:

 
https://accounts.google.com/o/oauth2/auth?redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&prompt=select_account...

Anmeldeinformationen in Datei gespeichert:  [/Users/rvanweverwijk .config/gcloud/application_default_credentials.json]

Diese Anmeldedaten werden von jeder Bibliothek verwendet, die
Standard Credentials der Anwendung.

Contact

Let’s discuss how we can support your journey.