【问题标题】:hide app from public in Google App Engine在 Google App Engine 中向公众隐藏应用
【发布时间】:2016-03-06 04:40:36
【问题描述】:

我已经阅读了一些关于身份验证的信息,但我认为我可以关闭我的应用的可见性和/或对公众的访问。这对于 alpha 测试很有用,所以肯定存在这样的设置吗?还是我需要将这些东西构建到应用程序本身中?

【问题讨论】:

  • 您的应用(如果存在这样的设置,假设存在)如何区分您和其他人?
  • Google 身份验证 - 但我明白你的意思。
  • 丹 - 我认为你的问题已经回答了我的问题,答案是“不”。
  • 我现在只是使用 php 来“隐藏”它:stackoverflow.com/questions/286938/…

标签: google-app-engine


【解决方案1】:

如果没有某种身份验证机制,您的应用无法真正区分来自您的请求和来自其他人的请求。

花一点时间来分析您的应用的身份验证要求并可能现在就完成它可能是一个好主意,同时仍处于 Alpha 阶段。 根据解决方案,集成可能相当简单。

Google 提供多种身份验证选项,请参阅 What is the difference between Google identity toolkit, Google OAauth and Google+ sign in

我个人选择 GIT 套件是为了简单、灵活和方便。

【讨论】:

    【解决方案2】:

    可以保护您应用的网址,以便只有授权用户或管理员才能访问它们。

    这可以通过app.yaml file(Python、PHP 和 Go 应用程序)或web.xml deployment descriptor(Java 应用程序)来完成。

    【讨论】:

      【解决方案3】:

      选项 A: 只允许管理员访问,在 yourapp.yaml 中

      - url: /*
        login: admin
        script: yourappname.app
      

      选项 B: 如果你有一个静态 IP(或者每周有几次更改),你可以检测请求的 IP,并让只从你的 IP 运行:

      class yourHandler(webapp2.RequestHandler):
          def get(self):
              userIP=self.request.remote_addr
              if userIP=="220.123.211.120"  # Change this with your static IP
                  ...your code for authorized users.
      

      选项 C: 检查请求域(确保从您自己的授权域调用),并放置一些安全客户端。

      class yourHandler(webapp2.RequestHandler):
          def get(self):
              origin=self.request.headers['Origin']
              if origin=="www.yourdomain.com"  # Change this with your domain/subdomain
                  ...your code for authorized users.
      
             # I recommend to put also the CORS headers for your own domain
              self.response.headers['Access-Control-Allow-Origin'] = "www.yourdomain.com"
      

      就我个人而言,我混合使用了这三个选项以及自定义身份验证来访问私人内容。

      【讨论】:

        【解决方案4】:

        默认情况下,每个服务都是公开的。通过更改您想要的服务的 --ingress 设置来单独更改它。

        gcloud beta app services update <service-name> --ingress <value>

        1. all(默认):对互联网公开。
        2. internal-only:只有同一个云项目中的资源可以访问。
        3. internal-and-cloud-load-balancing:只能访问同一个云项目中的资源。这些请求来自已配置的 Cloud Load Balancing。

        1个网关+一堆微服务架构示例:

        gcloud beta app services update ms-payment --ingress internal-only gcloud beta app services update my-backend-gateway --ingress all

        这样,ms-payment 只能由同一 Cloud Project 中的资源访问,即使它们位于不同的 VPC 中。

        参考文档:https://cloud.google.com/appengine/docs/standard/java11/application-security#ingress_controls

        【讨论】:

        • 我试过这样做,但现在我得到请求的资源上没有“Access-Control-Allow-Origin”标头。错误,直到我将入口更改为内部时才发生。我知道我正在设置标题,因为我在邮递员上进行了测试,问题只有在入口设置为内部时才开始。任何想法为什么会这样?
        【解决方案5】:

        我最近发现你也可以使用IAP (Identity-Aware Proxy) IA-what? 我找到了一个在 App Engine 上实现它的教程。 Tutorial for App Engine.

        所以我不想依赖我自己的身份验证实现,因为我不是专家,而且安全性是很难快速学习的东西。一言以蔽之

        1. 部署IAP step 1
        2. 将您的应用引擎(或整个范围)添加到您的IAP
        3. 在左侧面板step 3 上添加您的授权电子邮件。供访问使用:

        受 IAP 保护的 Web 应用用户:授予对应用和其他 HTTPS 的访问权限 使用 IAP 的资源。

        我的个人意见:尝试实施尽可能多的安全措施(不要只依赖一个系统),通常它们可能会失败。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-15
          • 1970-01-01
          • 1970-01-01
          • 2012-05-07
          • 2021-11-26
          相关资源
          最近更新 更多