Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 内部认证请求的谷歌云功能403_Google Cloud Platform_Google Cloud Functions_Cloud Security - Fatal编程技术网

Google cloud platform 内部认证请求的谷歌云功能403

Google cloud platform 内部认证请求的谷歌云功能403,google-cloud-platform,google-cloud-functions,cloud-security,Google Cloud Platform,Google Cloud Functions,Cloud Security,我正在从我的GCP项目中调用一个云函数 当功能配置为仅允许内部通信时,我收到403(权限被拒绝),请参阅 当拆除入口控制装置时,没有问题,功能以状态200响应。 该函数不允许未经身份验证的访问,已配置IAM策略 以下示例来自: 调用hello触发器将返回403 更改hello get的入口可以解决以下问题: gcloud functions deploy hello-get --trigger-http --entry-point hello_get --runtime python37 --

我正在从我的GCP项目中调用一个云函数

当功能配置为仅允许内部通信时,我收到403(权限被拒绝),请参阅

当拆除入口控制装置时,没有问题,功能以状态200响应。 该函数不允许未经身份验证的访问,已配置IAM策略

以下示例来自:

调用hello触发器将返回403

更改hello get的入口可以解决以下问题:

gcloud functions deploy hello-get --trigger-http --entry-point hello_get --runtime python37 --ingress-settings all
现在调用hello触发器将返回200


用于云功能的服务帐户被授予此设置的功能调用者角色。

当您将入口流量设置为仅限内部时,仅接受来自您的VPC或来自VPC SC(服务控制)的流量

在这里,在触发功能中,您不是来自您的专有网络,而是来自另一个专有网络(由谷歌管理的无服务器专有网络,部署云功能的地方)。因此,入口设置不受尊重,您将获得403

因此,您有两种解决方案:

  • 仅使用IAM服务来筛选谁可以调用或不调用您的函数,并使用入口=全部来“公开”您的函数。(John在第二次评论中提出的解决方案)。这已经是一个高水平的安全
  • 然而,有时出于监管原因(或老式安全团队设计),网络控制是首选

  • 如果你想通过VPC,你需要
    • 在与触发器函数相同的区域中创建
    • 设置出口设置=所有
    这样,触发器功能的所有传出流量都将通过无服务器VPC连接器,因此,在尝试到达“入口内部”云功能之前,流量将在VPC中路由。它将被接受


    如果您的函数使用入口=所有设置,任何人都可以从internet访问该函数

    但是,如果您不让该函数公开访问,我的意思是,授权给未经身份验证的用户,那么您的云函数将只处理有效的请求(通过角色cloudfunctions.invoker进行身份验证和授权)

    事实上,任何谷歌服务名称都有一个公共层。这一层负责许多事情(在HTTPS中公开您的服务、管理您的证书、放弃DDoS攻击OSI第4层等),并根据IAM服务检查身份验证头和授权


    因此,在第4层发生DDoS攻击的情况下,GFE默认过滤这些攻击。在第7层受到攻击的情况下,仅允许授权请求(有效),您将仅为其支付费用。GFE执行的过滤是免费的。

    谷歌云功能不是VPC中的资源。这意味着您的触发函数在配置了
    仅内部
    时无法调用hello get函数。注意“仅来自同一项目中VPC网络的请求”的措辞。谷歌的网络中有一个云功能。@JohnHanley谢谢。你能举一个我可以打电话给hello get的设置示例吗?如果你不介意把它解释清楚,我显然很难理解这里网络的细节。你可以从计算引擎实例调用这个函数。对于函数间调用,请使用授权,而不是联网。谢谢你的解释!后续问题:缺乏入口控制是否会增加DDoS攻击的脆弱性?也许@JohnHanley会告诉你我的答案@约翰汉利是一个安全大师(也是一个怪物!),我相信他将能够添加一些智能添加!
    gcloud functions deploy hello-get --trigger-http --entry-point hello_get --runtime python37 --ingress-settings internal-only
    gcloud functions deploy hello-trigger --trigger-http --entry-point hello_trigger --runtime python37 --ingress-settings all --allow-unauthenticated
    
    gcloud functions deploy hello-get --trigger-http --entry-point hello_get --runtime python37 --ingress-settings all