使用 Google Cloud 控制台保护服务的流量
本页面介绍如何在 API Gateway 上部署 API 以保护流向后端服务的流量。
请按照相应步骤使用 Google Cloud 控制台部署新的 API 以访问 Cloud Run Functions 上的后端服务。本快速入门还介绍了如何使用 API 密钥保护您的后端免遭未经授权的访问。
准备工作
在 Google Cloud 控制台中,前往 API Gateway 页面。
API Gateway 要求您启用以下 Google 服务:
名称 标题 apigateway.googleapis.com
API Gateway API servicemanagement.googleapis.com
Service Management API servicecontrol.googleapis.com
Service Control API 如果您之前没有为所选项目启用这些服务,则系统会提示您执行此操作。
确认您的项目已启用结算功能。
部署 API 后端
API Gateway 位于已部署的后端服务前面,并处理所有传入请求。在本快速入门中,API Gateway 将传入的调用路由到名为 helloGET
的 Cloud Run 函数后端,该后端包含如下所示的函数:
/** * HTTP Cloud Function. * This function is exported by index.js, and is executed when * you make an HTTP request to the deployed function's endpoint. * * @param {Object} req Cloud Function request context. * More info: https://expressjs.com/en/api.html#req * @param {Object} res Cloud Function response context. * More info: https://expressjs.com/en/api.html#res */ exports.helloGET = (req, res) => { res.send('Hello World!'); };
按照快速入门:使用 Google Cloud CLI 中的步骤下载示例 Cloud Run 函数代码并部署 Cloud Run 函数后端服务。
创建 API 定义
API Gateway 使用 API 定义将调用路由到后端服务。您可以使用包含专用注释的 OpenAPI 规范来定义所选的 API Gateway 行为。本快速入门的 OpenAPI 规范包含到 Cloud Run 函数后端的路由说明:
# openapi2-functions.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: https://us-central1-PROJECT_ID.cloudfunctions.net/helloGET responses: '200': description: A successful response schema: type: string
如需使用上例中显示的 OpenAPI 规范来定义 API,请执行以下操作:
通过命令行创建名为
openapi2-functions.yaml
的新文件。将上例中显示的 OpenAPI 规范的内容复制并粘贴到新创建的文件中。
按如下方式修改该文件:
- 在
title
字段中,将 API_ID 替换为您的 API 名称(将在下一步中创建),并将 optional-string 替换为您选择的简要说明。在创建授予对此 API 访问权限的 API 密钥时,会用到此字段的值。请参阅 API ID 要求,了解 API ID 命名准则。 - 在
address
字段中,将 PROJECT_ID 替换为您的 Google Cloud 项目的名称。
- 在
创建网关
现在,您可以在 API Gateway 上创建和部署网关了。
在 Google Cloud 控制台中打开“API Gateway”页面。
点击创建网关。
在 API 部分:
- 您可以选择创建新的 API,也可以从选择 API 下拉列表中选择现有 API。在本教程中,选择创建新的 API。
- 为 API 输入显示名称。
- 为 API 输入 API ID。
- (可选)使用键值对格式向 API 添加标签。如需添加多个标签,请点击添加标签并输入其他值。
在 API 配置部分中:
- 您可以选择创建新的 API 配置,也可以从选择配置下拉列表中选择现有 API 配置。在本教程中,请选择创建新的 API 配置。
- 使用文件浏览器上传用于定义 API 的
openapi2-functions.yaml
。 - 为 API 配置输入显示名称。
从下拉列表中选择服务账号。您选择的服务账号将用作 API Gateway 的身份。
(可选)使用键/值格式向 API 配置添加标签。 如需添加多个标签,请点击添加标签并输入其他值。
在网关详情部分:
- 为网关输入显示名称。网关的网址会自动生成。
- 从下拉菜单中选择网关的位置。
- (可选)使用键值对格式向网关添加标签。如需添加多个标签,请点击添加标签并输入其他值。
点击创建网关。
这将在新创建的网关上部署 API 配置。在网关上部署 API 配置定义了 API 客户端可用于访问 API 的外部网址。
此操作可能需要几分钟时间才能完成。如需查看创建和部署过程的状态,您可以点击主导航栏中的通知图标以显示状态通知,如下图所示:
成功完成后,您可以在网关着陆页上查看有关网关的详细信息。
记下网关网址。此名称用于在下一步中测试您的部署。
测试您的 API 部署
现在,您可以使用部署网关时生成的网址向 API 发送请求。
在浏览器中,输入以下网址,其中:
- GATEWAY_URL 指定您部署的网关网址。
hello
是 API 配置中指定的路径。
https://GATEWAY_URL/hello
例如:
https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello
此时浏览器中应显示消息 Hello World!
。
您已成功创建和部署 API Gateway!
使用 API 密钥保护访问
要保护对 API 后端的访问,您可以生成与项目关联的 API 密钥,并授予该密钥调用您的 API 的权限。如需了解详情,请参阅使用 API 密钥限制 API 访问权限。
如果您没有与本快速入门中使用的 Google Cloud 项目关联的 API 密钥,则可以按照创建 API 密钥中的步骤添加一个。
如需使用 API 密钥保护对网关的访问,请执行以下操作:
- 为您的服务启用 API 密钥支持:
- 在 Google Cloud 控制台中,前往 API 和服务 > 库。
- 在搜索栏中输入您刚刚创建的 API 的代管式服务名称。 您可以在 API 着陆页上的 API 的代管式服务列中找到此值。例如:
my-api-123abc456def1.apigateway.my-project.cloud.goog
- 在您的服务着陆页上,点击启用。
- 修改用于创建 API 配置的 OpenAPI 规范,以包括对所有流量强制执行 API 密钥验证安全政策的说明。 添加
security
类型和securityDefinitions
,如下所示:# openapi2-functions.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address:https://us-central1.PROJECT_ID.cloudfunctions.net/helloGET security: - api_key: [] responses: '200': description: A successful response schema: type: string securityDefinitions: # This section configures basic authentication with an API key. api_key: type: "apiKey" name: "key" in: "query"
securityDefinition
将 API 配置为要求请求访问规范中定义的所有路径时作为名为key
的查询参数传递的 API 密钥。 - 创建新的 API 配置并将其部署到现有网关:
- 前往“网关”着陆页。
- 从列表中选择您的网关以查看详细信息。
- 点击修改以打开网关配置窗格。
- 在 API 配置部分中:
- 从可用下拉菜单中选择创建新的 API 配置。
- 使用文件浏览器上传修改后的 OpenAPI 规范。
- 输入新 API 配置的显示名。
- 从下拉列表中选择服务账号。您选择的服务账号将用作 API Gateway 的身份。
- (可选)使用键/值格式向 API 配置添加标签。 如需添加多个标签,请点击添加标签并输入其他值。
- 点击更新。
测试您的 API 密钥
创建和部署修改后的 API 后,尝试向其发出请求。
在浏览器中,输入以下网址,其中:
- GATEWAY_URL 指定您部署的网关网址。
hello
是 API 配置中指定的路径。
https://GATEWAY_URL/hello
例如:
https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello
这会导致以下错误:
UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.
现在,在浏览器中,输入以下网址,其中:
- GATEWAY_URL 指定您部署的网关网址。
hello
是 API 配置中指定的路径。- API_KEY 指定您在使用 API 密钥保护访问中创建的 API 密钥。
https://GATEWAY_URL/hello?key=API_KEY
现在,您应该会在浏览器中看到 Hello World!
。
恭喜!您已成功使用 API Gateway 保护 API 后端。现在,您可以通过生成其他 API 密钥来开始初始配置新的 API 客户端。
跟踪 API 活动
在 Google Cloud 控制台中的 API Gateway 页面上查看 API 的活动图表。点击您的 API 以在概览页面上查看其活动图表。请求可能要过一些时间才能反映在图表中。
在日志浏览器页面上查看 API 的请求日志。您可以在 Google Cloud 控制台中的 API Gateway 页面上找到日志浏览器页面的链接。
进入“API Gateway”页面后:
- 选择要查看的 API。
- 点击详情标签页。
- 点击日志下的链接。
清理
为避免系统因本快速入门中使用的资源向您的 Google Cloud 账号收取费用,您可以执行以下操作:
或者,您还可以删除本教程中使用的 Google Cloud 项目。
后续步骤
- 详细了解 API Gateway
- 浏览配置开发环境