负载均衡器背后的云功能

负载均衡器背后的云功能

我遵循 GCP 的指南,将 hello-world PHP 示例部署为一个函数,只允许来自内部和 Cloud Load Balancing 的连接。之后,我配置了负载均衡器,以便将该函数用作后端。所有内容都在同一个项目中。我本以为该函数会被调用,但我却一直收到 403 错误:

错误:禁止

您的客户端无权从该服务器获取 URL /。

经过一段时间的努力之后,我授予 allUsers Cloud Functions Invoker 角色,并且一切都按预期工作,但在我看来似乎存在错误。

如果负载均衡器和函数都在同一个项目中,为什么我需要允许 allUsers?为什么尝试允许 allAuthenticatedUsers 会导致它停止工作?

我是 GCP 的新手,所以如果我遗漏了什么,请向我道歉。

答案1

正如 John 所说,如果未指定 allusers,则只有授权用户才能访问 CF。您可以查看文档以了解有关如何对 CF 进行身份验证的更多信息。但基本上,您需要将角色/cloudfunctions.invoker 角色添加到您要用于访问的 SA。

另一方面,也可以使用以下方式以编程方式生成令牌:客户端库

def make_authorized_get_request(service_url):
    """
    make_authorized_get_request makes a GET request to the specified HTTP endpoint
    in service_url (must be a complete URL) by authenticating with the
    ID token obtained from the google-auth client library.
    """

    req = urllib.request.Request(service_url)

    auth_req = google.auth.transport.requests.Request()
    id_token = google.oauth2.id_token.fetch_id_token(auth_req, service_url)

    req.add_header("Authorization", f"Bearer {id_token}")
    response = urllib.request.urlopen(req)

    return response.read()

相关内容