API должен быть включен для проекта сервисного аккаунта

У нас есть проблема с сервисным аккаунтом, который «по умолчанию» используется для проекта, в котором он был создан, при включении API перед созданием ресурсов.

SA была создана в рамках проекта A, но имеет Owner права на проект B.

Мы пытаемся создать ресурс (кластер GKE) в проекте B, но он жалуется, что нам нужно сначала включить Kubernetes API в проекте A (мы передаем --project в cluster create, чтобы избежать двусмысленности в том, где мы пытаемся создать кластер (это также относится к команде get-credentials).

ERROR: (gcloud.container.clusters.create) ResponseError: code=403, message=Kubernetes Engine API has not been used in project PROJECT_NUMBER before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/container.googleapis.com/overview?project=PROJECT_NUMBER then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

PROJECT_NUMBER здесь номер проекта A, а не B. Требуемый API уже включен в проекте B.

Есть ли здесь какие-то изъяны в нашем подходе к использованию служебных учетных записей?


person Charlie Egan    schedule 04.02.2019    source источник


Ответы (1)


Даже если вы создаете кластер в проекте B, вызывающим API является проект A (поскольку учетная запись службы принадлежит проекту A); поэтому API должен быть включен в проекте A.

person Rob Kochman    schedule 04.02.2019
comment
В этом случае учетная запись службы используется в качестве удостоверения. Поэтому требование проекта A для включения этого API не кажется правильным дизайнерским решением IAM (со стороны GCP). IAM должен требовать, чтобы у Project B был включен API. Это также создало бы проблему для сторонних интеграций. - person John Hanley; 04.02.2019
comment
В самом деле, если это так, я некоторое время ошибался в своем понимании учетных записей служб GCP. @ rob-kochman, вы случайно не знаете, задокументировано ли это где-нибудь? - person Charlie Egan; 05.02.2019
comment
Я довольно долго просматривал документы, это лучшее, что я нашел: Also make sure that the desired API(s) are enabled for the project that those credentials are associated with. via: developers.google.com/explorer-help/#CustomCreds Тот факт, что это так сложно найти, заставил меня задуматься, правильно ли мы управляем учетными записями служб. У нас есть один, который владеет несколькими проектами для различных сред. Возможно, это не лучшая практика! - person Charlie Egan; 05.02.2019
comment
Я согласен, это сбивает с толку. Однако включение API и IAM - это разные вещи. Я постараюсь улучшить документацию. - person Rob Kochman; 06.02.2019