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
相关产品推荐
相关产品推荐

