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