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

本頁內容適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

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

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

總覽

VPC Service Controls 會定義「服務範圍」,做為專案和其他服務之間的界線。Service perimeter 是機構層級的方法,可保護專案中的 Google Cloud 服務,降低資料竊取風險。

VPC Service Controls 也能確保範圍內具備資源私人存取權的用戶端,無法存取範圍外未獲授權的資源。

如要詳細瞭解 service perimeter 的優點,請參閱「VPC Service Controls 總覽」。

使用 VPC Service Controls 時,請注意下列事項:

  • Google Cloud 專案和相關聯的執行階段都包含在該專案的 VPC Service Controls 範圍內。
  • 您可以使用「可透過虛擬私有雲網路存取的服務」功能,限制 perimeter 內服務之間的互動。

Apigee 和 Apigee Hybrid 都與 VPC Service Controls 整合。如要查看與 VPC Service Controls 整合的完整產品清單,請參閱「支援的產品」。

對網路連線的影響

啟用 VPC Service Controls 後,網際網路存取權會遭到停用,Apigee 執行階段將無法再與任何公開網際網路目標通訊。您必須建立自訂路徑,才能將流量轉送至虛擬私有雲。請參閱「匯入及匯出自訂路徑」。

使用 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 是代管共用 VPC 網路的專案名稱,不是用於建立 Apigee 機構的專案。

    這項指令會為專案啟用 VPC Service Controls。您可以多次執行這項指令,為多個專案啟用 VPC Service Controls。

  2. 按照 VPC Service Controls 快速入門導覽課程中的說明,建立新的範圍。建立範圍時,您可以選擇要在範圍內新增哪些專案,以及要保護哪些服務。

    對於 Apigee 和 Apigee Hybrid,Google 建議您在建立安全防護範圍時,保護所有服務,包括 Apigee API

    詳情請參閱「建立 service perimeter」。

  3. 按照「服務範圍詳細資料與設定」一文的說明,設定服務範圍。

如要在 perimeter 中新增整合式入口,請參閱「在 perimeter 中新增整合式入口」。

使用 Apigee Hybrid 設定 VPC Service Controls

Apigee hybrid 支援 VPC Service Controls,但您必須執行額外步驟。將 Apigee Hybrid 與 VPC Service Controls 整合的一般程序如下:

  1. 設定私人連線。
  2. 保護範圍內的其他服務。
  3. 設定私人存放區。(私人存放區是指位於 perimeter 內的存放區,只要位於 perimeter 內,不一定要是本機存放區)。
  4. 將 Apigee 映像檔推送至私人存放區。
  5. 在混合式安裝和設定程序中,更新覆寫項目以使用私人存放區。

以下程序會詳細說明每個步驟。

如要使用 Apigee Hybrid 設定 VPC Service Controls,請按照下列步驟操作:

  1. 為混合式網路主機設定私人 IP 位址,如「設定連至 Google API 和服務的私人連線」一文所述。這包括設定路徑、防火牆規則和 DNS 項目,讓 Google API 存取這些私人 IP。
  2. 按照「使用 Apigee 設定 VPC Service Controls」一文中的步驟操作。

    在這個過程中,除了為 Apigee 指定的服務外,您也必須確保範圍內下列服務的安全:

    • Anthos 服務網格
    • Cloud Monitoring (Stackdriver)
    • Google Kubernetes Engine (如果您在 GKE 上執行)
    • Google Container Registry (如果您將這個服務做為本機存放區)

    如要將這些服務新增至 perimeter,請按照「Service perimeter 詳細資料和設定」中的操作說明進行。

  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 中的新映像檔套用變更。

授予整合式入口網站存取 perimeter 的權限

VPC-SC 支援將 VPC-SC 存取層級授予整合式入口網站,但這個程序需要額外步驟,詳情請參閱本節。

如果未授予整合式入口網站存取層級,則整合式入口網站不適用於已啟用 VPC-SC 的 Apigee 機構。

授予入口網站存取層級:

  • 不會將整合式入口網站放在周邊。
  • 允許從服務範圍外部存取整合式入口網站。
  • 允許 VPC-SC 保護的 Apigee 資料 (例如應用程式資料) 暴露給 VPC-SC 範圍外的入口網站使用者。

詳情請參閱「允許存取 service perimeter 外的受保護資源」。

必要條件

如要授予整合式入口網站 perimeter 存取權,請先為專案啟用 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 指令取得政策 (或 perimeter) 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」欄中的值。

授予整合式入口網站周邊存取權的步驟

如要授予整合式入口網站 perimeter 存取權,請按照下列步驟操作:

  1. Prerequsites一文所述,收集服務帳戶電子郵件地址和 VPC-SC 的政策 ID。
  2. 在管理員電腦上建立條件檔案,指定要透過安全防護範圍授予入口網站存取權的服務帳戶地址。

    檔案名稱不限,但必須使用 *.yaml 副檔名。例如 my-portal-access-rules.yaml

  3. 在條件檔案中,新增 members 區段,指定 Apigee 服務帳戶,如下列範例所示:

    - 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 建議您提供有意義的值,方便您和其他管理員瞭解標題的適用對象。例如「我的入口網站存取層級」。
    • 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 入口網站。