GCP上的Terraform无法创建pubsub主题,声明权限被拒绝

时间:2017-10-08 04:34:44

标签: google-cloud-platform terraform

创建了一个服务用户来管理项目下的terraform并给它roles/owner。为这个terraform用户创建了密钥。

Terraform代码很简单:

resource "google_pubsub_topic" "my_topic" {
  name    = "my_topic"
  project = "${var.project_id}"
}

只创建一个pub-sub主题。

terraform plan有效,但是terraform apply给了我:

  

google_pubsub_topic.my_topic:googleapi:错误403:用户未被授权执行此操作。,禁止

我甚至尝试过提供服务帐户roles/pubsub.admin,因为我的服务帐户拥有与之关联的所有者角色但却无法创建pubsub主题,因此我不知道该怎么回事。

有人可以帮我解决这个问题吗?

提前致谢。

编辑(扩展我对哪些有用的评论): 我使用gcloud创建了服务帐户。

gcloud iam service-accounts create terraform \
  --display-name "Terraform admin account"

gcloud projects add-iam-policy-binding myproject-182220 \
 --member serviceAccount:terraform@myproject-182220.iam.gserviceaccount.com \
 --role roles/owner

gcloud iam service-accounts keys create terraform-admin.json \
 --iam-account terraform@myproject-182220.iam.gserviceaccount.com

要继续我的调试,我使用控制台/ GUI创建了一个新的服务帐户 - > API&服务 - >凭证 - >创建凭证 - >服务帐户密钥 - >新服务帐户(具有所有者角色)。使用这个新的服务密钥json文件,我能够毫无问题地运行我的terraform代码。

现在我的困惑是,为什么这样做有效,但是当我使用gcloud创建一个服务帐户并赋予它相同的角色时呢?

2 个答案:

答案 0 :(得分:0)

你必须通过谷歌云启用pub / sub api,或者可以使用terraform。

答案 1 :(得分:-1)

Google提供商的示例使用配置看起来更像:

// Configure the Google Cloud provider
provider "google" {
  credentials = "${file("account.json")}"
  project     = "my-gce-project"
  region      = "us-central1"
}

// Create a new instance
resource "google_compute_instance" "default" {
  # ...
}

这可以在Terraform的“Google Cloud Provider”文档page中更详细地阅读。