Terraform GCP - 等待设置使用导出存储桶时出错。:“gcp-bucket”需要“读取”权限

Posted

技术标签:

【中文标题】Terraform GCP - 等待设置使用导出存储桶时出错。:“gcp-bucket”需要“读取”权限【英文标题】:Terraform GCP - Error waiting for Setting usage export bucket.: Required 'read' permission for 'gcp-bucket' 【发布时间】:2020-10-23 07:41:00 【问题描述】:

我目前在通过 Terraform 创建 GCP 项目并设置 Compute Engine Usage Export 时收到上述错误消息。我的配置中部署它的部分是:

"google_project_usage_export_bucket": 
      "usage_export": 
        "project": "$google_project.project_name.project_id",
        "bucket_name": "gcp-bucket",
        "prefix": "test-export"
      
    

我用于部署项目的服务帐号已获得存储桶的“Storage Object Viewer”权限。 我不确定它还需要什么其他“读取”权限,因为它不够明确。

对此的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

请确保用于访问云存储的服务帐户是具有存储对象管理员角色的 Compute Engine 服务帐户“xxxxxxxxxxx-compute@developer.gserviceaccount.com”。 vm 实例的存储读取器的 API 范围应该是读/写的。 请使用文档 [1] https://cloud.google.com/container-registry/docs/access-control 获取存储桶的权限和角色。

还请提供与您的问题相关的更多详细信息,例如“gcp-bucket”存储桶的云控制台上的“权限”选项卡?

让我们通过将文件从您的 VM 实例导出到 GCS 来尝试一个简单的测试,看看这里是否存在任何 IAM 权限或 VM 范围问题。

1- 在 VM 实例中,运行“gcloud auth list”以验证服务帐户“xxxxxxxxxxx-compute@developer.gserviceaccount.com”是否存在且处于活动状态;如果不是,请运行“gcloud config”设置账号 xxxxxxxxxxx-compute@developer.gserviceaccount.com"

2- 如果它不存在,那么我们需要按照本文档 [2] https://cloud.google.com/sdk/gcloud/reference 使用他们自己的 .json 密钥将其添加到身份验证列表中/auth/activate-service-account ,然后你可以继续' gcloud config set account “ xxxxxxxxxxx-compute@developer.gserviceaccount.com”

3- 运行以下命令在 Cloud Shell 中创建示例文本文件:' echo "this is a sample file" > sample.txt '

4- 如果您不想使用“gcp-bucket”,可以创建另一个存储桶' gsutil mb -l us-central1 gs://test '

5-运行以下命令将文件复制到存储桶“gcp-bucket " gsutil cp sample.txt gs://gcp-bucket

6- 列出存储桶中的项目 'gsutil ls gs://YOURBUCKET'

这个想法是区分问题发生的位置:VM 实例、IAM、GCS。

【讨论】:

这就是答案 - 它需要存储对象管理员角色,即使错误消息只列出了它已经拥有的“读取”权限。非常感谢! :)

以上是关于Terraform GCP - 等待设置使用导出存储桶时出错。:“gcp-bucket”需要“读取”权限的主要内容,如果未能解决你的问题,请参考以下文章

使用 Terraformer\Terraform 克隆 GCP 项目

如何使用 Terraform 公开 gcp 云功能

使用 terraform 创建多个 GCP 存储桶

使用 Terraform 创建 GCP 自定义 IAM 角色

使用来自 GCP 市场的 terraform 创建实例

在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源