web-dev-qa-db-ja.com

GCP Deployment Manager:403にはstorage.buckets.getアクセスがありません

Deployment Managerを使用してバケットを作成しようとしていますが、Deploymentを作成しようとすると、次のエラーが発生します。

ERROR: (gcloud.deployment-manager.deployments.create) Error in Operation [operation-1525606425901-56b87ed1537c9-70ca4aca-72406eee]: errors:
- code: RESOURCE_ERROR
  location: /deployments/posts/resources/posts
  message: '{"ResourceType":"storage.v1.bucket","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"errors":[{"domain":"global","message":"[email protected]
    does not have storage.buckets.get access to posts.","reason":"forbidden"}],"message":"[email protected]
    does not have storage.buckets.get access to posts.","statusMessage":"Forbidden","requestPath":"https://www.googleapis.com/storage/v1/b/posts","httpMethod":"GET","suggestion":"Consider
    granting permissions to [email protected]"}}'

私が正しく理解していれば、デプロイメントマネージャーは(メッセージで説明されているように)サービスアカウントを使用して、実際にすべてのリソースを作成します。 IAMをチェックし、サービスロール([email protected])が「編集者」としてアクセスできることを確認し、さらに確実にするために「ストレージ管理者」(storage.buckets.getを含む)を追加しました。ただし、それでも同じエラーメッセージが表示されます。

間違ったIAMユーザーにアクセス許可を割り当てていますか/何が間違っていますか?


使用したコマンド:

gcloud deployment-manager deployments create posts --config posts.yml

私のデプロイメントテンプレート:

バケット.jinja

resources:
- name: {{ properties['name'] }}
  type: storage.v1.bucket
  properties:
    name: {{ properties['name'] }}
    location: europe-west1
    lifecycle:
      rule:
      - action:
          type: Delete
        condition:
          age: 30
          isLive: true
    labels:
      datatype: {{ properties['datatype'] }}
    storageClass: REGIONAL

posts.yml

imports:
  - path: bucket.jinja

resources:
- name: posts
  type: bucket.jinja
  properties:
    name: posts
    datatype: posts
6
Jan

コードをテストして成功しましたが、問題は、サービスアカウントに権限がない別のプロジェクトに属する別のユーザーが所有するバケットを作成/更新しようとしたことだと思います。

したがって、一意である可能性が高い名前を変更して再デプロイしてみて、これで問題が解決するかどうかをお知らせください。名前をかなり長く選択するか、すでにリスクが発生しているため、これは一部のシナリオで問題になる可能性があります。


通知バケットの名前を変更する必要があることに注意してください すべてのプロジェクトで一意 すべてのユーザーの名前。

これは過度の要件のように思われるかもしれませんが、静的なWebサイトを作成したり、標準のURLでファイルを参照したりすることができます。

  • https://storage.googleapis.com/nomebucket/folder/nomefile

トレースエラーから、これが問題であると私は信じています。あなたは存在せず、所有していないバケットを作成しようとしています。


通知サービスアカウントから権限を削除すると、しないサービスアカウントにバケットの電源がないことを通知するメッセージが表示されます。

[email protected] does not have storage.buckets.get access to posts.

しかし、代わりに、サービスアカウントにはプロジェクトの権限がないことを示すメッセージが表示されます。

Service account [email protected] is not authorized
    to take actions for project xxx. Please add [email protected]
    as an editor under project xxx using Google Developers Console

通知すでに所有しているバケットを作成しようとしても問題はありません。

$ gcloud deployment-manager deployments create posts22 --config posts.yml                                                                                             
The fingerprint of the deployment is xxx==
Waiting for create [operation-xxx-xxx-xxx-xxx]...done.
Create operation operation-xxx-xxx-xxx-xxx completed successfully.
NAME                  TYPE               STATE      ERRORS  INTENT
nomebuckettest4536  storage.v1.bucket  COMPLETED  []
5
GalloCedrone