Как ограничить доступ к функции Google Cloud, позволяющей пользователю выполнять авторизацию при запуске?

#google-cloud-functions

#google-cloud-функции

Вопрос:

Я создал облачную функцию Google, и в разрешениях я добавил роль «Вызывателя облачных функций» для 3 отдельных пользователей, которых я хочу, чтобы иметь возможность запускать эту функцию.

Функция доступна в предоставленной конечной точке триггера, аналогично этому: https://us-central1-name-of-my-app.cloudfunctions.net/function-name

Я назначил себе роль вызывающего в функции. Когда я ввожу URL-адрес, я получаю 403

У вашего клиента нет разрешения на получение URL-адреса / имени функции с этого сервера.

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

Если нет, то как я могу показать запрос аутентификации как часть функции, не раскрывая всю функцию через allUsers?

Комментарии:

1. Элементы управления аутентификацией Google IAM для облачных функций несовместимы с вызовом из браузера. Браузер не собирается отправлять учетные данные пользователя для авторизации — он предназначен только для доступа к учетной записи службы, где токен аутентификации установлен в заголовках запроса. Если вам нужен веб-интерфейс, вам придется его создать.

Ответ №1:

Вы не можете вызвать функцию напрямую, даже если вы прошли проверку подлинности в своем браузере (эта функция появится позже, когда вы будете находиться за глобальным балансировщиком нагрузки и с активированным IAP).

Итак, для вызова вашей функции вы должны представить идентификационный токен (не токен доступа). Для этого вы можете использовать gcloud SDK с помощью такой команды (в Linux и после инициализации ее с помощью ваших учетных данных пользователя ( gcloud init ))

 curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://....
  

Вы также можете создать перед ним шлюз API (я написал об этом статью) и использовать, например, ключи API.

Комментарии:

1. Спасибо. В итоге я перенес свою функцию в Google App Engine вместо облачных функций и защитил ее с помощью IAP, чтобы получить желаемую функциональность.