Estou executando o Ansible com um serviço com a seguinte configuração que deve criar um bucket de armazenamento no 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
O que dá o erro
fatal: [localhost]: FALHA! => {"changed": false, "msg": "GCP retornou erro: {'error': {'code': 403, 'message': '[e-mail protegido]não tem acesso storage.buckets.get ao bucket do Google Cloud Storage.', 'errors': [{'message': '[e-mail protegido]não tem acesso storage.buckets.get ao intervalo do Google Cloud Storage.', 'domain': 'global', 'reason': 'forbidden'}]}}"}
Entendo o erro, mas verifiquei as funções atribuídas a este usuário assim
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
deve satisfazer o requisito quando verifiquei oPágina de funções do Google Cloud IAMque afirma que esta função tem a storage.buckets.*
permissão.
Não entendo por que ainda recebo o mesmo erro?
Responder1
Entendo que alguns membros da comunidade ofereceram algumas soluções para resolver o seu problema, mas aparentemente nenhuma delas foi útil para o seu problema. Além disso, entendo que você está usando o GCP para criar a conta de serviço e atribuir as funções.
Talvez você possa tentar criar a conta de serviço e as funções da conta de serviço no ansible e verificar se funciona.
Você pode criar a conta de serviço usando este plugingoogle.cloud.gcp_iam_service_account – Cria uma conta de serviço do GCP
Exemplo:
- 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
E você pode atribuir as funções usando o plugingoogle.cloud.gcp_iam_role – Cria uma função do GCP
Exemplo:
- 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
Lembre-se de que esses plug-ins fazem parte docoleção google.cloud, que deve ser instalado se você estiver usando o pacote ansible.