【问题标题】:Accessing Google Cloud Function via API Key通过 API Key 访问 Google Cloud Function
【发布时间】:2021-04-08 23:24:02
【问题描述】:

我从我的 ML 模型创建了一个 Google Cloud 函数。它适用于功能的 GCP 网站上的谷歌“测试”:

测试截图

我有 2 次托管该功能,一次通过身份验证 (Google IAM),第二次未经身份验证

认证修改

如果我现在想调用函数,例如在邮递员中,没有身份验证的版本可以正常工作。 但是对于身份验证的事情,弄清楚如何实现这一点就变得一发不可收拾。

如何使用受限的 API 密钥实现对云功能的访问?`

【问题讨论】:

  • 简短的回答是您不能将 API 密钥与 Cloud Functions 一起使用。 Cloud Functions 使用 Google OAuth 2 身份令牌。使用有关需要访问 Cloud Functions 的详细信息来编辑您的问题。对于大多数 Google 服务,这是内置的(默认服务帐户)。
  • 要试验 Postman,请使用 CLI 生成身份令牌。这进入 Authorization: Bearer <TOKEN> 标头。 cloud.google.com/sdk/gcloud/reference/auth/print-identity-token
  • 友情提示,请同时保护您的云函数(截图)的 url,因为它包含有关您的项目 id、区域和云函数名称的信息。 xD

标签: google-cloud-functions api-key google-iam google-cloud-iam


【解决方案1】:

您不能使用 API 密钥直接调用您的函数。您需要实现一个代理层来检查您的 API 密钥并使用 OAuth2 授予的身份令牌执行请求。为此,您可以使用Cloud Endpoint 或其全新的无服务器实现API Gateway。我wrote an article on Cloud Endpoint,您可以在 API Gateway 上重复使用它。

如果仅用于 Postman 和您的测试,您可以使用 GCLOUD CLI 生成令牌

gcloud auth print-identity-token

复制结果并将其添加到请求的标头中

Authorization: Bearer <token>

1H 有效。执行您的测试,当它过期时,生成一个新的并继续。

我也是wrote a small tool for this。使用 Postman 执行预调用以获取令牌,然后如前所述在您的请求中使用它

【讨论】:

    【解决方案2】:

    要使用 postman 对云函数进行身份验证调用,您需要 jwt_token。

    1. 首先创建服务帐号
    2. 授予 Cloud 函数调用者对此 SA 的访问权限
    3. 生成 JWT
    import time
    import google.auth.crypt
    import google.auth.jwt
    
    sa_keyfile = 'path_of_service_account'
    iss = 'email_address_of_service_account'
    aud = 'function_url'
    iat = int(time.time())
    exp = iat + 3600
    
    def generate_jwt():
        """Generates a signed JSON Web Token using a Google API Service Account."""
        payload = {"iat": iat, "exp": exp, "iss": iss, "aud":  aud, "sub": iss, "email": iss}
    
        signer = google.auth.crypt.RSASigner.from_service_account_file(sa_keyfile)
        jwt = google.auth.jwt.encode(signer, payload)
        return jwt
    
    if __name__ == '__main__':
        signed_jwt = generate_jwt()
        print(signed_jwt.decode()+'\n')
    

    【讨论】:

      【解决方案3】:

      最近 Google 在 beta 中添加了一个新的 Api Gateway,它将隐藏您的 google 函数声明并使用 API KEY 提供 HTTP 身份验证

      https://cloud.google.com/api-gateway/docs/quickstart-console#securing_access_by_using_an_api_key

      这样做,您可以使用 API Key 在客户端和网关之间创建身份验证以及网关和 google 功能之间的身份验证,可以使用普通服务帐户完成

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        • 1970-01-01
        相关资源
        最近更新 更多