2017-10-08 14 views
0

创建服务用户以管理该项目下的terraform并将其授予roles/owner。为这个terraform用户创建了关键字。GCP上的Terraform未能创建pubsub主题,声明权限被拒绝

Terraform代码很简单:

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

只创建一个发布 - 订阅话题。

terraform plan的作品,但terraform申请给我:

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:[email protected] \ 
--role roles/owner 

gcloud iam service-accounts keys create terraform-admin.json \ 
--iam-account [email protected] 

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

现在我的困惑是,为什么这个工作,但不是当我用gcloud创建一个服务帐户,并赋予它相同的角色?

+0

你可以运行'gcloud'创建这个主题吗?我想你会得到同样的错误。仔细检查你是否获得了正确的许可。 – BMW

+0

我没有问题与我的用户帐户运行gcloud并创建主题。我不确定我如何使用gcloud和服务帐户凭证。我显然可以在Python或其他东西中使用服务帐户来创建pubsub,看看我是否得到相同的错误。我的用户帐户在项目上也具有“所有者”角色,与服务帐户相同 – Amit

+0

我尝试使用拥有者角色创建具有相同服务帐户的其他资源,但仍然拒绝了权限。我不确定我需要做些什么来创建一个服务帐户,我可以使用这个帐户来创建terraform资源。 – Amit

回答

-1

为谷歌提供的样品使用配置看上去更像是:

// 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“谷歌云供应商”的文件page读取。

+0

新创建的帐户这根本不回答问题。 – Amit