【问题标题】:Serving static page from GCS with access restrictions从 GCS 提供具有访问限制的静态页面
【发布时间】:2020-11-14 15:15:52
【问题描述】:

我在谷歌云存储上提供一个静态页面。只要它是公开的,它就可以很好地工作。现在我设置了 acl,以便只有一组用户可以读取存储,未经身份验证的用户被重定向到谷歌身份验证。现在的问题是,网站的静态内容,如 javascript 和 css 无法再找到,我在那里得到 404 错误。静态内容也在存储桶中,并且可以与公共 URL 一起使用。使用经过身份验证的 url 时,它不再起作用了。

我尝试提供访问控制页面是否正确?我猜是这样,因为它可以工作,除了静态内容。那么你有什么想法我在这里想念的吗?

【问题讨论】:

  • 你能分享一下用户是如何被认证的吗?他们的身份提供者是什么?
  • 它们由浏览器中的 cookie 识别。如果不是,则 google 登录会打开。身份验证不是问题。问题是谷歌重定向,打开经过身份验证的网址后。因此,我的 index.html 的静态内容的相对路径不再与存储桶中的可用路径匹配。例如storage.cloud.google.com/my-bucket/develop/index.html 被重定向到00f74ba44bd1084ee9a92e238338e39aa18f98e6ba-apidata.googleuserco…
  • 认证没问题,但是因为你用的是谷歌账号,所以我的回答比较简单!

标签: google-cloud-storage


【解决方案1】:

您可以使用以下解决方法将用户身份验证添加到基于存储桶的 GCS 静态页面。

首先你需要创建一个名为redirect.html的公共文件,这个文件将是你静态网页的入口点,你需要添加以下内容

<html>
  <head>
    <meta http-equiv="Refresh" content="0; url=https://storage.cloud.google.com/[yourbucketname]/index.html">
  </head>
  Redirecting to your site..

index.html 和其他文件必须是私有文件,授予选定用户的读取权限

这背后的魔力在于,您的浏览器会提示您选择一个 google 帐户,以防您的浏览器没有任何活动的 google 帐户。

只有拥有读者权限(或其他角色拥有阅读权限)的用户才能访问您的静态网站。

友情提示,如果您的浏览器有超过 1 个 Google 帐户,这将使用浏览器中的主 Google 帐户,这可能会导致身份验证问题,如果发生这种情况,请使用隐身窗口。 p>

你可以找到更多关于这个Medium article的信息

额外步骤

如果您启用了数据访问日志,此解决方法将引发一些身份验证问题,您需要为将使用经过身份验证的站点的用户添加例外

为此,请在 Cloud Console 中导航至 IAM 和管理 > 审核日志。查看Google Cloud Storage 的列表或过滤器。点击行。

在右侧信息面板的豁免用户标签上,点击添加豁免用户。

【讨论】:

    【解决方案2】:

    尝试在您归档的 App Engine 上进行部署。为此

    1. 在您的静态文件的同一根目录中,使用此内容创建一个app.yaml 文件
    runtime: nodejs10
    env: standard
    instance_class: F1
    handlers:
      - url: /
        static_files: index.html
        require_matching_file: false
        upload: index.html
      - url: /(.*)
        static_files: /\1
        require_matching_file: false
        upload: /.*
      - url: .*
        script: auto
    
    1. 在 App Engine 上部署 gcloud app deploy
    2. 检查它是否适用于提供的 URL。

    如果是这样:

    1. 转到安全性 -> 身份识别代理 (IAP)
    2. 为 App Engine 激活 IAP;如果您之前没有这样做,则可能必须在此步骤配置 OAuth 同意屏幕
    3. 选中根服务左侧的复选框,然后转到页面右侧的信息面板
    4. 添加具有IAP-secured Web app user 角色的成员、组或域

    测试并享受!

    【讨论】:

    • 是的,如果您使用 node.js 提供文件,请确保它可以工作。但我最初的计划是坚持使用 gcs。还是谢谢
    • 使用你想要的运行时!! Node、Python、Java、Go、(...) 它没有被使用,因为只提供静态文件!
    • @jo87casi 您是否尝试过这种解决方法?在我的情况下,现在可以完美地为静态网站提供访问权限,但不幸的是,GCS 缺少这种控件。
    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 2023-03-13
    • 2019-11-14
    • 2014-11-12
    • 2019-12-16
    • 2012-09-06
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多