Gcloud builds submit веб-сайта Django приводит к ошибке "does not have storage.objects.get access"

Я пытаюсь развернуть свой сайт Django с помощью Cloud Run, как описано в документации Google Cloud Platform, но получаю ошибку Error 403: 934957811880@cloudbuild.gserviceaccount.com does not have storage.objects.get access to the Google Cloud Storage object., forbidden при выполнении команды gcloud builds submit --config cloudmigrate.yaml --substitutions _INSTANCE_NAME=trouwfeestwebsite-db,_REGION=europe-west6.

Полный вывод команды: (ошибка находится внизу)

Creating temporary tarball archive of 119 file(s) totalling 23.2 MiB before compression.
Some files were not included in the source upload.

Check the gcloud log [C:\Users\Sander\AppData\Roaming\gcloud\logs\2021.10.23\20.53.18.638301.log] t
o see which files and the contents of the
default gcloudignore file used (see `$ gcloud topic gcloudignore` to learn
more).

Uploading tarball of [.] to [gs://trouwfeestwebsite_cloudbuild/source/1635015198.74424-eca822c138ec
48878f292b9403f99e83.tgz]
ERROR: (gcloud.builds.submit) INVALID_ARGUMENT: could not resolve source: googleapi: Error 403: 934957811880@cloudbuild.gserviceaccount.com does not have storage.objects.get access to the Google Cloud Storage object., forbidden

На уровне моего ведра хранения я предоставил 934957811880@cloudbuild.gserviceaccount.com разрешение Storage Object Viewer, как я вижу на https://cloud.google.com/storage/docs/access-control/iam-roles, что оно охватывает storage.objects.get доступ. Я также попробовал предоставить права Storage Object Admin и Storage Admin.

Я также добавил роль "Viewer" на уровне IAM (https://console.cloud.google.com/iam-admin/iam) для 934957811880@cloudbuild.gserviceaccount.com, как предложено в https://stackoverflow.com/a/68303613/5433896 и https://github.com/google-github-actions/setup-gcloud/issues/105, но мне кажется сомнительным давать учетной записи такую широкую роль.

Я разрешил Cloud run на вкладке Cloud Build permissons: https://console.cloud.google.com/cloud-build/settings/service-account?project=trouwfeestwebsite

После этих изменений я все еще получаю ту же ошибку при выполнении команды gcloud builds submit.

Я не понимаю, что я могу делать неправильно в плане полномочий/аутентификации (https://stackoverflow.com/a/68293734/5433896). Я не менял пароль своего аккаунта google и не отменял разрешения этого аккаунта на Google Cloud SDK с момента инициализации этого SDK.

Вы видите, что я упускаю?

Содержание моего cloudmigrate.yaml таково:

steps:
  - id: "build image"
    name: "gcr.io/cloud-builders/docker"
    args: ["build", "-t", "gcr.io/${PROJECT_ID}/${_SERVICE_NAME}", "."]

  - id: "push image"
    name: "gcr.io/cloud-builders/docker"
    args: ["push", "gcr.io/${PROJECT_ID}/${_SERVICE_NAME}"]

  - id: "apply migrations"
    name: "gcr.io/google-appengine/exec-wrapper"
    args:
      [
        "-i",
        "gcr.io/$PROJECT_ID/${_SERVICE_NAME}",
        "-s",
        "${PROJECT_ID}:${_REGION}:${_INSTANCE_NAME}",
        "-e",
        "SETTINGS_NAME=${_SECRET_SETTINGS_NAME}",
        "--",
        "python",
        "manage.py",
        "migrate",
      ]

  - id: "collect static"
    name: "gcr.io/google-appengine/exec-wrapper"
    args:
      [
        "-i",
        "gcr.io/$PROJECT_ID/${_SERVICE_NAME}",
        "-s",
        "${PROJECT_ID}:${_REGION}:${_INSTANCE_NAME}",
        "-e",
        "SETTINGS_NAME=${_SECRET_SETTINGS_NAME}",
        "--",
        "python",
        "manage.py",
        "collectstatic",
        "--verbosity",
        "2",
        "--no-input",
      ]

substitutions:
  _INSTANCE_NAME: trouwfeestwebsite-db
  _REGION: europe-west6
  _SERVICE_NAME: invites-service
  _SECRET_SETTINGS_NAME: django_settings

images:
  - "gcr.io/${PROJECT_ID}/${_SERVICE_NAME}"

Большое спасибо за любую помощь.

Следующая статья решила мою проблему.

  1. DazWilkin был прав, говоря, что "это неправильно|невозможно ссылаться на ведро" (комментарий upvote за это, спасибо!!). В моем .env я теперь установил:

GS_BUCKET_NAME=trouwfeestwebsite_sasa-trouw-bucket (ID проекта + подчеркивание + ID ведра хранения)

вместо GS_BUCKET_NAME=sasa-trouw-bucket

В то время как в учебнике указано, что я должен установить первое, я установил последнее, так как мне показалось странным разделение подчеркивания, нигде в учебнике я не видел ничего подобного, я подумал, что это ошибка в учебнике.

Адаптация GS_BUCKET_NAME изменила ошибку gcloud builds submit на:

Creating temporary tarball archive of 412 file(s) totalling 41.6 MiB before compression.
Uploading tarball of [.] to [gs://trouwfeestwebsite_cloudbuild/source/1635063996.982304-d33fef2af77
a4744a3bb45f02da8476b.tgz]
ERROR: (gcloud.builds.submit) PERMISSION_DENIED: service account "934957811880@cloudbuild.gservicea
ccount.com" has insufficient permission to execute the build on project "trouwfeestwebsite"
  1. Затем, казалось, что действительно существует проблема с разрешениями:
  • для полноты картины, после этого я попробовал добавить разрешения, как указано в https://stackoverflow.com/a/55635575/5433896, но это не предотвратило ошибку, о которой я сообщил в своем вопросе.

  • Однако этот ответ помог мне: https://stackoverflow.com/a/33923292/5433896. => Установка роли Editor на учетную запись службы cloudbuild помогла команде gcloud builds submit продолжить свой процесс дальше, не выдавая ошибку разрешений.

  1. Если у вас та же проблема: я думаю, что несколько вещей, упомянутых в моем вопросе, также могут помочь вам - например, я думаю, что сделать это также может быть важно:

Я разрешил Cloud run на вкладке Cloud Build permissons: https://console.cloud.google.com/cloud-build/settings/service-account?project=trouwfeestwebsite

.
Вернуться на верх