Ich führe Ansible mit einem Dienst mit der folgenden Konfiguration aus, der einen Speicher-Bucket in Google Cloud erstellen soll.
- 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
Das gibt den Fehler
fatal: [localhost]: FEHLGESCHLAGEN! => {"changed": false, "msg": "GCP hat den Fehler zurückgegeben: {'error': {'code': 403, 'message': '[email geschützt]hat keinen storage.buckets.get-Zugriff auf den Google Cloud Storage-Bucket.', 'errors': [{'message': '[email geschützt]hat keinen storage.buckets.get-Zugriff auf den Google Cloud Storage-Bucket.', 'domain': 'global', 'reason': 'forbidden'}]}}"}
Ich verstehe den Fehler, habe aber die diesem Benutzer zugewiesenen Rollen wie folgt überprüft:
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
sollte die Anforderung erfüllen, da ich dieGoogle Cloud IAM-Rollenseitewas besagt, dass diese Rolle die storage.buckets.*
Berechtigung hat.
Ich verstehe nicht, warum ich immer noch denselben Fehler erhalte.
Antwort1
Ich verstehe, dass einige Mitglieder der Community Ihnen einige Lösungen zur Lösung Ihres Problems angeboten haben, aber anscheinend war keine davon für Ihr Problem hilfreich. Ich verstehe auch, dass Sie GCP verwenden, um das Dienstkonto zu erstellen und die Rollen zuzuweisen.
Vielleicht können Sie versuchen, das Dienstkonto und die Rollen für das Dienstkonto von Ansible aus zu erstellen und prüfen, ob das funktioniert.
Sie können das Servicekonto mit diesem Plugin erstellengoogle.cloud.gcp_iam_service_account – Erstellt ein GCP-Servicekonto
Beispiel:
- 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
Und Sie können die Rollen mit dem Plugin zuweisengoogle.cloud.gcp_iam_role – Erstellt eine GCP-Rolle
Beispiel:
- 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
Denken Sie daran, dass diese Plugins Teil dergoogle.cloud-Sammlung, das installiert werden sollte, wenn Sie ein Ansible-Paket verwenden.