如何使用个人 (gcloud) 凭据发布到 PubSub

     2023-02-16     98

关键词:

【中文标题】如何使用个人 (gcloud) 凭据发布到 PubSub【英文标题】:How to publish to PubSub using personal (gcloud) credentials 【发布时间】:2020-06-22 02:35:19 【问题描述】:

我正在尝试使用与 gcloud CLI 相同的凭据向 GCP PubSub 发布消息,但没有取得很大成功。

我可以通过以下方式确认我可以发布到某个主题

gcloud pubsub topics publish myTopic --project "myProject" --message "Hello World!"

但是,当我使用下面的代码尝试使用与 gcloud 完全相同的凭据时

creds, err := google.FindDefaultCredentials(context.Background())
if err != nil 
    panic(fmt.Sprintf("Unable to retrieve default credentials: %v", err))

client, err := pubsub.NewClient(ctx, "myproject", option.WithCredentials(creds))
if err != nil 
    panic(fmt.Sprintf("unable to create GCP storage client: %v", err))

topic := client.Topic("myTopic")
r := topic.Publish(ctx, &pubsub.Message
    Data: []byte("Hello World!"),
)
_, err = r.Get(ctx)
if err != nil 
    panic(fmt.Sprintf("failed to publish message: %v", err))

我收到以下错误消息

panic: failed to publish message: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: 400 Bad Request
Response: 
  "error": "invalid_grant",
  "error_description": "Bad Request"

我还尝试直接加载 json 文件,以确保它没有在某处获取其他默认凭据,但出现相同的错误。

如何使用与 gcloud CLI 相同的凭据发布到我有权访问的 pubsub 主题?

【问题讨论】:

您在 CLI 中加载的凭据是什么?你是怎么做到的? 我需要登录 gcloud 已经有一段时间了,但我相信它使用的是南流,gcloud 打开一个 Web 浏览器,我登录浏览器,然后它在本地存储一个令牌。从那以后我再也不需要登录 gcloud 好的,知道了。我发布了一个答案,它应该可以工作 【参考方案1】:

您是否尝试过模拟服务帐户选项? [1] 也许这就是您正在寻找的。希望对您有所帮助...

[1]https://cloud.google.com/sdk/gcloud/reference#--impersonate-service-account

【讨论】:

【参考方案2】:

您需要在 Go 脚本中使用 set up authentication。默认情况下,它将使用与您运行代码的环境中存在的凭据相同的凭据。

这是在创建存储桶时使用默认凭据设置新客户端的示例:

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "cloud.google.com/go/storage" 


func main() 
    ctx := context.Background()

    // Sets your Google Cloud Platform project ID.
    projectID := "YOUR_PROJECT_ID"

    // Creates a client.
    client, err := storage.NewClient(ctx)
    if err != nil 
            log.Fatalf("Failed to create client: %v", err)
    

因此,在您的代码中试试这个:

ctx := context.Background()
client := pubsub.NewClient(ctx)

【讨论】:

我不明白你的意思。您的代码只是创建了一个新的存储客户端。除了创建 PubSub 客户端外,我也在做同样的事情。您的链接中描述的身份验证部分谈到了创建一个我不想做的服务帐户。显然,可以像 gcloud 那样使用我自己的凭据,而无需我创建服务帐户。也许我误解了你的意思? 我修改了我的答案以更具体。希望对您有所帮助!【参考方案3】:

当我配置本地环境时,我正在这样做

运行命令:gcloud auth application-default login 单击链接并分配 Google 身份验证库

命令的结果应该是这样的

Credentials saved to file: [/path/to/application_default_credentials.json]

These credentials will be used by any library that requests Application Default Credentials (ADC).
复制/path/to/application_default_credentials.json 使用该值创建环境变量GOOGLE_APPLICATION_CREDENTIALS。在linux中:export GOOGLE_APPLICATION_CREDENTIALS=/path/to/application_default_credentials.json

现在,您的个人凭据也被定义为在本地环境中运行的应用的默认凭据。

【讨论】:

Gcloud pub/sub 忽略配置?

...中有项目A和项目B。我将配置设置为项目A,但是当我尝试使用依赖pub/sub的python脚本时,在项目B中查找订阅,然后出现此错误:google.cloud.exceptions.NotFound:404projects/PROJECT_B/ 查看详情

使用nodejs gcloud上传到bigquery时如何启用错误

】使用nodejsgcloud上传到bigquery时如何启用错误【英文标题】:howtoenableerrorswhenuploadingtobigqueryusingnodejsgcloud【发布时间】:2016-07-1713:57:25【问题描述】:使用bigqueryUI,我可以选择通过检查来启用错误Numberoferrorsallowed现在当我在nodejs... 查看详情

如何在注册过程中获取多个谷歌凭据(Gmail API、Pub/Sub、联系人)

】如何在注册过程中获取多个谷歌凭据(GmailAPI、Pub/Sub、联系人)【英文标题】:Howtogetmultiplegooglecredentials(GmailAPI,Pub/Sub,Contacts)duringsignupprocess【发布时间】:2018-09-2108:54:30【问题描述】:我正在开发一个基于Python的项目,该项... 查看详情

设置 pub-sub 库 http 客户端的超时时间

...服务在启动时会在GoogleCloud中创建一些Pub-Sub主题。我正在使用我的个人凭据连接到Google的服务(我没有使用pub-sub模拟器)。但是,似乎用户凭据对允许他们使用的API的使用有很大的限制 查看详情

如何更改 gcloud 中的活动配置文件?

】如何更改gcloud中的活动配置文件?【英文标题】:Howtochangetheactiveconfigurationprofileingcloud?【发布时间】:2016-06-1504:03:23【问题描述】:我已经使用命令创建了一个新的配置文件:gcloudinit现在我不知道如何切换到旧配置文件而不... 查看详情

如何使用命令行的凭据将配置文件发布到 IIS?

】如何使用命令行的凭据将配置文件发布到IIS?【英文标题】:HowtopublishaprofiletoIISwithcredentialsfromcommandline?【发布时间】:2019-05-0123:07:46【问题描述】:我有一个.NETCore2.2Web项目,我想通过命令行将它发布到不同服务器上的IIS。... 查看详情

将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用

...描述】:我按照thisanswer使用GitCredentialManager,但我找不到如何使用多个个人访问令牌(PAT)的方法。我有Windowsterminal要点https://gi 查看详情

使用 gcloud 服务帐户登录到 Firebase

】使用gcloud服务帐户登录到Firebase【英文标题】:Logintofirebaseusinggcloudserviceaccount【发布时间】:2020-03-2201:09:55【问题描述】:我已将功能部署到gcloud功能,我想配置CI/CD以从gitlab部署此功能。要从gitlab执行任何操作,我需要使用... 查看详情

如何阻止某人更改 gcloud 配置文件?

】如何阻止某人更改gcloud配置文件?【英文标题】:HowcanIstopsomeonefromchangingthegcloudprofile?【发布时间】:2022-01-1819:59:15【问题描述】:多个用户将使用相同的用户名登录到相同的计算引擎。如何阻止任何人更改gcloud配置,例如帐... 查看详情

Google Pub/Sub 如何在 Pull 上设置读取超时

】GooglePub/Sub如何在Pull上设置读取超时【英文标题】:GooglePub/SubHowtosetreadtimeoutonPull【发布时间】:2016-03-0218:26:06【问题描述】:我想为订阅设置拉取请求的读取超时。现在唯一的选择是设置returnImmediately=true或者只是等到pubsub返... 查看详情

将标头添加到 gcloud 创建订阅推送命令

...tionpushcommand【发布时间】:2020-01-0601:53:08【问题描述】:如何在使用gcloud命令创建推送订阅时添加标头授权。这个我试过了if[$(gcloudpubsubsubscriptionslist--filter="name:subscriptions/$ENVIRONMENT_NAM 查看详情

Java 应用程序找不到访问 GCP Pub/Sub 的凭据

...【发布时间】:2019-12-0601:36:25【问题描述】:我正在尝试使用GCPJavaSDK使用以下代码向Pub/Sub主题发送消息(在此sn-p中用占位符替换了实际项目ID和主题名称):Publisherpublisher=null;ProjectTopi 查看详情

找不到默认凭据

...发布时间】:2017-05-2108:18:38【问题描述】:我正在gcloud上使用Google容器引擎。所以在成功完成gloudinit之后,我按照说明做了:gcloudcontainerclustersget-credentialscluster-1--zoneeurope-west1-c--projectwhatever然后:kubect 查看详情

如何将 blob 文件发布到 GCP Pub/Sub?

】如何将blob文件发布到GCPPub/Sub?【英文标题】:HowtopublishablobfiletoGCPPub/Sub?【发布时间】:2021-11-0805:58:13【问题描述】:目前,我正在使用java将消息和数据发布到pub/sub。我想知道如何将blob文件发布到pub/sub服务?@PostMapping(value="... 查看详情

如何在 Node.js 中将文件上传到 GCloud?

】如何在Node.js中将文件上传到GCloud?【英文标题】:HowtouploadfilestotheGCloudinNode.js?【发布时间】:2017-05-0500:46:51【问题描述】:我看到了什么:IntegratewithGoogleCloudPlatformUploadfilestoFirebaseStorageusingNode.js想法:我目前将图像存储在本... 查看详情

如何从 Dataflow 批量(有效)发布到 Pub/Sub?

】如何从Dataflow批量(有效)发布到Pub/Sub?【英文标题】:HowtopublishtoPub/SubfromDataflowinbatch(efficiently)?【发布时间】:2021-06-2313:19:24【问题描述】:感谢DataflowJob在批处理模式下,我想将消息发布到具有某些属性的Pub/Sub主题。我的... 查看详情

如何使用依赖项通过 JAVA 客户端将消息发布到 Cloud Pub/Sub?

】如何使用依赖项通过JAVA客户端将消息发布到CloudPub/Sub?【英文标题】:HowtopublishmessagestoCloudPub/SubviatheJAVAClientusingadependency?【发布时间】:2021-12-1022:13:42【问题描述】:我在maven包中编写了以下方法:publicstaticvoidpublishMessage(Publ... 查看详情

如何在 gcloud 中使用多个服务帐户?

】如何在gcloud中使用多个服务帐户?【英文标题】:Howtousemultipleserviceaccountswithgcloud?【发布时间】:2017-12-0220:36:55【问题描述】:我有两个GoogleCloud服务帐号;我的两个项目各有一个。#ACCOUNTSeditor@someproj-1.iam.gserviceaccount.comeditor@s... 查看详情