google-cloud-storage - 从 GCS 提供具有访问限制的静态页面
问题描述
我在谷歌云存储上提供一个静态页面。只要它是公开的,它就可以很好地工作。现在我设置了 acl,以便只有一组用户可以读取存储,未经身份验证的用户被重定向到谷歌身份验证。现在的问题是,网站的静态内容,如 javascript 和 css 无法再找到,我在那里得到 404 错误。静态内容也在存储桶中,并且可以与公共 url 一起使用。使用经过身份验证的 url 时,它不再起作用。
我尝试提供访问控制页面是否正确?我猜是这样,因为它可以工作,除了静态内容。那么你有什么想法我在这里想念的吗?
解决方案
您可以使用以下解决方法将用户身份验证添加到基于存储桶的 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
和其他文件必须是私有文件,授予选定用户的读取权限
这背后的神奇之处在于,如果您的浏览器没有任何活动的谷歌账户,您的浏览器会提示您选择谷歌账户。
并且只有具有读者权限(或具有读取权限的其他角色)的用户才能访问您的静态网站。
友情提示,如果您的浏览器有超过 1 个 Google 帐户,这将使用浏览器中的主 Google 帐户,这可能会导致身份验证问题,如果发生这种情况,请使用隐身窗口。
您可以在这篇Medium 文章中找到更多信息
额外步骤
如果您启用了数据访问日志,此解决方法将引发一些身份验证问题,您需要向将使用经过身份验证的站点的用户添加例外
为此,请在 Cloud Console 中导航至IAM & Admin > Audit Logs。浏览列表或过滤器Google Cloud Storage
。单击行。
在右侧的信息面板中,在Exempted Users 选项卡上,单击 Add Exempted User。
推荐阅读
- java - Camel JMS 组件多线程
- firebase - 当用户离线时,如何在 Flutter 中添加/上传数据到 Firebase 时显示错误?
- python - Selenium 页面源与实际不匹配
- javascript - 检测按钮单击表单项
- java - RabbitMq:经久不衰,不像我想象的那样
- python - Scrapy XPath 无法获取页面中的所有链接,而 Chrome 获取
- instagram - Instagram 长寿命访问令牌在 60 天后过期,启用自动更新令牌
- python - 执行 url 时 /post/new/ 处的 FieldError:
- elasticsearch - 如何将高级 REST java Elasticsearch 客户端从 6 迁移到 7?
- java - 基于Java中列上的自定义函数删除Spark SQL中的重复行