Maison  >  Article  >  développement back-end  >  Impossible de signer l'URL GCS à l'aide de la connexion par défaut de gcloud

Impossible de signer l'URL GCS à l'aide de la connexion par défaut de gcloud

WBOY
WBOYavant
2024-02-08 21:21:281213parcourir

无法使用 gcloud 默认登录名签署 GCS 网址

L'éditeur PHP Zimo peut rencontrer un problème lors de l'utilisation de gcloud, c'est-à-dire qu'il ne peut pas utiliser le nom de connexion par défaut pour signer l'URL GCS. Ce problème peut prêter à confusion, mais nous pouvons trouver une solution. Dans cet article, nous expliquerons comment résoudre ce problème afin que vous puissiez utiliser gcloud avec succès pour signer les URL GCS. Que vous soyez débutant ou développeur expérimenté, cet article vous apportera des solutions claires et concises. Nous allons jeter un coup d'oeil!

Contenu de la question

Je développe un backend Golang et j'utilise cloud.google.com/go/storage 库与我们的 gcs 实例进行通信。目前,我正在使用这个库来签署 url 并将媒体上传到我们的实例。但是,我想避免下载服务帐户密钥文件并出于本地开发目的显式设置 google_application_credentials des variables d'environnement. Pour y parvenir, j'ai fourni les informations d'identification de l'utilisateur pour adc conformément à la documentation de référence.

Le téléchargement de médias fonctionne correctement avec la nouvelle configuration adc. Cependant, lorsque vous essayez de signer l'URL en utilisant l'extrait de code suivant :

u, err := client.bucket(bucket).signedurl(object, &storage.signedurloptions{
        method:  http.methodget,
        expires: time.now().add(365 * 24 * time.hour),
    })

J'ai reçu un message d'erreur :

storage: unable to detect default GoogleAccessID: storage: empty client email in credentials

Ce message d'erreur prête à confusion car je me suis authentifié en utilisant gcloud auth application-default login avant d'exécuter le code. Quel pourrait être le problème ici et comment puis-je le résoudre ?

Modifier : J'ai essayé d'ajouter l'indicateur --impersonate-service-account pour pointer vers le compte de service disposant des autorisations de création de jetons, mais cela ne semble pas fonctionner non plus. --impersonate-service-account 标志,指向具有令牌创建权限的服务帐户,但这似乎也不起作用。

解决方法

显然,这个问题在最新版本的 cloud.google.com/go/storage 中得到了解决(我在 GitHub 讨论中读到了相关内容,但由于某种原因无法再找到链接)。您必须将服务帐户附加到签名 URL,并且该库现在能够获取与模拟关联的 GoogleAccessID。升级到 v1.29.0 并使用 gcloud auth application-default login --impersonate-service-account=a172055c20f3b3671523e8c61e57bc2a

Solution de contournement🎜🎜Apparemment, ce problème est résolu dans la dernière version de cloud.google.com/go/storage (j'en ai entendu parler dans la discussion GitHub, mais pour une raison quelconque, le lien ne peut plus être trouvé). Vous devez ajouter un compte de service à l'URL signée et la bibliothèque peut désormais obtenir le GoogleAccessID associé à l'usurpation d'identité. Après la mise à niveau vers v1.29.0 et l'authentification à l'aide de gcloud auth application-default login --impersonate-service-account=a172055c20f3b3671523e8c61e57bc2a, tout semble fonctionner correctement. Assurez-vous que votre compte utilisateur dispose du rôle « Créateur de jeton de compte de service » attribué sous le compte de service. 🎜

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