You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform部署GCP带死信功能的Pub/Sub订阅告警找不到对应服务账号

GCP Pub/Sub死信订阅告警与缺失服务账号问题解决步骤

1. 确认服务账号存在性

Pub/Sub专属服务账号属于Google托管服务账号,默认不会在IAM服务账号列表的「用户自定义」分类下展示,你需要先调整IAM页面的显示配置:

  • 进入IAM页面,点击右上角「查看选项」
  • 勾选「包含Google提供的角色授予」、「显示Google托管的服务账号」后刷新页面,再搜索对应格式的账号
    也可以通过gcloud命令直接验证账号是否存在:
    gcloud projects get-iam-policy <你的项目ID> --filter="bindings.members:serviceAccount:<你的项目编号>@gcp-sa-pubsub.iam.gserviceaccount.com"
    如果命令无返回结果,说明服务账号尚未创建。

2. 手动创建Pub/Sub托管服务账号

该服务账号会在Pub/Sub API首次启用时自动生成,执行以下命令启用API即可触发账号创建:
gcloud services enable pubsub.googleapis.com --project <你的项目ID>
命令执行完成后等待2-3分钟,再按步骤1的方法即可查看到对应服务账号。

3. 配置服务账号所需权限

死信投递功能要求Pub/Sub托管服务账号具备两项权限,你可以直接在Terraform中补充对应IAM绑定配置即可:

variable "project_number" {
  type = string
  description = "GCP项目的数字编号,可在项目首页获取"
}

# 授予服务账号死信主题的发布权限,用于投递无法消费的消息
resource "google_pubsub_topic_iam_binding" "dlq_publisher" {
  topic  = google_pubsub_topic.your_dlq_topic.name # 替换为你的死信主题资源名
  role   = "roles/pubsub.publisher"
  members = [
    "serviceAccount:${var.project_number}@gcp-sa-pubsub.iam.gserviceaccount.com"
  ]
}

# 授予服务账号原订阅的消费权限,用于确认需要转死信的消息
resource "google_pubsub_subscription_iam_binding" "origin_sub_subscriber" {
  subscription = google_pubsub_subscription.your_subscription.name # 替换为你的原订阅资源名
  role         = "roles/pubsub.subscriber"
  members = [
    "serviceAccount:${var.project_number}@gcp-sa-pubsub.iam.gserviceaccount.com"
  ]
}

配置执行后等待5-10分钟,告警会自动消除。

4. 功能验证

你可以向原主题推送一条测试消息,手动触发消费失败,验证消息是否能正常投递到死信主题,确认功能正常。

内容的提问来源于stack exchange,提问作者tmp dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:48:03