Сбой развертывания облачных функций GCP из-за ошибки ArtifactRegistry

Получаю действительно странную ошибку, когда пытаюсь развернуть свою облачную функцию в конкретном проекте. я бегу

gcloud config set project <project>
gcloud functions deploy my_cf --entry-point start_process \
--gen2 \
--trigger-http \
--region europe-west1 \
--runtime python310 \
--service-account <service account name>@<project>.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--source=./CloudFunction/

И моя учетная запись службы имеет, как я предполагаю (на основе документации), необходимые разрешения, а также некоторые:

Artifact Registry Administrator
Cloud Functions Admin
Cloud Run Admin
Eventarc Event Receiver
Eventarc Service Agent
Pub/Sub Publisher
Service Account Token Creator
Storage Admin

Однако я продолжаю получать ошибку

OperationError: code=13, message=Build failed with status: FAILURE and message: An unexpected error occurred. Refer to build logs: https://console.cloud.google.com/cloud-build/builds;region=europe-west1/<build_id>?project=<project_number>

И когда я проверяю журналы сборки облака, я вижу ошибку с сообщением:

"Step #2 - "build": ERROR: failed to create image cache: accessing cache image 
"europe-west1-docker.pkg.dev/<project>/gcf-artifacts/my--cf/cache:latest": 
connect to repo store "europe-west1-docker.pkg.dev/<project>/gcf-artifacts/<my--cf>/cache:latest": 
GET https://europe-west1-docker.pkg.dev/v2/token?scope=repository%3A<project>%2Fgcf-artifacts%2Fmy--cf%2Fcache%3Apull&service=: 
DENIED: Permission "artifactregistry.repositories.downloadArtifacts" 
denied on resource "projects/<project>/locations/europe-west1/repositories/gcf-artifacts" 
(or it may not exist)"

Я пробовал изменить разрешение как для себя, так и для учетной записи службы, но, похоже, ничего не имеет значения. Кроме того, я выполнял это упражнение в других проектах, и у меня не было этой проблемы. Есть идеи, что не так?

Я подозреваю (!), что проблема связана с учетной записью службы Cloud Build (!), а не с вашей (!?) учетной записью службы. Вы можете идентифицировать учетную запись службы Cloud Build с помощью NUMBER=$(gcloud projects describe ${PROJECT} --format = "value(projectNumber)"), а затем перечислить ее роли с помощью gcloud projects get-iam-policy ${PROJECT} --flatten = "bindings[].members" --filter = "bindings.members:${NUMBER}@cloudbuild.gserviceacco‌​unt.com" --format = "value(bindings.role)", а затем проверить, включено ли разрешение (!) artifactregistry.repositories.downloadArtifacts.

DazWilkin 20.07.2024 18:19

@DazWilkin, у этой учетной записи уже была роль cloudbuild.builds.builder, которая включает вышеуказанное разрешение. Я изучил детали выполнения сборки и обнаружил, что она использует учетную запись службы, например ${NUMBER}[email protected]. Это было странно, потому что он использовал это, даже когда я указал учетную запись службы, которую использует моя служба, и учетную запись службы облачной сборки, которая будет использоваться по умолчанию для сборок. Облачные функции должны иметь учетную запись компьютерной службы по умолчанию с возможностью жесткой перезаписи.

swygerts 22.07.2024 22:11

Можете ли вы попробовать добавить роли cloudfunctions.developer и iam.serviceAccountUser в учетную запись [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com`. Также убедитесь, что учетную запись службы CloudBuild также необходимо добавить в качестве члена учетной записи службы, имеющей разрешения на развертывание вашей облачной функции. Также взгляните на эту Документацию.

Sandeep Vokkareni 23.07.2024 09:09

Исправление - это то, о чем я отметил. По какой-то причине это сервисная учетная запись, например ${NUMBER}[email protected], которая выполняет сборки Cloud Build только из Cloud Functions. Я даже пытался изменить предпочитаемую учетную запись службы Legacy Cloud Build и учетную запись службы, которую я использую для своей облачной функции, но это не сработало.

swygerts 23.07.2024 15:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, проблема в том, что Cloud Functions заставляет Cloud Build использовать ${NUMBER}[email protected] в качестве учетной записи службы для своих заданий сборки. Решением было предоставить этому сервисному аккаунту разрешение artifactregistry.repositories.downloadArtifacts.

Другие вопросы по теме

Похожие вопросы

AzureOpenAI: отсутствуют учетные данные `api_key`, `azure_ad_token`, `azure_ad_token_provider`
Есть ли способ проверить, какую политику обновлений безопасности использует функция Google Cloud (в Google Cloud Console)?
Обновление документов Firestore с использованием облачных функций Firebase происходит очень медленно
[email protected] отсутствует, вместо него у меня есть [email protected]
Аутентификация Firebase с помощью облачных функций не удалась: «Запрос не был аутентифицирован»
Ошибка развертывания функций gcloud: один или несколько пользователей, указанных в политике, не принадлежат разрешенному клиенту
@firestore_fn.on_document_created ограничение на облачные функции Firebase (2-го поколения)
Обновление документа Firestore несколько раз с помощью функции триггера события перезаписывает или прекращает обновление после нескольких триггеров
Ошибка при развертывании определенной облачной функции Firebase. Невозможно загрузить предоставленный модуль
Изменить формат времени в GCP Logs Explorer