我想向 Google Cloud pubsub 上的主题发布消息。但我收到一个 Error: 7 PERMISSION_DENIED
,我在本地主机上运行,试图发布到常规的 Cloud PubSub。
我实例化客户端并获取我想要发布的主题:
import { Encodings, PubSub } from '@google-cloud/pubsub';
import { readFileSync } from 'fs';
const client = new PubSub({
credentials: JSON.parse(
readFileSync(
'/Users/me/pubsub/publisher/mb-sandbox.json'
).toString()
)
});
const topic = client.topic('dummy_topic');
其中 mb-sandbox.json 是 pubsub 授权服务帐户的凭据。我还尝试设置和使用 $GOOGLE_APPLICATION_CREDENTIALS
env var。
但这似乎工作正常,因为我可以使用以下方法检索我的 gcp 项目的正确 ID:client.auth.getProjectId()
当我尝试发布消息(应遵循架构)时:
const DUMMY_MSG = {
type: 'CARD',
severity: 'INFO',
user_id: 2000,
text_content: 'TEST MESSAGE'
};
const dataBuffer = Buffer.from(JSON.stringify(DUMMY_MSG));
const messageId = await topic.publishMessage({ data: dataBuffer });
我收到一个错误:7 PERMISSION_DENIED:用户无权执行此操作。
如果我没记错的话,这就是 GRPC 上的 403 等效项。
{
code: 7,
details: 'User not authorized to perform this action.',
metadata: Metadata { internalRepr: Map(0) {}, options: {} },
note: 'Exception occurred in retry method that was not classified as transient'
}
我遵循了 GCP Nodejs 代码示例,我的服务帐户绝对得到认可并且有权在 Cloud PubSub 上发布。
任何帮助将不胜感激。
最佳答案
抱歉,我被困在这个问题上一天了,但我在发布问题后立即找到了方法......
已经有人解决了 here 。我必须针对我想要向其发送消息的主题专门向 pubsub 发布者服务帐户添加授权。
由于某种原因,从服务帐户面板设置角色不起作用,请从主题授权面板进行设置。
关于node.js - Google Pub/Sub 上的 GRPC 权限被拒绝 [错误 7],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72741308/