サービス アカウントには、Google Cloud Storage バケットへの storage.buckets.get アクセス権がありません

サービス アカウントには、Google Cloud Storage バケットへの storage.buckets.get アクセス権がありません

私は、Google Cloud にストレージ バケットを作成する次の構成のサービスを使用して Ansible を実行しています。

- 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 ServiceAccount を作成します

例:

- 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 パッケージを使用している場合はインストールする必要があります。

関連情報