Ограничить доступ к Google Cloud Function - PullRequest
2 голосов
/ 20 января 2020

Я успешно развернул облачную функцию, которая выполняет некоторую базовую c предварительную обработку некоторых данных и загружает их в gSheet.
Теперь URL-адрес триггера принимает внешние неаутентифицированные вызовы, что приводит к риску чрезмерных счетов в на случай, если URL окажется в чужих руках.

Мне интересно, есть ли способ ограничить вызов Cloud Scheduler в IAM, предотвращая внешние вызовы к службе altoghether.
Читая, кажется, в том числе некоторые заголовок в запросе и проверка его в функции могут быть рудиментарным способом обеспечения подлинной аутентификации.

Ответы [ 2 ]

4 голосов
/ 21 января 2020

Для предотвращения внешнего неаутентифицированного вызова вы можете назначить свою функцию частной. Это очень легко сделать, разверните его с помощью --no-allow-unauthenticated param

gcloud functions deploy my-function --no-allow-unauthenticated --trigger... -- region... --runtime...

Но теперь планировщик не может вызвать его. Теперь вам нужно выполнить 2 вещи

  • Создать учетную запись службы с правильными ролями. Вы можете сделать это с помощью GUI или с помощью командной строки
# Create the service account
gcloud iam service-accounts create your-service-account-name

# Grant the role for calling the function
gcloud functions add-iam-policy-binding \
  --member=serviceAccount:your-service-account-name@YOUR_PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudfunctions.invoker your-function-name

С помощью GUI, если вы предоставите роль cloudfunctions.invoker на уровне проекта, ваша учетная запись службы будет быть в состоянии получить доступ ко всем функциям в вашем проекте. С моей командной строкой я предоставляю роль только для определенной функции c. Вы можете сделать это через консоль, перейдя в список функций, выберите функцию (флажок) и нажмите show info panel. Здесь у вас есть вкладка прав доступа

  • Затем создайте планировщик с учетной записью службы
gcloud scheduler jobs create http your-job name --schedule="0 0 * * *" \
  --uri=your-function-URI \
  --oidc-service-account-email=your-service-account-name@YOUR_PROJECT_ID.iam.gserviceaccount.com

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

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:service-[project-number]@gcp-sa-cloudscheduler.iam.gserviceaccount.com \
  --role roles/cloudscheduler.serviceAgent
0 голосов
/ 20 января 2020

Если вы хотите ограничить доступ к своим облачным функциям Google из запросов конечных пользователей, вы можете интегрировать Google Sign-In с Cloud IAM или внедрить проверку подлинности Firebase

Облачные функции: аутентификация разработчиков, функции и конечные пользователи :

Большинство приложений обрабатывают запросы от конечных пользователей, и рекомендуется ограничивать доступ только разрешенным конечным пользователям. Чтобы выполнить это sh, вы можете интегрировать Google Sign-In и предоставить пользователям роль role / cloudfunctions.invoker IAM или внедрить проверку подлинности Firebase и вручную проверить их учетные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...