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}"
Большое спасибо за любую помощь.
Следующая статья решила мою проблему.
- 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"
- Затем, казалось, что действительно существует проблема с разрешениями:
для полноты картины, после этого я попробовал добавить разрешения, как указано в https://stackoverflow.com/a/55635575/5433896, но это не предотвратило ошибку, о которой я сообщил в своем вопросе.
Однако этот ответ помог мне: https://stackoverflow.com/a/33923292/5433896. => Установка роли
Editor
на учетную запись службы cloudbuild помогла команде gcloud builds submit продолжить свой процесс дальше, не выдавая ошибку разрешений.
- Если у вас та же проблема: я думаю, что несколько вещей, упомянутых в моем вопросе, также могут помочь вам - например, я думаю, что сделать это также может быть важно:
Я разрешил Cloud run на вкладке Cloud Build permissons: https://console.cloud.google.com/cloud-build/settings/service-account?project=trouwfeestwebsite
.