第 5 步:在控制台中为代理服务创建 GCP 安全策略

在前面的步骤中,您创建了一个 Google Cloud Function,拥有正确 Google Cloud API Gateway 端点的任何人都可以调用该函数。除非您希望端点对公众开放,否则应该通过在 Google Cloud API Gateway 上创建安全策略来保护端点。

本主题说明如何通过向 API 定义的配置文件中添加自定义 securityDefinitions 部分来为 API Gateway 创建安全策略。

重要

Snowflake 强烈建议为 API Gateway 创建一个安全策略。完成此步骤后,仅允许 Snowflake 通过 API Gateway 调用 Cloud Function。

本主题内容:

上一步

第 4 步:在 Snowflake 中为 GCP 创建的外部函数

更新配置文件

备注

配置文件的名称记录在跟踪工作表的 Configuration File Name 字段中。

  1. 在配置文件中添加或更新以下 securityDefinitions 部分。将其添加到配置文件 schemes 部分的正上方,并处于相同的缩进级别。

    securityDefinitions:
      <security-def-name>:
        authorizationUrl: ""
        flow: "implicit"
        type: "oauth2"
        x-google-issuer: "<gmail service account>"
        x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/<gmail service account>"
    
    Copy

    在本部分中:

    • <security-def-name> 替换为唯一的安全定义名称(例如 snowflakeAccess01)。如果您在教程的第 2 步(第 2 步:在控制台中创建代理服务(Google Cloud API Gateway))中添加了临时安全定义,则此操作已完成。

    • 此外,在跟踪工作表的 Security Definition Name 字段中记录此名称。

    • <gmail service account> 替换为跟踪工作表中 API_GCP_SERVICE_ACCOUNT 字段的值。在配置文件中的两个位置添加值:

      • x-google-issuer 字段

      • x-google-jwks_uri 字段(追加到字段末尾)

  2. 更新配置文件的 post: 部分以引用上面创建的安全定义。

    operationId 字段下方,添加:

    security:
      - <security-def-name>: []
    
    Copy

    这应与 operationId 字段在同一级别缩进。

    • 如果尚未将 <security-def-name> 替换为跟踪工作表中 Security Definition Name 字段的值,请将其替换为该值。

    • 请确保在安全定义名称之前包含连字符和空格,如上所示。

    • 确保在冒号后包含空方括号 ([])。

    例如:

    security:
      - snowflakeAccess01: []
    
    Copy
  3. 保存配置文件。

更新后的配置文件应如下所示:

swagger: '2.0'
info:
  title: API Gateway config for Snowflake external function
  description: This configuration file connects the API Gateway resource to the remote service (Cloud Function).
  version: 1.0.0
securityDefinitions:
  snowflakeAccess01:
    authorizationUrl: ""
    flow: "implicit"
    type: "oauth2"
    x-google-issuer: "<API_GCP_SERVICE_ACCOUNT>"
    x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/<API_GCP_SERVICE_ACCOUNT>"
schemes:
  - https
produces:
  - application/json
paths:
  /demo-func-resource:
    post:
      summary: Echo the input
      operationId: operationID
      security:
        - snowflakeAccess01: []
      x-google-backend:
        address: <Cloud Function Trigger URL>
        protocol: h2
      responses:
        '200':
          description: <DESCRIPTION>
          schema:
            type: string
Copy

重新加载更新的文件

更新配置文件后,必须在 Google Cloud Console 中重新加载该文件:

  1. Gateways 页面上,点击网关的名称。

  2. 点击 EDIT

  3. API Config 下,点击标题为 Select a Config 的框。

  4. 选择选项 Create new API config

  5. 在包含 Upload an API Spec 的框中,点击 BROWSE 按钮。

  6. 选择您之前创建的所需 YAML 文件。检查是否具有扩展名 .yaml.yml

  7. 输入 Display Name。使用新的唯一名称,而不是以前使用的名称。

  8. 如果系统要求您执行 Select a Service Account,请选择 App Engine default service account

    如果要创建要在生产中使用的函数(而不是作为示例),则可以选择其他服务账户。

    所选服务账户必须具有适当的权限,包括调用 Google Cloud Function 的权限。

  9. 现在,您应该返回到 API 网关的页面。如果 Config 字段显示旧 API 配置文件的显示名称:

    1. 点击 EDIT

    2. API Config 下,再次找到 Select a Config 框,然后点击该框。

    3. 选择新 API 配置。

    4. 点击 UPDATE 按钮。这将带您返回到 API 网关列表。

    您可能需要等待几分钟才能更新 API Gateway。API 网关名称的左侧可能会出现一个图标,指示正在刷新网关。

要检查刷新是否仍在进行中,请点击网关名称上方的 REFRESH 按钮。网关名称左侧的图标消失后,应完全刷新网关,您可以继续执行下一步。

测试外部函数

若要确保外部函数与新的安全配置文件一起正常工作,请再次调用外部函数。

有关详细信息,请参阅 为 GCP 调用外部函数

下一步

无。您已成功为 GCP 创建外部函数。

语言: 中文