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

Terraform更新Google Pub/Sub订阅遇403权限错误,求排查建议

问题:Pub/Sub订阅更新时触发403权限错误

我用以下Terraform脚本创建了一个将数据推送到BigQuery的Google Pub/Sub订阅:

resource "google_pubsub_subscription" "my-subscription" {
  name              = "my-subscription"
  topic             = google_pubsub_topic.my_topic.name
  project           = module.my_project.project_id

  bigquery_config {
    table           = "my_dataset.my_table"
    write_metadata  = true
  }

  depends_on        = [
    google_bigquery_table_iam_member.pubsub_bq_data_editor,
    google_bigquery_table_iam_member.pubsub_bq_meta_viewer
  ]

  dead_letter_policy {
    dead_letter_topic = google_pubsub_topic.my_deadletter.id
    max_delivery_attempts = 10
  }
}

脚本执行正常,订阅已成功创建。之后我做了以下修改:

  • 将目标BigQuery表从my_dataset.my_table改为my_raw_dataset.my_table
  • 将Pub/Sub订阅者账号从默认服务账号改为自定义服务账号,并为其授予底层BigQuery表的权限
  • 将资源名称从my-subscription改为my_subscription,并通过terraform state rm和terraform import命令同步状态

部署修改时收到如下错误:

│ Error: Error updating Subscription "projects/my-project/subscriptions/my-subscription": googleapi: Error 403: The caller does not have permission
│ 
│   with google_pubsub_subscription.my_subscription,
│   on segment.pubsub.tf line 29, in resource "google_pubsub_subscription" "my_subscription":
│   29: resource "google_pubsub_subscription" "my_subscription" {

我已验证个人账号及Terraform使用的服务账号均拥有my-project项目的role/owner权限,求排查建议。

排查建议

  • 检查自定义服务账号的Pub/Sub权限:自定义服务账号除了BigQuery的权限,还需要Pub/Sub相关权限才能修改订阅。至少需要roles/pubsub.subscriber,如果要修改订阅配置,还需要roles/pubsub.editor或roles/pubsub.admin权限,确保这些权限已经正确授予。
  • 确认状态同步后的资源匹配:执行terraform state rm和import后,运行terraform state show google_pubsub_subscription.my_subscription查看输出,确认资源的项目ID、订阅名称和GCP控制台中的实际资源完全一致,避免因状态不匹配导致权限校验失败。
  • 核对新BigQuery表的权限配置:确认自定义服务账号对my_raw_dataset.my_table拥有roles/bigquery.dataEditor和roles/bigquery.metadataViewer权限,且权限作用范围是该表所在的项目(而非原表项目)。同时检查BigQuery数据集的权限规则是否限制了服务账号的访问。
  • 验证Terraform使用的服务账号身份:通过gcloud auth list或terraform providers命令确认Terraform当前使用的服务账号是预期的那个,避免因本地环境配置错误,误用了无权限的账号。
  • 检查死信主题的权限:修改订阅时,Terraform会重新验证死信主题的权限,确保自定义服务账号对my_deadletter主题拥有roles/pubsub.publisher权限,否则更新订阅时会触发权限错误。
  • 等待IAM权限生效延迟:GCP的IAM权限有时会有几分钟的同步延迟,修改权限后等待5-10分钟再尝试部署,排除因权限未及时生效导致的403错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:55:29