Maison  >  Article  >  développement back-end  >  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) ?

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
WBOYavant
2024-02-09 08:21:12644parcourir

如何使用上传(未生成)的服务帐户密钥向 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

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>

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>",
}

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"`
}

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))

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer