📌  相关文章
📜  Google Cloud Platform – 使用 JWT 保护 Cloud Run REST API(1)

📅  最后修改于: 2023-12-03 15:15:24.037000             🧑  作者: Mango

Google Cloud Platform – 使用 JWT 保护 Cloud Run REST API

简介

本文介绍了如何使用 JSON Web Tokens(JWT)来保护 Google Cloud Platform 中的 Cloud Run REST API。JWT 是一种用于安全地传输信息的开放标准,用于在请求之间传递声明。通过使用 JWT,您可以验证请求的合法性,提高 API 的安全性。

前提条件

在开始之前,您需要满足以下条件:

  • 拥有 Google Cloud Platform 账号,并且已经创建了 Cloud Run 服务。
  • 安装了 Google Cloud SDK 并登录到您的账号。
步骤 1: 生成 JWT 密钥对

首先,我们需要生成一个用于签名和验证 JWT 的密钥对。可以使用下面的命令在本地生成密钥对。

openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem

这将在当前目录下生成名为 private.pempublic.pem 的密钥文件。

步骤 2: 创建 Cloud Run 服务

接下来,我们需要在 Google Cloud Platform 上创建一个 Cloud Run 服务。可以使用以下命令进行部署:

gcloud run deploy <service-name> --region=<region> --image=<container-image-url> --allow-unauthenticated

确保将 <service-name> 替换为您希望创建的服务名称,<region> 替换为您希望部署服务的地区,<container-image-url> 替换为您的容器镜像 URL。

步骤 3: 在 Cloud Run 上启用认证

在 Cloud Run 上启用认证后,只有带有有效 JWT 的请求才能访问您的 REST API。可以使用以下命令为 Cloud Run 服务启用认证:

gcloud run services update <service-name> --update-env-vars=AUTHENTICATION=service_account

确保将 <service-name> 替换为您创建的服务的名称。

步骤 4: 配置 Cloud Run 的服务账号

为了验证 JWT,我们需要将服务账号配置到 Cloud Run 服务中。可以使用以下命令为 Cloud Run 服务配置服务账号:

gcloud run services update <service-name> --service-account=<service-account-email>

确保将 <service-name> 替换为您创建的服务的名称,<service-account-email> 替换为您的服务账号的邮箱地址。

步骤 5: 从请求中验证 JWT

在您的 Cloud Run 服务中,您可以通过以下方式从请求中验证和解码 JWT:

import jwt
from google.auth import jwt

def validate_jwt(request):
    encoded_jwt = request.headers.get('Authorization', '')
    try:
        decoded_jwt = jwt.decode(encoded_jwt, public_key, algorithms=['RS256'])
        # JWT 验证通过,继续处理请求
        return 'Authenticated'
    except (jwt.exceptions.InvalidTokenError, jwt.exceptions.DecodeError):
        # JWT 验证失败,返回错误响应
        return 'Unauthorized'

确保将 public_key 替换为您生成的 public.pem 文件中的密钥。

结论

通过使用 JWT,您可以有效地保护 Cloud Run REST API 的安全性。本文提供了了解如何生成 JWT 密钥对、创建 Cloud Run 服务、启用认证并从请求中验证 JWT 的步骤。现在,您可以使用 JWT 来保护您的 Cloud Run REST API,以确保只有合法请求能够访问。