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”需要“读取”权限的主要内容,如果未能解决你的问题,请参考以下文章