当前位置: 首页 > 知识库问答 >
问题:

限制对Google Cloud功能的访问

云默
2023-03-14

我已经成功地部署了一个云函数,它对一些数据进行一些基本的预处理,并将其上传到gSheet
现在,触发器url接受未经验证的外部调用,如果url最终落入坏人之手,则会导致账单过多的风险。

我想知道是否有任何方法可以限制对IAM中的云调度器的调用,从而防止外部调用服务。
阅读周围的内容似乎在请求中包含一些标头并在函数中检查它可能是一种基本的强制执行方法基本的真实性。

共有2个答案

卫君博
2023-03-14

如果您想限制最终用户请求对Google云功能的访问,您可以将Google登录与Cloud IAM集成,或实施Firebase身份验证

云功能:验证开发人员、功能和最终用户:

大多数应用程序处理来自最终用户的请求,最好将访问限制为仅允许的最终用户。为此,您可以集成Google登录并授予用户角色/cloudfunctions.invokerIAM角色,或者实施Firebase身份验证并手动验证其凭据。

许展鹏
2023-03-14

为了防止外部非真实诱导性呼叫,您可以设置您的功能私有。很容易做到,用--no-forle-un验证的参数部署它

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

但是现在,调度程序无法调用它。现在你必须做两件事

  • 创建具有正确角色的服务号。您可以通过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,您的服务号将能够访问项目中的所有功能。使用我的命令行,我只授予特定函数上的角色。您可以通过控制台执行此操作,进入函数列表,选择一个函数(复选框),然后单击show info面板。这里有一个权限标签

  • 然后用服务号创建调度器
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
 类似资料:
  • 问题内容: 我正在尝试设置用于访问智能卡的PKCS11提供程序。我在系统上安装了PKCS11库,并遵循了《Java PKCS#11参考指南》中的说明 。在参考中,他们只是创建一个实例,并将配置文件的名称传递给构造函数。当我尝试编译以下代码时 我收到以下错误。 访问限制:由于必需的库/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/ext/sunpkcs11.jar受

  • 我有这个博客资源,它有通常的CRUD方法。(索引,创建,存储,显示,编辑,更新,销毁)。 我的路线中有以下路线。php: 这是很好的索引,但我不知道如何路由显示方法?还是有别的办法?我不应该路由资源,而是应该单独路由每个URI,并将我想要限制的URI放在我的限制访问路由中? 干杯

  • 问题内容: 我试图在不重新创建存根的情况下编译由IBM的WSDL2Java在Java5上创建的Java 1.4代码,并在Eclipse中看到此错误。我的假设是,只要运行时jar可用(它们存在),生成的存根就应该编译。 完整的班级名称是 这到底是怎么回事?这是我要用香肠重构猪的情况吗?我最好重新创建存根吗? 问题答案: 还有另一个解决方案,也可以。 转到项目属性中的“ 构建路径”设置。 删除JRE系

  • 问题内容: 我在Eclipse中收到以下错误消息: 这是什么意思?在同一主题上还有另一个SO问题,但在这种情况下似乎不适用。我没有创建一个新的Java类,而是尝试使用一个。 问题答案: 猜测您正在使用的另一个库也需要Apache Commons I /O,但是版本不同。拥有一段代码(以传递方式)可以访问同一软件包的两个版本有些棘手。您可能可以安排它,以便您的代码和其他库使用相同的版本。使用CLAS

  • 问题内容: 我试图在不重新创建存根的情况下编译由IBM的WSDL2Java在Java5上创建的Java 1.4代码,并在Eclipse中看到此错误。 我假设生成的存根应该只要运行时可用就可以编译。 jars 完整的班级名称是 javax.xml.namespace.QName 这到底是怎么回事?这是我要用香肠重构猪的情况吗?我最好重新创建存根吗? 问题答案: 还有另一个解决方案,也可以。 1, 转

  • 大多数Web应用程序在使用户可以访问该功能之前验证功能级别访问权限。但是,如果未在服务器上执行相同的访问控制检查,则黑客无法在未经适当授权的情况下进入应用程序。 我们将通过以下每项来了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 具有网络访问权限的任何人都可以向应用程序发送请求。 攻击者的方法 - 谁是授权系统用户,只需将URL或参数更改为特权函数即可。 安全弱点