Vertex AI predykcja 403 odmowa uprawnień: aiplatform.endpoints.predict i konto usługi
Rozwiązanie błędu 403 PermissionDenied na aiplatform.endpoints.predict: identyfikacja wołającej tożsamości, nadanie roli Vertex AI User na właściwym projekcie oraz wykluczenie błędnej ścieżki zasobu lub projektu, zanim zaczniesz szukać winy w IAM.
403 Permission 'aiplatform.endpoints.predict' denied. Endpoint jest wdrożony i zdrowy, ale tożsamość wykonująca żądanie nie ma prawa go wołać. Rozwiązanie to niemal zawsze jedno z trzech: wołające konto usługi nie ma roli Vertex AI, poświadczenia wskazują zły projekt, albo ścieżka zasobu w żądaniu jest błędna. Ten runbook przechodzi przez nie po kolei.
Ten runbook dotyczy błędu uprawnień predykcji. Jeśli sam endpoint nie chce się wdrożyć, zobacz runbook o wdrożeniu. Jeśli wywołania są odrzucane z 429, a nie 403, zobacz runbook o predykcji 429. Po pomoc praktyczną umów konsultację.
Objawy
Wywołanie zwraca 403 z nazwą uprawnienia aiplatform.endpoints.predict i zasobu, na którym odmówiono.
google.api_core.exceptions.PermissionDenied: 403 Permission
'aiplatform.endpoints.predict' denied on resource
'//aiplatform.googleapis.com/projects/PROJECT/locations/us-central1/endpoints/ENDPOINT_ID'
(or it may not exist).
Obserwowalny skutek:
- To samo żądanie działa z Twojego konta użytkownika (które ma szerokie role), ale kończy się błędem z konta usługi lub zadania CI
- Endpoint jest widoczny i zdrowy w konsoli, a mimo to API odrzuca wywołanie
- Końcówka „(or it may not exist)” sugeruje, że tożsamość może też wskazywać zły projekt lub ścieżkę
Przyczyna
Wywołanie predict jest operacją sprawdzaną przez IAM, a 403 oznacza, że uwierzytelniona tożsamość nie przechodzi tego sprawdzenia na tym zasobie.
- Wołająca tożsamość nie ma roli. Wywołanie
predictwymaga uprawnieniaaiplatform.endpoints.predict, które niesie rola Vertex AI User (roles/aiplatform.user). Konto usługi utworzone dla aplikacji albo tożsamość CI/CD zwykle domyślnie go nie mają. - Zły projekt lub poświadczenia. Jeśli żądanie działa z Application Default Credentials dla innego projektu albo z kluczem złego konta usługi, tożsamość może po prostu nie istnieć na docelowym projekcie, co dokładnie opisuje końcówka „(or it may not exist)”.
- Zła ścieżka zasobu. Pomyłka w projekcie, lokalizacji lub id endpointu daje odmowę na zasobie, na którym tożsamość nie ma nadania, i produkuje ten sam 403, nawet gdy wiązanie IAM jest poza tym poprawne.
Rozwiązanie
Krok 1: Zidentyfikuj wołającą tożsamość
Ustal dokładnie, jako która tożsamość uwierzytelnia się nieudane żądanie.
# Jaka tożsamość to bieżące poświadczenia?
gcloud auth list --format="value(account)"
# Jeśli aplikacja działa jako konto usługi, potwierdź które
# (np. na GKE przez Workload Identity, albo dołączone konto VM/Run)
gcloud run services describe YOUR_SERVICE --region=us-central1 \
--format="value(spec.template.spec.serviceAccountName)" 2>/dev/null
Zanotuj adres e-mail tożsamości faktycznie wykonującej wywołanie, to podmiot, który potrzebuje nadania.
Krok 2: Nadaj rolę Vertex AI User
Zwiąż roles/aiplatform.user z tą tożsamością na projekcie, który jest właścicielem endpointu.
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:your-sa@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
Wybierz tę predefiniowaną rolę zamiast ręcznie składać rolę własną. Niesie ona aiplatform.endpoints.predict plus powiązane uprawnienia odczytu, których wołający zwykle potrzebuje. Zmiany IAM mogą propagować się minutę lub dwie.
Krok 3: Potwierdź projekt i ścieżkę zasobu
Wyklucz przyczynę „zły projekt / zła ścieżka”, zanim uznasz, że IAM wciąż jest zepsute.
# Do jakiego projektu rozwiązują się bieżące poświadczenia?
gcloud config get-value project
# Czy endpoint faktycznie istnieje pod ścieżką z błędu?
gcloud ai endpoints describe ENDPOINT_ID --region=us-central1 \
--project=PROJECT_ID --format="value(name)"
# Oczekiwane: pełna nazwa zasobu endpointu. Jeśli to zwraca 404,
# to Twoja ścieżka lub projekt jest zły, a nie IAM.
Upewnij się, że projekt, lokalizacja i id endpointu w Twoim kliencie dokładnie pasują do tej nazwy zasobu.
Krok 4: Zweryfikuj, że nadanie rozwiązuje uprawnienie
Sprawdź, że tożsamość ma teraz uprawnienie, bez uruchamiania pełnej predykcji.
# Podszyj się pod konto usługi i przetestuj uprawnienie
gcloud ai endpoints describe ENDPOINT_ID --region=us-central1 \
--project=PROJECT_ID \
--impersonate-service-account=your-sa@PROJECT_ID.iam.gserviceaccount.com
# Oczekiwane: endpoint opisuje się poprawnie pod tą tożsamością
Walidacja
Potwierdź, że prawdziwa predykcja kończy się teraz powodzeniem jako zamierzona tożsamość.
# Uruchom predykcję uwierzytelnioną jako konto usługi
gcloud ai endpoints predict ENDPOINT_ID --region=us-central1 \
--project=PROJECT_ID \
--json-request=request.json \
--impersonate-service-account=your-sa@PROJECT_ID.iam.gserviceaccount.com
# Oczekiwane: ładunek predictions, bez 403
# Potwierdź, że wiązanie jest na miejscu
gcloud projects get-iam-policy PROJECT_ID \
--flatten="bindings[].members" \
--filter="bindings.role=roles/aiplatform.user" \
--format="value(bindings.members)" | grep your-sa
# Oczekiwane: konto usługi pojawia się
Nadaj roles/aiplatform.user konkretnemu kontu usługi, które woła endpoint, a nie szerokim grupom czy kontom użytkowników na skróty. Zbyt szerokie nadania na zasobach Vertex AI to częste ustalenie audytu, a zasada najmniejszych uprawnień jest tu bezpieczniejsza i prostsza w analizie.
Zabezpieczasz dostęp do Vertex AI?
Umów bezpłatną rozmowę na 30 minut. Pomagamy zespołom projektować IAM o najmniejszych uprawnieniach dla Vertex AI, poprawnie podłączać konta usługi przez Workload Identity i trzymać dostęp gotowy na audyt.
Powiązane
- Vertex AI: wdrożenie endpointu zablokowane lub nieudane - gdy sam endpoint nie chce wstać
- Vertex AI predykcja 429 / RESOURCE_EXHAUSTED - odrzucenia, które są throttlingiem, nie uprawnieniami
- Czym jest Vertex AI? - platforma i sposób dostępu do endpointów
- Dokumentacja uprawnień IAM Vertex AI