服务帐号没有对 Google Cloud Storage 存储桶的 storage.buckets.get 访问权限

服务帐号没有对 Google Cloud Storage 存储桶的 storage.buckets.get 访问权限

我正在运行 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 包,则应该安装它。

相关内容