创建了一个服务用户来管理项目下的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创建一个服务帐户并赋予它相同的角色时呢?
答案 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中更详细地阅读。