我正在运行 Ansible 并采用以下配置的服务,该服务应该在 Google Cloud 上创建一个存储桶。
- name: "Create {{ environ.name }}-cluster-backups"
google.cloud.gcp_storage_bucket:
name: "zeipt-io-{{ environ.name }}-cluster-backups"
location: "{{ google_cloud.region }}"
storage_class: "NEARLINE"
lifecycle:
rule:
- condition:
age_days: 28
action:
type: "Delete"
project: "{{ google_cloud.project }}"
auth_kind: "{{ google_cloud.auth_kind }}"
service_account_file: "{{ google_cloud.service_account_file }}"
state: present
这给出了错误
致命:[localhost]:失败!=> {“changed”: false, “msg”: “GCP 返回错误:{'error': {'code': 403, 'message': '[电子邮件保护]没有对 Google Cloud Storage 存储桶的 storage.buckets.get 访问权限。', 'errors': [{'message': '[电子邮件保护]没有对 Google Cloud Storage 存储桶的 storage.buckets.get 访问权限。', 'domain': 'global', 'reason': 'forbidden'}]}}"}
我理解这个错误,但我已经检查了分配给该用户的角色,如下所示
gcloud projects get-iam-policy staging-environment --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:[email protected]"
ROLE
roles/owner
roles/storage.admin
roles/storage.objectAdmin
roles/storage.objectCreator
roles/storage.objectViewer
roles/storage.admin
应该满足要求,因为我检查了Google Cloud IAM 角色页面这表明该角色具有该storage.buckets.*
权限。
我不明白为什么我仍然会收到同样的错误?
答案1
我了解到社区的一些成员已经为您提供了一些解决方案来解决您的问题,但显然这些解决方案都对您的问题没有帮助。另外,我了解到您正在使用 GCP 创建服务帐户并分配角色。
也许您可以尝试从 ansible 创建服务帐户和服务帐户的角色,并检查是否有效。
您可以使用此插件创建服务帐户google.cloud.gcp_iam_service_account – 创建 GCP 服务帐户
例子:
- name: create a service account
google.cloud.gcp_iam_service_account:
name: sa-{{ resource_name.split("-")[-1] }}@graphite-playground.google.com.iam.gserviceaccount.com
display_name: My Ansible test key
project: test_project
auth_kind: serviceaccount
service_account_file: "/tmp/auth.pem"
state: present
您可以使用插件分配角色google.cloud.gcp_iam_role – 创建 GCP 角色
例子:
- name: create a role
google.cloud.gcp_iam_role:
name: myCustomRole2
title: My Custom Role
description: My custom role description
included_permissions:
- iam.roles.list
- iam.roles.create
- iam.roles.delete
project: test_project
auth_kind: serviceaccount
service_account_file: "/tmp/auth.pem"
state: present
请记住,这些插件是google.cloud 集合,如果您使用 ansible 包,则应该安装它。