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.admin
deberí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.