La cuenta de servicio no tiene acceso Storage.buckets.get al depósito de Google Cloud Storage

La cuenta de servicio no tiene acceso Storage.buckets.get al depósito de Google Cloud Storage

Estoy ejecutando Ansible con un servicio con la siguiente configuración que debería crear un depósito de almacenamiento en 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

que da el error

fatal: [localhost]: ¡FALLÓ! => {"cambiado": falso, "msg": "GCP devolvió error: {'error': {'código': 403, 'mensaje': '[correo electrónico protegido]no tiene acceso Storage.buckets.get al depósito de Google Cloud Storage.', 'errors': [{'message': '[correo electrónico protegido]no tiene acceso Storage.buckets.get al depósito de Google Cloud Storage.', 'dominio': 'global', 'razón': 'prohibido'}]}}"}

Entiendo el error pero he verificado los roles asignados a este usuario así

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.admindebería satisfacer el requisito ya que verifiqué elPágina de roles de IAM de Google Cloudque establece que este rol tiene el storage.buckets.*permiso.

¿No entiendo por qué sigo recibiendo el mismo error?

Respuesta1

Entiendo que algunos miembros de la comunidad te han ofrecido algunas soluciones para resolver tu problema, pero aparentemente ninguna ha sido útil para tu problema. Además, entiendo que estás usando GCP para crear la cuenta de servicio y asignar las funciones.

Tal vez pueda intentar crear la cuenta de servicio y los roles para la cuenta de servicio desde ansible y comprobar si funciona.

Puede crear la cuenta de servicio usando este complementogoogle.cloud.gcp_iam_service_account: crea una cuenta de servicio de GCP

Ejemplo:

- 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

Y puedes asignar los roles usando el complemento.google.cloud.gcp_iam_role: crea una función de GCP

Ejemplo:

- 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

Recuerde que estos complementos son parte delcolección google.cloud, que debe instalarse si está utilizando el paquete ansible.

información relacionada