Maison > développement back-end > Golang > le corps du texte

Comment puis-je m'authentifier auprès de GCP à l'aide d'une clé de compte de service téléchargée (non générée) ?

WBOY
Libérer: 2024-02-09 08:21:12
avant
612 Les gens l'ont consulté

如何使用上传(未生成)的服务帐户密钥向 GCP 进行身份验证?

l'éditeur php Strawberry vous présentera en détail comment utiliser la clé de compte de service téléchargée pour authentifier Google Cloud Platform (GCP). L'authentification est une étape très importante dans le processus d'utilisation de GCP, et la clé du compte de service est la clé de l'authentification. Cet article vous expliquera comment télécharger la clé du compte de service et l'authentifier correctement afin que vous puissiez utiliser en douceur diverses fonctions et services de GCP. Que vous soyez nouveau sur GCP ou que vous ayez une certaine expérience, cet article vous fournira des conseils et des astuces utiles pour vous assurer que vous pouvez terminer facilement le processus d'authentification. En lisant cet article, vous découvrirez les étapes et les considérations liées au téléchargement des clés de compte de service, ainsi que la manière d'utiliser correctement ces clés pour l'authentification dans GCP.

Contenu de la question

J'écris un service qui nécessite que différents locataires accèdent aux services GCP. Mes microservices fonctionneront sur différents hôtes (pas de GCP). L'une des limitations auxquelles je suis confronté est l'utilisation d'une clé de compte de service pour autoriser les appels API. La deuxième contrainte est que mon microservice est chargé de générer la bi-clé du compte de service et de partager la clé publique avec les locataires afin qu'ils puissent la télécharger sur leur compte de service.

Mon problème actuel est que je ne trouve aucune documentation expliquant comment s'authentifier auprès de la bibliothèque GCP Golang à l'aide de la paire de clés dont je dispose. Toute la documentation que j'ai lue traite toujours de l'authentification par clé de compte de service, en supposant que vous laisserez GCP générer la paire de clés pour vous et que vous disposez déjà d'un fichier json avec tous les détails dont vous avez besoin.

Documents que j'ai examinés :

- https://cloud.google.com/docs/authentication/client-libraries#adc
- https://cloud.google.com/docs/authentication#service-accounts
- https://cloud.google.com/docs/authentication/provide-credentials-adc#local-key
- https://github.com/GoogleCloudPlatform/golang-samples/blob/main/auth/id_token_from_service_account.go
Copier après la connexion

Google Libraries utilise un mécanisme appelé « Application Default Credentials » qui permet à toutes ses bibliothèques de trouver des informations d'identification pour l'authentification. Plus précisément, dans ce cas, l'ADC nécessite toujours le fichier json pour obtenir les détails des informations d'identification.

Le fichier

json ressemble à ceci :

<code>{
    "type": "service_account",
    "project_id": "my-project",
    "private_key_id": "1ed3aae07f98f3e6da78ad308b41232133d006cf",
    "private_key": "-----BEGIN PRIVATE KEY-----\n...==\n-----END PRIVATE KEY-----\n",
    "client_email": "<EMAIL HERE>",
    "client_id": "1234567890102",
    "auth_uri": "<GOOGLE AUTH URI HERE>",
    "token_uri": "<GOOGLE TOKEN URI HERE>",
    "auth_provider_x509_cert_url": "<SOME GOOGLE URL HERE>",
    "client_x509_cert_url": "<MORE GOOGLE URL HERE>",
    "universe_domain": "googleapis.com"
}
</code>
Copier après la connexion

Ma question est donc la suivante : comment puis-je créer ce fichier json à partir de la paire de clés générée ? Si cela n'est pas possible (limitation GCP), pourquoi puis-je télécharger la paire de clés ? Quelqu'un peut-il me donner un exemple pour m'aider à résoudre cette situation ?

Toute aide est grandement appréciée

J'ai examiné toute la documentation officielle de GCP, les références d'API et les exemples de scripts Github. Aucun d'entre eux n'a fait référence à la clé du compte de service téléchargée

Solution de contournement

Il a fallu un certain temps pour revenir sur ce problème. Grâce à la réponse de @guillaume-blaquiere, j'ai commencé à tester avec le minimum de fichiers requis.

J'ai finalement trouvé ceci :

{
  "type": "service_account",
  "private_key": "<Your generated private_key.pem>",
  "client_email": "<service account email>",
}
Copier après la connexion

Ce sont les propriétés minimales requises par le SDK Google pour réussir l'authentification auprès de GCP

La clé privée doit être la même que celle utilisée pour générer la clé publique téléchargée sur le compte de service GCP.

En termes de code Golang, vous pouvez mettre ces informations dans une structure puis analyser la structure en json :

type JSONFile struct {
  Type     string `json:"type"`
  PrivKey  []byte `json:"private_key"`
  Email    string `json:"client_email"`
}
Copier après la connexion

Puis :

file := JSONFile{
    Type:        "service_account",
    PrivKey:  "<PK bytes here>",
    Email: "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="7d0e180f0b141e18501c1e1e120813095018101c14113d1a1e0d531e1210">[email&#160;protected]</a>",
}
result, err := json.Marshal(file)
if err != nil {
    panic(1)
}
credentials, err := google.CredentialsFromJSON(context.Background(), result, secretmanager.DefaultAuthScopes()...)
if err != nil {
    panic(1)
}
projectsClient, err := resourcemanager.NewProjectsClient(context.Background(), option.WithCredentials(credentials))
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!