Blog
Wie man sich bei Google Cloud Platform mit der aktiven gcloud-Konfiguration in Go authentifiziert

Wenn Sie ein Kommandozeilenprogramm für Google Cloud Platform erstellen möchten, wäre es toll, wenn Sie sich mit der aktiven gcloud-Konfiguration authentifizieren könnten. Leider unterstützt keine der
Wie benutzt man es?
Es ist wirklich einfach. Sie importieren das Paket github.com/binxio/gcloudconfig und rufen Sie die Funktion GetCredentials auf, wie unten gezeigt:
package main
import "github.com/binxio/gcloudconfig"
func main() {
name := ""
credentials, err := gcloudconfig.GetCredentials(name)
...
}
Der Name gibt die Konfiguration an, die Sie verwenden möchten, oder die aktuell aktive Konfiguration, wenn diese nicht angegeben ist. Die Anmeldeinformationen können bei der Erstellung eines Service-Clients übergeben werden, wie unten gezeigt:
computeService, err := compute.NewService(ctx,
option.WithCredentials(credentials))
Wenn die Eigenschaft core/project festgelegt wurde, ist sie auch in den Anmeldeinformationen verfügbar:
project := credentials.ProjectId
Das ist alles, was es zu sagen gibt! Sehen Sie sich das vollständige Beispiel für die Verwendung der von gcloud konfigurierten Anmeldedaten an. Wenn Sie auf andere Einstellungen in der Konfiguration zugreifen möchten, verwenden Sie GetConfig.
Wie funktioniert das?
Die Funktion führt den Befehl gcloud config config-helper aus, der ein gcloud-Helfer für die Bereitstellung von Authentifizierungs- und Konfigurationsdaten für externe Tools ist. Sie gibt ein Zugriffstoken, ein id-Token, den Namen der aktiven Konfiguration und alle zugehörigen Konfigurationseigenschaften zurück:
configuration:
active_configuration: playground
properties:
core:
account: markvanholsteijn@binx.io
project: playground
...
credential:
access_token: ya12.YHYeGSG8flksArMeVRXsQB4HFQ8aodXiGdBgfEdznaVuAymcBGHS6pZSp7RqBMjSzHgET08BmH3TntQDOteVPIQWZNJmiXZDr1i99ELRqDxDAP8Jk1RFu1xew7XKeQTOTnm22AGDh28pUEHXVaXtRN8GZ4xHbOoxrTt7yBG3R7ff9ajGVYHYeGSG8flksArMeVRXsQB4HFQ8aodXiGdBgfEdznaVuAymcBGHS6pZSp7RqBMjSzHgET08BmH3TntQDOteVPIQWZNJmiXZDr1i99ELRqDxDAP8Jk1RFu1xew7XKeQTOTnm22AGDh28pUEHXVaXtRN8GZ4xHbOoxrTt7yBG3R7ff9ajGV
id_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI5OTk5OTk5OTk5OS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImF1ZCI6Ijk5OTk5OTk5OTk5LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwic3ViIjoiMTExMTExMTExMTEyMjIyMjIyMjIyMjIiLCJoZCI6InhlYmlhLmNvbSIsImVtYWlsIjoibWFya3ZhbmhvbHN0ZWlqbkBiaW54LmlvIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJScnhBVHRSaTE2TFNOSG1JdnZEWVdnIiwiaWF0IjoxNTg4NzAxNjgzLCJleHAiOjE1ODg3MDUyODN9.DWtAHSvWgXaW0zzoLf2MkiROS_DSS2Wf-k_HQj53g3I
token_expiry: '2020-05-05T19:01:22Z'
Wenn das Token abgelaufen ist, ruft die Bibliothek den Helfer erneut auf, um es zu aktualisieren. Beachten Sie, dass Google nicht sicher ist, ob der config-helper eine gute Sache ist. Wenn Sie gcloud config config-helper --help lesen, werden Sie den folgenden Satz bemerken:
Dieser Befehl ist ein internes Implementierungsdetail und kann sich ohne Ankündigung ändern oder verschwinden.
Für die Entwicklung von Kommandozeilenprogrammen, die sich in das Google Cloud SDK-Ökosystem integrieren, wäre es allerdings sehr praktisch, wenn Google einen offiziellen Weg zur Verfügung stellen würde, um die aktive gcloud-Konfiguration und die Anmeldedaten zu erhalten.
Fazit
Mit Hilfe dieser Bibliothek ist es möglich, ein Kommandozeilenprogramm in Go für die Google Cloud Platform zu erstellen, das sich in das gcloud-Ökosystem integriert. Es ist bedauerlich, dass der config-helper als flüchtige Schnittstelle dokumentiert ist. Angesichts der Einfachheit der Schnittstelle vertraue ich darauf, dass diese Bibliothek mit zukünftigen Änderungen zurechtkommt. Es wäre sogar noch besser, wenn Google offiziellen Support leisten würde.
Wir haben auch eine Bibliothek für die Authentifizierung mit gcloud-Anmeldeinformationen in Python erstellt.
Bild von Kerstin Riemer aus Pixabay
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



