搭配使用 VPC Service Controls、Apigee 和 Apigee hybrid

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

Apigee 可與 VPC Service Controls 整合,讓您隔離 Google Cloud 專案的資源。這有助於防止資料外洩/竊取。

本節說明如何搭配 Apigee 使用 VPC Service Controls。

總覽

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=SHARED_VPC_NETWORK --project=PROJECT_ID

    其中:

    • SHARED_VPC_NETWORK 是共用虛擬私有雲網路的名稱。
    • 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 服務網格
    • 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 建議您在每個映像檔的 repo 路徑中加入專案 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 建議您在每個映像檔的 repo 路徑中加入專案 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 範圍外之 Portal 使用者公開。

詳情請參閱「允許服務範圍外的受保護資源存取要求」。

必要條件

如要授予整合式入口網站的範圍存取權,您必須先為專案啟用 Access Context Manager API (如果尚未啟用)。您可以在 Cloud 主控台中執行這項操作,也可以使用 gcloud services enable 指令。

如要確認 API 是否已啟用,請查看 gcloud services list 指令的輸出內容,如步驟 2:啟用 Apigee API 所述。

此外,您必須擁有入口網站所用專案的服務帳戶電子郵件地址。如要取得這項資訊,您需要 GCP 專案 ID 和專案編號。下列步驟說明如何取得這些值:

  1. 使用 gcloud 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 是新授予的存取層級 ID,例如 my-portal-access-level
    • ACCESS_LEVEL_TITLE 是存取層級的標題,標題可以是任何內容,但 Google 建議您提供有意義的值,以便您和其他管理員瞭解該標題適用於哪些內容。例如「我的 Portal 存取層級」。
    • 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 會在您嘗試列出或設定政策時,提示您啟用該 API。
  • 請務必使用 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 入口網站。