クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

Cloud Endpoints for Cloud Functions #gcpug #gcpja

BackendのCloud FunctionsのAPI managementできる Extensible Service Proxy(以下ESP)が可能に。
Google Accountによる認証、JSSON Web Token (JWT)などをESPで担うこともできる。
また、Cloud Endpointsにて、Quota制御なども

https://cloud.google.com/endpoints/docs/openapi/get-started-cloud-functions

Stackdriver loggingに下記が記録されているので、runtime自体nginxが動いていると思われる。

 2019-06-09 12:07:55.420 JST
2019/06/09 03:07:55 [warn] 1#1: Using trusted CA certificates file: /etc/nginx/trusted-ca-certificates.crt

手順は上記で使えるようになります。
ESP用のRuntimeを、Cloud Runでデプロイするようになります。

 gcr.io/endpoints-release/endpoints-runtime-serverless:1.30.0 

ENDPOINTS_SERVICE_NAMEを上記Cloud RunにデプロイしたRuntimeの環境変数に設定しておく必要があるが、
「Getting Started with Endpoints for Cloud Functions」のドキュメントには下記記載となっているが、ドキュメントが古いのか、configuurations updateコマンドはない。

 gcloud beta run configurations update \
--service CLOUD_RUN_SERVICE_NAME \
--set-env-vars ENDPOINTS_SERVICE_NAME=YOUR_SERVICE_NAME 

下記のようにする必要があります。

 gcloud beta run services update CLOUD_RUN_SERVICE_NAME \
--set-env-vars ENDPOINTS_SERVICE_NAME=YOUR_SERVICE_NAME 

Cloud FunctionsのIAM Supportで、Extensible Service Proxyからのトラフィックのみ通すこともできるようになります。
(ただし、本機能はαユーザのみ使うことが可能)

 gcloud alpha functions add-iam-policy-binding FUNCTION_NAME \
--member "serviceAccount:ESP_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role "roles/cloudfunctions.invoker" 

JSON Web Token (JWT)による認証で、service accountを使う例。

https://cloud.google.com/endpoints/docs/openapi/service-account-authentication

上記チュートリアル内で、roles/serviceAccountTokenCreaterを、service accountの権限に付与するのだが、gcloudだと以下エラーとなってしまう。
console上だと問題ないのだが。

 $ gcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:hello-test@PROJECT_ID.iam.gserviceaccount.com --role roles/serviceAccountTokenCreater
ERROR: Policy modification failed. For a binding with condition, run "gcloud alpha iam policies lint-condition" to identify issues in condition.
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Role roles/serviceAccountTokenCreater is not supported for this resource. 

JWT token認証スキップしようとすると、下記となり、バックエンド(Cloud Functions)に飛ばなくなります。

 {
"code": 16,
"message": "JWT validation failed: Missing or invalid credentials",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "auth"
}
]
}

また、Auth0、Firebaseなどとも連携できます。
Using Firebase to authenticate users https://cloud.google.com/endpoints/docs/openapi/authenticating-users-firebase
Using Auth0 to authenticate users https://cloud.google.com/endpoints/docs/openapi/authenticating-users-auth0

JWT validationのサンプルは下記で公開されています。
https://cloud.google.com/endpoints/docs/openapi/service-account-authentication#python

コメントは受け付けていません。