为了防止外部未经身份验证的调用,您可以将函数设置为私有。非常容易做到,使用--no-allow-unauthenticated
参数部署即可。
gcloud functions deploy my-function --no-allow-unauthenticated --trigger... -- region... --runtime...
但现在调度程序无法调用它。现在你需要执行两件事情:
- 创建具有正确角色的服务帐户。您可以通过GUI或命令行来实现。
gcloud iam service-accounts create your-service-account-name
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
角色,您的服务帐户将能够访问项目中所有函数。 通过我的命令行,我只在特定函数上授予该角色。 您可以通过控制台完成此操作,方法是进入函数列表,选择一个函数(复选框)并单击显示信息面板
。 这里有一个权限选项卡。
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