【问题标题】:Securing cloud run service for end users and other services为最终用户和其他服务保护云运行服务
【发布时间】:2021-03-17 15:16:24
【问题描述】:

我有一组 Cloud Run 服务,它们需要能够通过 Firebase 身份验证从最终用户接收请求,但也需要从彼此接收请求。我知道如何使用 ID 令牌对最终用户进行身份验证。但是,我不确定如何对服务之间的请求进行身份验证。关于服务到服务调用的教程使用私有服务,但我需要将服务设置为“未经身份验证的请求”以允许用户请求,所以我不确定如何验证来自 google-auth-library 的令牌.有人对处理此问题的最佳方法有任何想法吗?

【问题讨论】:

标签: google-cloud-platform firebase-authentication google-cloud-run


【解决方案1】:
def auth_and_trigger(self):
#the other cloud run url you wanna trigger
receiving_service_url = 'https://cloudrun-url-uc.a.run.app/download'

# Set up metadata server request
# See https://cloud.google.com/compute/docs/instances/verifying-instance-identity#request_signature
metadata_server_token_url = 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience='

token_request_url = metadata_server_token_url + receiving_service_url
token_request_headers = {'Metadata-Flavor': 'Google'}

# Fetch the token
token_response = requests.get(token_request_url, headers=token_request_headers)
jwt = token_response.content.decode("utf-8")

# Provide the token in the request to the receiving service
receiving_service_headers = {'Authorization': f'bearer {jwt}'}

try:
   service_response = requests.post(url=receiving_service_url,
                                 json={'okay':'bro'},
                                 headers=receiving_service_headers
                                 )
logging.info(service_response.content)

except Exception as error:
    logging.error(error)

使用此代码和使用 JWT 令牌,您基本上是在调用另一个云服务(在您的情况下,是另一个云运行服务)。

【讨论】:

    【解决方案2】:

    如果您有 2 种身份验证类型,则需要 2 个端点。如果您使用 Firebase 身份验证,您可以使用 API Gateway(或 Cloud Endpoint)(我在上面使用 wrote an article,使用云 Endpoint,但它与 API Gateway 类似)和 security definition that use FirebaseAuth。并将您的 Cloud Run 服务设置为受保护,并且每次都需要一个 ID 令牌。

    或者,您需要 2 个 Cloud Run 服务。第一个接受来自用户的请求并设置为允许未经身份验证,并将有效请求(在用户验证后)转发到以保护模式部署的第二个 Cloud Run,仅使用经过身份验证的请求(来自所有 Cloud Run 服务)调用。

    【讨论】:

    • 那么如果我使用 API Gateway 和 firebase 安全定义,我无法在网关后面的服务之间发送请求?如果所有的云运行服务都是私有的,它们就不能同时响应网关和彼此吗?我在想我可以授予他们两个 IAM 中的“调用者”角色。非常感谢您的帮助。
    • 请求从 API Gateway 转发到后端(您的 Cloud Run)。来自 API 网关的调用通过 API 网关本身生成的 ID_TOKEN 进行身份验证。您不能授予具有 IAM 调用者角色的 firebase 用户,它不是 Google 帐户。
    猜你喜欢
    • 2021-03-25
    • 2021-09-23
    • 1970-01-01
    • 2021-06-16
    • 2017-08-31
    • 1970-01-01
    • 2017-12-11
    • 2012-04-26
    • 2010-09-12
    相关资源
    最近更新 更多