【问题标题】:How to authenticate gRPC deployed on Cloud Run using Python如何使用 Python 对部署在 Cloud Run 上的 gRPC 进行身份验证
【发布时间】:2022-01-03 10:22:26
【问题描述】:

我想在云上部署一个微服务,使用 gRPC 与之通信。我已经设置了服务并使用不安全的通道使其工作,但在身份验证方面我对文档有点困惑。

我在安全和身份验证方面没有经验,因此如果有人能概述在云运行上设置安全 gRPC 通道所需的步骤,我将不胜感激。将在 python 中运行它。

弹出的一些具体问题

  • 是仅使用 oidc 完成身份验证(我从 docs 了解到),还是需要 oidc 和 ssl(这就是他们所说的调用和通道凭据?)?
  • 我使服务器安全还是不安全?似乎有些threads 使服务器不安全,然后我猜想在客户端和谷歌之间进行身份验证?
  • 如何在云运行中处理 ssl 证书?您是否需要自己生成它们,如果需要,是否将它们存储在 docker 映像中?

提前致谢

【问题讨论】:

    标签: python authentication grpc google-cloud-run


    【解决方案1】:

    您通过 HTTP/2 运行 gRPC,对于 HTTP/2,您通常使用 TLS 证书(与普通 HTTPS 相同)来保护它。

    身份验证通过令牌/密钥或客户端证书或您喜欢的任何方式完成。对于令牌/密钥,您通常在 HTTP/2 中提供身份验证标头。 (类似于 HTTP/1.1)

    要使 HTTPS 正常工作,您需要一个有效的证书,通常使用 LetsEncrypt 在云中颁发。

    gRPC 类似于任何其他 HTTP 请求(但通过 HTTP/2)

    【讨论】:

    • Cloud Run 在某些方面有所不同。使用 Google 提供的端点(服务 URL)通过 HTTPS 保护所有请求。 Cloud Run 还支持自定义域和自定义域的自签发(Google 托管)SSL 证书。从技术上讲,您的答案是正确的,但会使 Cloud Run 用户感到困惑,因为实施是特定于服务的。
    【解决方案2】:

    Cloud Run 将代理作为 Sidecar 注入到您部署的容器中。

    服务将始终使用 TLS 保护。

    基于 TLS 的身份验证可用于对客户端和服务器进行相互身份验证,但不会对客户端用户进行身份验证,因此您需要使用额外的机制。

    如果您允许未经身份验证,任何东西都可以调用您的服务。如果您需要经过身份验证,该服务将需要一个授权令牌(身份令牌)来进行身份验证。

    您可以使用 Google 身份进行身份验证,但这些身份需要得到项目的适当允许(例如调用者)成员并且您需要使用 JWT(使用 Cloud Run 服务的端点作为其观众)客户端交换身份令牌。这记录在您包含的链接中:https://cloud.google.com/run/docs/authenticating/service-to-service

    另一种更复杂但更灵活的方法是使用 Firebase Auth 支持联合身份验证(例如 Google、Microsoft、Facebook 帐户)和 Cloud Endpoints(另一个代理)进行身份验证。使用这种方法,您还需要实现授权服务来确定经过身份验证的用户具有什么角色:https://cloud.google.com/endpoints/docs/grpc/authenticating-users

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2020-01-24
        • 1970-01-01
        • 2020-05-31
        • 2019-12-31
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 2020-07-22
        • 2020-07-13
        相关资源
        最近更新 更多