В коде Python я хочу выдать себя за учетную запись службы, чтобы выполнить какое-то действие. Я делаю это следующим образом:
request = google.auth.transport.requests.Request()
credentials, _ = google.auth.default(
scopes=["https://www.googleapis.com/auth/cloud-platform"],
)
if not credentials.valid:
try:
credentials.refresh(request)
except google.auth.exceptions.RefreshError:
raise PermissionError(
"GCP default credentials could not be refreshed. Verify your default configuration is correct.",
)
target_credentials = impersonated_credentials.Credentials(
source_credentials=credentials,
target_principal = "[email protected]",
target_scopes=scopes,
)
Это дает мне следующую ошибку: «Невозможно получить олицетворенные учетные данные», «{\ n «ошибка»: {\ n «код»: 403, \ n «сообщение»: «API учетных данных службы IAM не использовался в проекте my_project_id раньше или он отключен.'
my_project_id — это проект по умолчанию, установленный в моем интерфейсе командной строки gcloud. API действительно не активирован, но я хочу, чтобы этот код мог работать в любой среде, независимо от локального проекта по умолчанию.
Я видел в документации параметр под названием «iam_endpoint_override», который, как я думаю, может помочь, но я понятия не имею, что может означать «полное переопределение конечной точки IAM со встроенным target_principal».
Эй, спасибо. Я пробовал, но это не изменилось!
Неважно, я неправильно прочитал ваш комментарий, это действительно работает. Большое спасибо ! Это ответ.
В своем коде вы можете указать проект, который будет использоваться для выполнения запроса. Он называется «квотный проект». Если есть квоты или стоимость, связанные с запросом API, проект квоты будет использоваться (для выставления счетов или ограничения скорости (т. е. ограничения квоты))
В вашем коде вы можете указать такой проект квоты
request = google.auth.transport.requests.Request()
credentials, _ = google.auth.default(
quota_project_id=<YOUR QUOTA PROJECT>,
scopes=["https://www.googleapis.com/auth/cloud-platform"],
)
Если вы используете API, вы можете добавить заголовок x-goog-user-project
, чтобы указать проект квоты
curl -H "x-goog-user-project: <YOUR QUOTA PROJECT>" .....
В методе
google.auth.default
вы можете попробовать поставить в качестве аргументаquota_project_id
равно проекту, в котором активирован API?