API を管理するためのプラットフォームである Apigee X について、基本的な使い方を記載します。Apigee は 2016 年に Google によって買収されており、Apigee Edge という名称で Google Cloud のサービスに加わりました。2021 年に Apigee X という名称の GCP-native なサービスが開始されました。
似たサービスである Cloud Endpoints や、Cloud Functions/Cloud Run 等の serverless サービスをバックエンドとする Cloud API Gateway は、GCP 内に閉じており、機能としてもシンプルなものが提供されます。
関連資料:
- Google to acquire Apigee 2016/9/8
- Google Cloud API Gateway is now available in public beta 2020/9/8
- The time for digital excellence is here—Introducing Apigee X 2021/2/5
Private Services Access
Apigee 社 (Google) によって管理される VPC と顧客管理の VPC の二つによって構成されます。これら二つの VPC は VPC network peering によって接続されます。
より正確には、VPC network peering の技術を利用した Private Services Access によって接続されます。似た名称の機能が複数存在するため注意します。Private "Service" Access ではありません。"Services" は複数形です。
- Private Google Access および Private Service Connect と区別します。
- Private Google Access は、外部 IP を持たない VM が Google API を利用するための機能です。
- Private Service Connect は、Service Directory に登録された Google API や SaaS API を、顧客 VPC 内で定めた任意の IP から利用するための機能です。
- Serverless VPC Access と区別します。
- Serverless VPC Access および Private Services Access はどちらも、Google サービスのリソースに顧客 VPC の内部 IP を持たせます。
- Serverless VPC Access は、Google サービスのリソースが、顧客 VPC 内のリソースにアクセスします。
- Private Services Access は、顧客 VPC 内のリソースが、Google サービスのリソースにアクセスします。
参考資料: Private access options for services
Cloud SQL で Private Services Access を利用する例
VPC → PRIVATE SERVICE CONNECTION → ALLOCATED RANGES FOR SERVICES → ALLOCATE IP RANGE をクリックして IP レンジを予約します。
PRIVATE CONNECTIONS TO SERVICES をクリックして Service Directory への connection を作成します。
VPC network peering が Google 管理の VPC である servicenetworking に対して作成されていることも確認できます。
例えば、Cloud SQL インスタンスを作成する際に、予約した IP レンジを指定すると、Cloud SQL インスタンスに対して、VPC 内から内部 IP でアクセス可能となります。
初期セットアップ
以下は eval (評価版) を Wizard でセットアップする例です。プロジェクトID を指定します。
補足: eval (評価版) における無料枠は、Apigee 管理の VPC 内リソースに対して適用されます。顧客管理 VPC 内の VM や Load Balancer は対象外です。
API を有効化した後に、ネットワーク関連の設定を行います。
VPC を選択します。前述の Private Services Access で利用する IP レンジも指定します。
Private Services Access が利用する VPC network peering が作成されていることが確認できます。
割り当てられた IP レンジです。
Private Services Access です。
Apigee API を利用して Apigee organization を作成します。
リージョンを指定します。
利用者が Apigee にアクセスする際の経路を指定します。
インターネットからアクセスする場合は以下のようにします。独自にドメインを指定することもできます。
Load balancer の backend となる Managed Instance Group (MIG) の subnet を指定します。
セットアップが完了すると、以下のような表示になります。
作成された HTTP Load Balancer です。
作成された Instance Template です。
作成された Managed Instance Group (MIG) です。
作成された VM です。
しばらく待つと、以下の API Proxy にアクセスできます。
$ curl -sS https://34.149.134.44.nip.io/hello-world
Hello, Guest!
Proxy が複数登場するため分かりづらいですが、上記 MIG の VM も Proxy です。MIG の Proxy 先が API Proxy です。API Proxy が Proxy する先が、実際の API です。
実際には API Proxy を複数まとめて API Product としてユーザに提供します。
API Proxy は Apigee 管理の Instance で稼働します。Instance には Private Services Access で利用する IP レンジ内の IP が付与されていることが確認できます。
VPC Service Controls の併用
Apigee X の Customer VPC のプロジェクトを VPC-SC に含めることができます。
関連資料:
Private Services Access 先の VPC 内のリソース
VPC-SC を設定済みであっても、API Proxy からインターネット上の Target を指定可能です。
$ curl -sS https://34.149.134.44.nip.io/hello-world
Hello, Guest!
gcloud services vpc-peerings enable-vpc-service-controls を利用することにより、Private Services Access の VPC network peering で接続された先の VPC 内のリソースからの通信を Customer VPC にルーティングさせることができます。
username@cloudshell:~ (myproject-20211206)$ gcloud services vpc-peerings enable-vpc-service-controls --network=myvpc --project=myproject-20211206
Operation "operations/evsc.p28-464464998635-294c81f8-4399-4737-8233-71a04f5d5c42" finished successfully.
$ curl -sS https://34.149.134.44.nip.io/hello-world
{"fault":{"faultstring":"The Service is temporarily unavailable","detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable"}}}
Both the Google Cloud project and its associated runtime are incuded within that project's VPC Service Controls perimeter.
https://cloud.google.com/apigee/docs/api-platform/security/vpc-sc
When VPC Service Controls are enabled, access to the internet is disabled: the Apigee runtime will no longer communicate with any public internet target.
https://cloud.google.com/apigee/docs/api-platform/security/vpc-sc
Customer VPC 内の Target
インターネット上の API にアクセスしたい場合は、一旦 Customer VPC の VM にルーティングする必要があります。
You have to route traffic to your VPC by establishing custom routes.
https://cloud.google.com/apigee/docs/api-platform/security/vpc-sc
Cloud Storage へのアクセス
以下の二つの Cloud Storage Bucket を用いて実験してみます。Cloud Shell で実行すると、どちらもパブリックにアクセスできることが分かります。
username@cloudshell:~ (myproject-20211206)$ gsutil ls gs://gcp-public-data-landsat/
gs://gcp-public-data-landsat/index.csv.gz
gs://gcp-public-data-landsat/LC08/
gs://gcp-public-data-landsat/LE07/
gs://gcp-public-data-landsat/LM01/
gs://gcp-public-data-landsat/LM02/
gs://gcp-public-data-landsat/LM03/
gs://gcp-public-data-landsat/LM04/
gs://gcp-public-data-landsat/LM05/
gs://gcp-public-data-landsat/LO08/
gs://gcp-public-data-landsat/LT04/
gs://gcp-public-data-landsat/LT05/
gs://gcp-public-data-landsat/LT08/
username@cloudshell:~ (myproject-20211206)$ gsutil ls gs://apigee-5g-saas/
gs://apigee-5g-saas/apigee-envoy-proxy-release/
gs://apigee-5g-saas/apigee-southbound-nat-release/
VPC-SC を Cloud Storage API についても設定すると、MIG で管理される VM 内では以下のようになります。
username@apigee-proxy-3ksw:~$ gsutil ls gs://gcp-public-data-landsat/
AccessDeniedException: 403 Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: uCVEeFd2EHek3OrPMYPi1gbFi7k1QN0WGlJrYDRqFy4Vmwu82Bng9Q
username@apigee-proxy-3ksw:~$ gsutil ls gs://apigee-5g-saas/
gs://apigee-5g-saas/apigee-envoy-proxy-release/
gs://apigee-5g-saas/apigee-southbound-nat-release/
VM の startup-script-url
で指定された Bucket については、VPC-SC が存在していてもアクセスできることが分かります。
apigee.google.com について
Cloud Identity の Google サービスへのアクセス制御
Apigee X の apigee.google.com は 2021-12-19 現在、Cloud Identity のサービスアクセス制御に対応していません。「Additional services without individual control」に属するため、以下のページで ON/OFF を制御する必要があります。
関連資料: Manage access to services that aren't controlled individually
BeyondCorp Enterprise IP 制限
以下のページで言及されている BeyondCorp Enterprise の IP アクセス制限は apigee.google.com へのアクセスについては機能しません。
IP 制限を実施したい場合は、BeyondCorp Enterprise ではなく VPC-SC を設定する必要があります。
関連記事
- GKE における Node および Pod の autoscalingGoogle Kubernetes Engine (GKE) における autoscaling について、用語の意味を整理します。 GKE の機能による Node の autoscaling GKE のクラスタには Standard と Autopilot の二種類が存在します。 Autopilot の場合は Node は Google によって管理されるため、自動で autoscaling され...
- Snowflake におけるネットワーク関連の設定本ページではネットワーク関連の設定について記載します。 Network Policy によるアクセス元 IP 制限 IPv4 で指定します。IPv6 は 2021/9/21 時点では利用できません。 allowed list で許可されていない IP は block されます。 allowed list が /24 等で指定されており、その一部を
- VPC Service Controls に関する雑多な事項の整理VPC Service Controls (VPC-SC) に関する雑多な事項を記載します。 Private Google Access の基本形 Private Google Access は外部 IP を持たない VM のための機能です。VPC の機能ですが、VPC-SC と関連するため基本事項を記載します。 [Private Google Access](ht
- AWS IAM Role を GCP から STS 認証で利用する設定例GCP から AWS IAM Role を利用するための設定例を記載します。 GCP Service Account の作成 Service Account を作成して Unique ID を確認します。 AWS IAM Role の作成 Trust relationship の設定は Web Identity を選択します。Identity Provider
- Amazon Comprehend を GCP VPC 内から実行する設定の例 (Public Internet 接続なし)GCP DLP に相当する AWS サービスに Amazon Comprehend が存在します。GCP VPC 内から Public Internet を経由せずに利用する設定の例を記載します。 AWS VPC と GCP VPC の作成 クラウド 項目 値 AWS VPC region ap-northeast-1 AWS VPC CIDR 10.2.0.0/16 AWS ap-north