javascript - 管理浏览器中 s3 文件夹的访问 - 最佳实践?

标签 javascript amazon-web-services amazon-s3 aws-sdk

我有一个配置为网站的存储桶,并且存储桶策略允许公开访问该存储桶中除“/_admin/”文件夹之外的所有文件夹。仅允许发出请求的特定 Iam 用户访问“/_admin/”。这是用于网站的后端管理,所以我向用户提供 html、js、css 等。现在,我正在使用 aws javascript sdk 将每个 url 签名为 js/css/img src/href 链接,然后更新该属性或创建它。 (这意味着几乎没有任何内容被缓存,因为每次访问时签名都会发生变化。)我已经证明了这个概念,并且我可以通过签署网页中的每个网址来访问文件,但这似乎是构建网站的一种尴尬的方式。

有没有一种方法可以向每个请求中包含的每个页面添加某种访问 header ?如果是这样,这也适用于所有 ajax 类型请求吗?

最佳答案

这是我为解决这个问题而想出的办法。我修改了我的存储桶策略,拒绝对“/_admin/”的所有匿名访问,除非它来 self 的主账户 ID、特定的 Iam 用户,或者引用网址 URL 与特定 token 匹配。用户从我网站上的可公开访问的页面进行身份验证后,我生成一个新 token ,然后使用 sdk 使用该新 token 的值修改存储桶策略。 (我可能还会添加另一个带有到期日期的条件。)

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "PublicReadGetObject",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::test-domain-structure/*"
    },
    {
        "Sid": "AllowAdminWithToken",
        "Effect": "Deny",
        "NotPrincipal": {
            "AWS": [
                "arn:aws:iam::AWS-USER-ID:user/IAM-USER",
                "arn:aws:iam::AWS-USER-ID:root"
            ]
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::test-domain-structure/_admin/*",
        "Condition": {
            "StringNotLike": {
                "aws:Referer": "*?t=a77Pn"
            }
        }
    }
]
}

在每个页面中,我使用 javascript 在每个链接/href 前面添加新的查询字符串(?t=a77Pn ...或新生成的 token )。
编辑:那真的很痛苦。链接不断断开,所以最终我采用了下面的解决方案,加上过期日期的附加条件。效果更好。

另一个选项是修改存储桶策略以仅允许来自特定 IP 地址的访问。这将消除修改所有链接/href 并保持 url 干净的必要。仍然对更好的想法持开放态度,但这目前有效。

关于javascript - 管理浏览器中 s3 文件夹的访问 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622778/

相关文章:

javascript - Firefox 中的 window.opener 引用丢失

amazon-web-services - 根据角色名称授予对 S3 资源的访问权限

amazon-web-services - AWS IAM 角色中的默认信任策略是什么意思?

python - Cloudfront 与 S3 签名 URL 和 Boto3

amazon-s3 - Amazon Alexa Skill S3 限制

html - 覆盖或更改 GoDaddy 网站描述?不使用元标记

javascript - Thymeleaf 表更新无需重新加载页面

javascript - 仅缩放图像 JQuery 的点击部分

javascript - 使用 jQuery onclick 停止单击选择选项菜单

python-3.x - AWS Lambda Python - 返回 BytesIO 文件?