本頁適用於 Apigee 和 Apigee 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 的一般程序如下:
- 啟用 VPC Service Controls。
- 建立新的服務範圍。
- 設定服務範圍。
以下將詳細說明這些步驟。
如何使用 Apigee 設定 VPC Service Controls:
-
執行下列指令,為從網路到 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。
-
按照 VPC Service Controls 快速入門中的說明建立新的範圍。建立範圍時,您可以選擇要新增哪些專案至該範圍,以及要保護哪些服務。
針對 Apigee 和 Apigee Hybrid,Google 建議您在建立邊界時保護所有服務,包括 Apigee API。
詳情請參閱「建立服務範圍」。
- 按照「服務範圍詳細資料與設定」一節的說明設定服務範圍。
如要在邊界內新增整合式入口網站,請參閱「在邊界中新增整合式入口網站」。
使用 Apigee Hybrid 設定 VPC Service Controls
Apigee hybrid 支援 VPC Service Controls,但您必須執行其他步驟。將 Apigee hybrid 與 VPC Service Controls 整合的一般程序如下:
- 設定私人連線。
- 保護範圍內的其他服務。
- 設定私人存放區。(私人存放區是指位於邊界內的存放區,只要位於邊界內,不一定是本機存放區)。
- 將 Apigee 映像檔推送至私人存放區。
- 更新覆寫值,以便在混合型安裝和設定程序期間使用私人存放區。
以下程序會詳細說明每個步驟。
如何使用 Apigee hybrid 設定 VPC Service Controls:
- 如「設定連至 Google API 與服務的私人連線」一文所述,請為混合式網路主機設定私人 IP 位址。這包括設定路徑、防火牆規則和 DNS 項目,讓 Google API 存取這些私人 IP。
-
請按照「使用 Apigee 設定 VPC Service Controls」中的步驟操作。
在這個程序中,除了 Apigee 指定的服務外,您必須確保以下服務在範圍內受到保護:
- Anthos 服務網格
- Cloud Monitoring (Stackdriver)
- Google Kubernetes Engine (如果您在 GKE 上執行)
- Google Container Registry (如果您將其用於本機存放區)
如要將這些服務新增至範圍,請按照「服務範圍詳細資料與設定」中的操作說明進行。
- 將 Apigee 映像檔複製到私人存放區:
-
請按照這裡的說明,從 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
-
標記圖片。
以下範例會為美國 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 或其他識別值。
-
將圖片推送至私人存放區。
以下範例會將映像檔推送至美國的 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 或其他識別值。
-
-
更新覆寫檔案,將映像檔網址指向您的私人存放區,如「指定設定覆寫值」一節所述
您必須變更下列元件的圖片網址:
元件名稱 (在覆寫檔案中) 映像檔網址 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-utilityconnectAgent
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-sidecarruntime
your_private_repo/apigee-runtime
synchronizer
your_private_repo/apigee-synchronizer
udca
your_private_repo/apigee-udca
fluentd: your_private_repo/apigee-stackdriver-logging-agentwatcher
your_private_repo/apigee-watcher
- 請按照「將設定套用至叢集」一文的說明,使用 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 和專案編號。下列步驟說明如何取得這些值:
- 使用 gcloud projects list 指令取得 GCP 專案詳細資料,如以下範例所示:
gcloud projects list
這個指令會傳回 GCP 組織中每個專案的專案 ID (位於
PROJECT_ID
欄) 和專案編號 (位於PROJECT_NUMBER
欄)。 -
找出 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 account8675309
-compute@developer.gserviceaccount.com False您要找的服務帳戶電子郵件地址格式如下:
service-GCP_PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com
例如:
service-
8675309
@gcp-sa-apigee.iam.gserviceaccount.com -
使用
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 ETAG04081981
2244340
Default policy
421924c5a97c0Icu8VPC-SC 的政策 ID (也稱為範圍 ID) 是 VPC-SC 服務範圍的 ID,可用於區隔專案與其他服務。也就是
NAME
欄中的值。
授予整合式入口網站邊界存取權的步驟
如要授予整合式入口網站的範圍存取權:
- 收集服務帳戶電子郵件地址和 VPC-SC 的政策 ID,如必要條件所述。
-
在管理員機器上建立條件檔案,指定服務帳戶地址,以便透過邊界授予入口網站存取權。
檔案名稱不限,但必須使用
*.yaml
副檔名。例如:my-portal-access-rules.yaml
。 -
在條件檔案中,新增指定 Apigee 服務帳戶的
members
部分,如以下範例所示:- members: - serviceAccount:
service-
8675309
@gcp-sa-apigee.iam.gserviceaccount.com請注意,只要新增
members
區段即可,不必新增存取層級區段。如要進一步瞭解如何建立條件檔案,請參閱「限制使用者或服務帳戶的存取權」。 - 使用
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
- ACCESS_LEVEL_ID 是新授予的存取層級 ID,例如
- 使用
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.comgcloud
會回應服務帳戶的相關資訊,包括顯示名稱和所屬專案 ID。如果服務帳戶不存在,gcloud
會回應NOT_FOUND
錯誤。
限制
Apigee 與 VPC Service Controls 的整合有以下限制:
- 整合式入口網站需要額外的設定步驟。
- 您必須在服務範圍內部署 Drupal 入口網站。