具有Google Cloud功能的微服务Api网关

时间:2019-11-23 10:48:16

标签: google-cloud-platform architecture google-cloud-functions microservices api-gateway

输入

例如,我们有一些服务。

  1. 帐户服务
  2. 产品服务
  3. 付款服务

每个服务都是单独的Google Cloud Function。 每个服务都有其自己的HTTP API。例如,帐户服务具有:

  1. https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/account/sign-up
  2. https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/account/sign-in
  3. https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/account/reset-password

每个服务都有自己的一般文档端点/docs

问题

如何使我的Cloud Functions私有(没有公共访问权限)并将其放置在某些API网关后面?

注释

Google提供了云功能的端点(请参见https://cloud.google.com/endpoints/docs/openapi/get-started-cloud-functions)。 但是,据我了解,端点允许您仅定义yaml OpenAPI文件。

在这个yaml文件中,我可以定义如下内容:

swagger: '2.0'
info:
  title: Cloud Endpoints + GCF
  description: Sample API on Cloud Endpoints with a Google Cloud Functions backend
  version: 1.0.0
host: HOST
schemes:
  - https
produces:
  - application/json
paths:
  /hello:
    get:
      summary: Greet a user
      operationId: hello
      x-google-backend:
        address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net/helloGET
      responses:
        '200':
          description: A successful response
          schema:
            type: string

但就我而言,我需要具有代理我的云功能(例如反向代理)的能力。

4 个答案:

答案 0 :(得分:1)

使用apigee,它是Google云平台的一部分,是针对您的用例而设计的

答案 1 :(得分:1)

您可以使用端点。当然,您必须手动定义OpenAPI yaml文件(版本2.0,而不是3!)。使用通配符和路径翻译定义

...
paths:
  /account/*:
      get:
        summary: sign-up a user
        operationId: sign-up
        x-google-backend:
          address: https://REGION-FUNCTIONS_PROJECT_ID.cloudfunctions.net
          path_translation: APPEND_PATH_TO_ADDRESS
       responses:
          '200':
            description: A successful response
            schema:
              type: string

APPEND_PATH_TO_ADDRESS只需将路径值粘贴到后端定义的末尾。顺便说一句,仅使用此定义,您就可以到达所有私有函数端点和子端点,例如您的招摇文档。

您可以使用API​​ KEY(I wrote an article on this)保护网关,但文档中还有另一种安全解决方案。

但是,您不能使用Endpoint提出的开发人员门户,因为它基于Endpoint yaml文件定义,并且未聚合所有发现的服务定义(在您的/docs路径中)。

答案 2 :(得分:1)

您的问题-我如何使我的Cloud Functions私有(无公共访问权限)并将其放置在某些API网关后面?

如果您想管理Cloud功能访问级别(如开发/更新/部署或调用或无访问权限),则可以通过Cloud IAM服务(https://cloud.google.com/iam/)进行。

除了Apigee(API网关)之外,还有一种很好的机制可以实现这一目标。

在Apigee中,尝试执行以下步骤-

  1. 在端点上(您可以参考-https://docs.apigee.com/
  2. 将Apigee车载终端封装到Apigee API产品中,您可以在其中将API产品配置为仅具有某些API终端。
  3. 将开发者应用程序添加到产品中(您可以在产品名称前添加公共名称,保留名称或私有名称)。您可能希望将多个这样的Developer应用程序连接到不同类型的产品,并为它们获取多个凭据集。现在,根据开发人员的APP(凭据集)所附加的API产品的类型,您可以将Google函数设为公开或私有。

立即查看Apigee提供的OAuth安全性链接-https://www.youtube.com/watch?v=hZbyR8L-IIs

答案 3 :(得分:0)

GCP实现控制访问的方法是通过IAM服务帐户link

在这种情况下,有必要:

  • 将Cloud Function Invoker角色分配给调用此功能的服务(例如App Engine,GKE和Cloud Tasks)的服务帐户。
  • 通过要求IAM权限来限制Cloud功能。 Link

这样做,Cloud Function URL将是私有的,任何未经身份验证的用户将收到403 HTTP错误。

相关问题