搭配使用 VPC Service Controls 与 Apigee 和 Apigee Hybrid

您正在查看 Apigee X 文档。
查看 Apigee Edge 文档。

Apigee 与 VPC Service Controls 相集成,后者可让您隔离 Google Cloud 项目的资源。这有助于防止数据泄露/渗漏。

本部分介绍如何将 VPC Service Controls 与 Apigee 搭配使用。

概览

VPC Service Controls 定义了一个服务边界,充当一个项目与其他服务之间的边界。服务边界是组织级层的方法,用于保护项目中的 Google Cloud 服务,以降低数据渗漏的风险。

VPC Service Controls 还可以确保边界内对资源具有专用访问权限的客户端无法访问边界外的未授权资源。

如需详细了解服务边界的优势,请参阅 VPC Service Controls 概览

使用 VPC Service Controls 时,请注意:

  • Google Cloud 项目及其关联的运行时都在项目的 VPC Service Controls 边界内。
  • 可以使用 VPC 网络可访问服务功能限制边界内服务之间的交互。

Apigee 和 Apigee Hybrid 均与 VPC Service Controls 集成。如需查看与 VPC Service Controls 集成的产品的完整列表,请参阅支持的产品

对互联网连接的影响

启用 VPC Service Controls 后,互联网访问将被停用:Apigee 运行时将不再与任何公共互联网目标进行通信。您必须通过建立自定义路由来将流量路由到 VPC。请参阅导入和导出自定义路由

使用 Apigee 设置 VPC Service Controls

使用 Apigee 设置 VPC Service Controls 的一般过程如下:

  1. 启用 VPC Service Controls。
  2. 创建新的服务边界。
  3. 配置服务边界。

下面将详细介绍这些步骤。

如需使用 Apigee 设置 VPC Service Controls,请执行以下操作

  1. 通过执行以下命令,为从网络到 Apigee 的对等互连连接启用 VPC Service Controls:

    gcloud services vpc-peerings enable-vpc-service-controls \
      --network=NETWORK_NAME --project=PROJECT_ID

    其中:

    • NETWORK_NAME 是 VPC 对等互连网络的名称。

      如果您在 Apigee 设置过程中使用了默认值,则网络的名称为“默认”。但在生产环境中,这是自定义对等互连网络的名称。

    • PROJECT_ID 是您在 Apigee 设置过程中创建的项目的名称。

    此命令会为您的项目启用 VPC Service Controls。您可以多次执行此命令,以便为多个项目启用 VPC Service Controls。

  2. 按照 VPC Service Controls 快速入门中的说明创建新边界。创建边界时,您需要选择要在该边界中添加的项目以及要保护的服务。

    对于 Apigee 和 Apigee Hybrid,Google 建议您在创建边界时保护所有服务(包括 Apigee API)。

    如需了解详情,请参阅创建服务边界

  3. 配置服务边界,如服务边界详情和配置中所述。

如需在边界内添加集成式门户,请参阅将集成式门户添加到边界

使用 Apigee Hybrid 设置 VPC Service Controls

Apigee Hybrid 支持 VPC Service Controls,但您必须执行一些额外的步骤。Apigee Hybrid 与 VPC Service Controls 集成的一般流程如下所示:

  1. 设置专用连接
  2. 保障边界内的其他服务安全。
  3. 设置专用代码库。(专用代码库是位于边界内的代码库;其只是位于边界内部,不一定是本地代码库。)
  4. 将 Apigee 映像推送到您的专用代码库。
  5. 更新替换以在混合安装和配置期间使用专用代码库。

以下过程将更详细地介绍了上述各个步骤。

如需使用 Apigee Hybrid 设置 VPC Service Controls,请执行以下操作

  1. 按照设置与 Google API 和服务的专用连接中所述,为您的混合网络主机设置专用 IP 地址。这包括配置路由、防火墙规则和 DNS 条目以允许 Google API 访问这些专用 IP。
  2. 按照使用 Apigee 设置 VPC Service Controls 中的步骤操作。

    在此过程中,除了为 Apigee 指定的服务外,您还需确保在边界内的服务的安全:

    • Anthos Service Mesh
    • Cloud Monitoring (Stackdriver)
    • Google Kubernetes Engine(如果在 GKE 上运行)
    • Google Container Registry(如果您要将其用作本地代码库)

    如要将这些服务添加到您的边界内,请按照服务边界详情和配置中的说明进行操作。

  3. 将 Apigee 映像复制到您的专用代码库中:
    1. 按照此处的说明,从 Docker Hub 下载已签名的 Apigee 映像。请务必指定最新版本号。

      例如:

      docker pull google/apigee-installer:1.3.3
      docker pull google/apigee-authn-authz:1.3.3
      docker pull google/apigee-mart-server:1.3.3
      docker pull google/apigee-synchronizer:1.3.3
      docker pull google/apigee-runtime:1.3.3
      docker pull google/apigee-hybrid-cassandra-client:1.3.3
      docker pull google/apigee-hybrid-cassandra:1.3.3
      docker pull google/apigee-cassandra-backup-utility:1.3.3
      docker pull google/apigee-udca:1.3.3
      docker pull google/apigee-stackdriver-logging-agent:1.6.8
      docker pull google/apigee-prom-prometheus:v2.9.2
      docker pull google/apigee-stackdriver-prometheus-sidecar:0.7.5
      docker pull google/apigee-connect-agent:1.3.3
      docker pull google/apigee-watcher:1.3.3
      docker pull google/apigee-operators:1.3.3
      docker pull google/apigee-kube-rbac-proxy:v0.4.1
    2. 标记映像。

      以下示例标记位于美国境内的 GCR 代码库中的映像:

      docker tag google/apigee-installer:1.3.3 us.gcr.io/project_ID/apigee-installer:1.3.3
      docker tag google/apigee-authn-authz:1.3.3 us.gcr.io/project_ID/apigee-authn-authz:1.3.3
      docker tag google/apigee-mart-server:1.3.3 us.gcr.io/project_ID/apigee-mart-server:1.3.3
      docker tag google/apigee-synchronizer:1.3.3 us.gcr.io/project_ID/apigee-synchronizer:1.3.3
      docker tag google/apigee-runtime:1.3.3 us.gcr.io/project_ID/apigee-runtime:1.3.3
      docker tag google/apigee-hybrid-cassandra-client:1.3.3 us.gcr.io/project_ID/apigee-hybrid-cassandra-client:1.3.3
      docker tag google/apigee-hybrid-cassandra:1.3.3 us.gcr.io/project_ID/apigee-hybrid-cassandra:1.3.3
      docker tag google/apigee-cassandra-backup-utility:1.3.3 us.gcr.io/project_ID/apigee-cassandra-backup-utility:1.3.3
      docker tag google/apigee-udca:1.3.3 us.gcr.io/project_ID/apigee-udca:1.3.3
      docker tag google/apigee-stackdriver-logging-agent:1.6.8 us.gcr.io/project_ID/apigee-stackdriver-logging-agent:1.6.8
      docker tag google/apigee-prom-prometheus:v2.9.2 us.gcr.io/project_ID/apigee-prom-prometheus:v2.9.2
      docker tag google/apigee-stackdriver-prometheus-sidecar:0.7.5 us.gcr.io/project_ID/apigee-stackdriver-prometheus-sidecar:0.7.5
      docker tag google/apigee-connect-agent:1.3.3 us.gcr.io/project_ID/apigee-connect-agent:1.3.3
      docker tag google/apigee-watcher:1.3.3 us.gcr.io/project_ID/apigee-watcher:1.3.3
      docker tag google/apigee-operators:1.3.3 us.gcr.io/project_ID/apigee-operators:1.3.3
      docker tag google/apigee-kube-rbac-proxy:v0.4.1 us.gcr.io/project_ID/apigee-kube-rbac-proxy:v0.4.1

      虽然并非强制性要求,但 Google 建议您在每个图片的代码库路径中添加项目 ID 或其他标识值。

    3. 将映像推送到您的专用代码库。

      以下示例将映像推送到美国境内的 GCR 代码库:

      docker push us.gcr.io/project_ID/apigee-installer:1.3.3
      docker push us.gcr.io/project_ID/apigee-authn-authz:1.3.3
      docker push us.gcr.io/project_ID/apigee-mart-server:1.3.3
      docker push us.gcr.io/project_ID/apigee-synchronizer:1.3.3
      docker push us.gcr.io/project_ID/apigee-runtime:1.3.3
      docker push us.gcr.io/project_ID/apigee-hybrid-cassandra-client:1.3.3
      docker push us.gcr.io/project_ID/apigee-hybrid-cassandra:1.3.3
      docker push us.gcr.io/project_ID/apigee-cassandra-backup-utility:1.3.3
      docker push us.gcr.io/project_ID/apigee-cassandra-backup-utility:1.3.3
      docker push us.gcr.io/project_ID/apigee-udca:1.3.3
      docker push us.gcr.io/project_ID/apigee-stackdriver-logging-agent:1.6.8
      docker push us.gcr.io/project_ID/apigee-prom-prometheus:v2.9.2
      docker push us.gcr.io/project_ID/apigee-stackdriver-prometheus-sidecar:0.7.5
      docker push us.gcr.io/project_ID/apigee-connect-agent1.3.3
      docker push us.gcr.io/project_ID/apigee-watcher1.3.3
      docker push us.gcr.io/project_ID/apigee-operators1.3.3
      docker push us.gcr.io/project_ID/apigee-kube-rbac-proxy:v0.4.1

      虽然并非强制性要求,但 Google 建议您在每个图片的代码库路径中添加项目 ID 或其他标识值。

  4. 按照指定配置替换中所述,更新替换文件以将图片网址指向您的专用代码库。

    请务必更改以下组件的图片网址:

    组件名称(在替换文件中) 映像网址
    ao your_private_repo/apigee-operators
    authz your_private_repo/apigee-authn-authz
    cassandra your_private_repo/apigee-hybrid-cassandra

    auth: your_private_repo/apigee-hybrid-cassandra-client
    backup: your_private_repo/apigee-cassandra-backup-utility
    restore: your_private_repo/apigee-cassandra-backup-utility
    connectAgent your_private_repo/apigee-connect-agent
    installer your_private_repo/apigee-installer
    kubeRBACProxy your_private_repo/apigee-kube-rbac-proxy
    logger your_private_repo/apigee-stackdriver-logging-agent
    mart your_private_repo/apigee-mart-server
    metrics your_private_repo/apigee-prom-prometheus

    sdSidecar: your_private_repo/apigee-stackdriver-prometheus-sidecar
    runtime your_private_repo/apigee-runtime
    synchronizer your_private_repo/apigee-synchronizer
    udca your_private_repo/apigee-udca

    fluentd: your_private_repo/apigee-stackdriver-logging-agent
    watcher your_private_repo/apigee-watcher

  5. 按照将配置应用于集群中所述,使用 GCR 中的新映像应用您的更改。

向集成式门户授予对边界的访问权限

VPC-SC 支持向集成式门户授予 VPC-SC 访问权限级别,但此过程需要执行额外的步骤,如本部分中所述。

如果您不为集成式门户授予访问权限级别,则集成式门户无法用于支持 VPC-SC 的 Apigee 组织。

向门户授予访问权限级别:

  • 不要将集成式门户放入边界内。
  • 允许从边界外访问集成式门户。
  • 允许 VPC-SC 保护的 Apigee 数据(例如应用数据)向 VPC-SC 边界外的门户用户公开。

如需了解详情,请参阅允许从边界外访问受保护的资源

前提条件

在向集成门户授予边界访问权限之前,必须为项目启用 Access Context Manager API(如果尚未启用)。您可以在 Google Cloud Console 中或使用 services enable 命令执行此操作。

如需检查 API 是否已启用,请按照“第 2 步:启用 Apigee API”中的说明检查 services list 命令的输出。

此外,您还必须拥有使用该门户的项目的服务帐号电子邮件地址。如要获取该地址,您需要 GCP 项目 ID 和项目编号。以下步骤介绍了如何获取这些值:

  1. 使用 projects list 命令获取 GCP 项目详细信息,如以下示例所示:
    gcloud projects list

    此命令会返回 GCP 组织中每个项目的 ID(位于 PROJECT_ID 列中)和编号(位于 PROJECT_NUMBER 列中)。

  2. 标识 Apigee 服务帐号电子邮件地址。该帐号与您在第 3 步:创建组织中预配组织时 Apigee 安装程序创建的帐号相同。

    如需获取此电子邮件地址,请使用 iam service-accounts list 命令,该命令使用以下语法:

    gcloud iam service-accounts list --project GCP_PROJECT_ID

    例如:

    gcloud iam service-accounts list --project my-project
    
    DISPLAY NAME                              EMAIL                                                DISABLED
    Apigee default service account            service-8675309@gcp-sa-apigee.iam.gserviceaccount.com  False
    Compute Engine default service account     8675309-compute@developer.gserviceaccount.com          False

    您需要的服务帐号是其电子邮件地址与以下格式匹配的服务帐号:
    service-GCP_PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com

    例如:
    service-8675309@gcp-sa-apigee.iam.gserviceaccount.com

  3. 使用 access-context-manager policies list 命令获取政策(或边界)ID。将组织 ID 传递给此命令,如以下示例所示:

    gcloud access-context-manager policies list --organization=organizations/GCP_ORG_ID

    gcloud 以与指定组织关联的政策列表响应;例如:

    gcloud access-context-manager policies list --organization=organizations/2244340
    
    NAME          ORGANIZATION      TITLE                 ETAG
    04081981      2244340           Default policy        421924c5a97c0Icu8

    VPC-SC 的 政策 ID(也称为边界 ID)是 VPC-SC 服务边界的 ID,充当您的项目与其他服务之间的边界。该值是 NAME 列中的值。

向边界授予集成门户访问权限的步骤

要向边界授予集成门户的访问权限,请执行以下操作

  1. 收集服务帐号电子邮件地址和 VPC-SC 的政策 ID,如前提条件中所述。
  2. 在管理员机器上创建一个条件文件,其中指定将通过边界授予门户访问权限的服务帐号地址。

    该文件可以采用任何所需的名称,但它必须以 *.yaml 为扩展名。例如 my-portal-access-rules.yaml

  3. 在条件文件中,添加一个用于指定 Apigee 服务帐号的 members 部分,如以下示例所示:

    - members:
      - serviceAccount:service-8675309@gcp-sa-apigee.iam.gserviceaccount.com

    请注意,添加 members 部分就足够了;而无需添加访问权限级别部分。如需详细了解如何创建条件文件,请参阅按用户或服务帐号限制访问权限

  4. 使用 access-context-manager levels create 命令创建访问权限级别;例如:
    gcloud access-context-manager levels create ACCESS_LEVEL_ID \
      --title ACCESS_LEVEL_TITLE \
      --basic-level-spec PATH/TO/CONDITIONS_FILE.yaml \
      --policy=POLICY_ID

    其中:

    • ACCESS_LEVEL_ID 是要授予的新访问权限级别的标识符;例如 my-portal-access-level
    • ACCESS_LEVEL_TITLE 是访问权限级别的标题。您可以使用任何名称,但 Google 建议您为其提供一个有意义的值,以便您和其他管理员知道它适用的内容。例如,我的门户访问权限级别。
    • CONDITIONS_FILE 是您在上一步中创建的 YAML 文件的路径。
    • POLICY_ID 是政策或边界 ID。

    例如:

    gcloud access-context-manager levels create my-portal-access-level \
      --title My Portal Access Level \
      --basic-level-spec ~/my-portal-access-rules.yaml \
      --policy=04081981
  5. 使用 access-context-manager perimeters update 命令和新的访问权限级别更新边界:
    gcloud access-context-manager perimeters update POLICY_ID \
      --add-access-levels=ACCESS_LEVEL_ID \
      --policy=POLICY_ID

    例如:

    gcloud access-context-manager perimeters update 04081981 \
      --add-access-levels=my-portal-access-level \
      --policy=04081981

问题排查

请检查以下各项:

  • 如果 GCP 项目未启用 Access Context Manager API,则 gcloud 会在您尝试列出或设置政策时提示您启用它。
  • 在获取组织的详细信息时,请务必使用 GCP 组织 ID,而不是 Apigee 组织 ID。
  • 本部分介绍的某些命令需要提升的权限;例如,要获取有关项目的服务帐号的详细信息,您必须是该项目的所有者。
  • 如需验证服务帐号是否存在,请执行 iam service-accounts describe 命令,如以下示例所示:

    gcloud iam service-accounts describe service-8675309@gcp-sa-apigee.iam.gserviceaccount.com

    gcloud 返回有关服务帐号的信息,包括其所属的显示名和项目 ID。如果服务帐号不存在,则 gcloud 将返回 NOT_FOUND 错误。

限制

Apigee 与 VPC Service Controls 的集成具有以下限制:

  • 集成式门户需要执行额外的配置步骤。
  • 您必须在服务边界内部署 Drupal 门户。