搭配使用 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 範圍。
  • 您可以使用虛擬私有雲網路可存取的服務功能,限制服務範圍內服務之間的互動。

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

    詳情請參閱「建立服務範圍」。

  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. 如要為混合式網路主機設定私人 IP 位址,請參閱「設定連至 Google API 與服務的私人連線」。這包括設定路徑、防火牆規則和 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 建議您在每個映像檔的存放區路徑中,加入專案 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 (如果尚未啟用)。您可以在 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. 在條件檔案中,新增 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 入口網站。