AWS S3 Web 控制台覆盖存储桶策略

2023-12-24

目前,我有一个应用于测试存储桶的策略,该策略旨在阻止用户使用“公共读取”和“公共读写”ACL 上传 s3object。

当我尝试通过命令行上传时,请求被成功阻止,并按预期“拒绝访问”:

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -cannedACLName public-read  

与“public-read-write”结果相同:

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -CannedACLName public-read-write 

但是,当我通过 Web 控制台 GUI 访问 s3bucket 时,我可以上传公共对象。通过“公开”按钮将现有的“私有”对象公开。

这是存储桶策略:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "DenyPublic",
        "Effect": "Deny",
        "Principal": "*",
        "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl"
        ],
        "Resource": "arn:aws:s3:::testbucket/*",
        "Condition": {
            "StringEquals": {
                "s3:x-amz-acl": [
                    "public-read",
                    "public-read-write"
                ]
            }
        }
    }
]

这里还有用户访问 s3 的策略:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "*"
    }
]

}

我觉得修复或逻辑非常简单。我就是无法指指点点。


我认为这里发生的情况是 AWS 控制台没有触发您的拒绝策略,因为它没有使用预设的 ACL。相反,它在上传文件后显式向 AllUsers 组授予 READ_ACP 权限(使用 x-amz-grant-read 标头)。

我设置了类似的策略并在 PutObject 上测试了预设的 ACL 方法(失败了):

$ aws s3 cp myfile s3://B/K --acl public-read
Result: Access Denied

然后我测试了一个非 ACL 副本,然后使用预设 ACL 方法对对象进行 ACL 更新(上传成功,但 ACL 更新失败):

$ aws s3 cp myfile s3://B/K
Result: OK

$ aws s3api put-object-acl --bucket B --key K --acl public-read
Result: Access Denied

然后我尝试了 AllUsers 组的授予方法(它成功了):

$ aws s3 cp myfile s3://B/K
Result: OK

$ aws s3api put-object-acl --bucket B --key K --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers
Result: OK

最后两个测试尝试做同样的事情(上传一个对象并使其可读),但它们以不同的方式进行,其中一个被您的策略拒绝,而另一个则没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS S3 Web 控制台覆盖存储桶策略 的相关文章

  • 如何使用 cloudfront/route53 将通配符域 (*.example.com) 指向 s3 存储桶

    我已通过 SSL 认证 并使用 Cloudfront Route 53 和 s3 存储桶为我的网站设置主页 example com 和 www example com 该网站只是一个基本的静态网站 我正在尝试设置我的 Cloudfront
  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • AWS Lambda 函数误解了 python 中的事件字典?

    我正在尝试将谷歌日历 API 部署到 AWS Lambda 由于我在从事件字典中提取值时遇到问题 由 lambda 从 POST 请求的 JSON 负载创建 因此我创建了一个玩具函数来测试 def handler event context
  • 内存高效的大型数据集流式传输到 S3

    我正在尝试使用 SQL alchemy 复制 S3 大型数据集 大于 RAM 我的限制是 我需要使用 sqlalchemy 我需要将内存压力保持在最低水平 我不想使用本地 filsystem 作为中间步骤将数据发送到 s3 我只想通过管道将
  • CORS。预签名 URL。 S3

    我已经生成了一个预签名的 S3 POST URL 使用返回参数 然后将其传递到我的代码中 但我不断收到此错误Response to preflight request doesn t pass access control check No
  • 将 S3 静态站点与应用程序负载均衡器结合使用

    我有一个 ALB 当前将流量路由到多个 url 如果我们需要执行维护 我希望能够将流量路由到静态 S3 站点 然后 我们将显示静态 维护 页面而不是登录页面 我创建了一个 CloudFront 发行版 允许 S3 站点加载 SSL 证书 但
  • 使用 terraform 更新 KMS 密钥策略

    有谁知道如何让 Terraform 更新现有的 KMS 密钥策略 我已经创建了 KMS 密钥 但我有一个需要使用现有 KMS 密钥的临时 IAM 角色 我希望能够将这个 新 IAM 角色添加到现有的 KMS 密钥策略中 我可以看到使用 AW
  • 连接到 AWS Aurora 集群时偶尔出现“名称解析暂时失败”

    我正在运行 Amazon Web Services RDS Aurora 5 6 数据库集群 有几个 lambda 与这些数据库实例通信 全部用 python 编写 现在一切都运行良好 但是突然之间 从几天前开始 python 代码有时开始
  • AWS Cognito-获取带有ID的用户信息

    有没有什么方法可以获取 AWS Cognito 池 在 Android 上 中未登录的用户的信息 并知道他的 ID 我尝试了该代码 AppHelper getPool getUser username getDetailsInBackgro
  • 无法从亚马逊Windows实例的公共IP访问node.js服务器

    我正在 Windows 服务器的亚马逊微实例上运行 Node js 服务器 我无法使用亚马逊实例的公共IP访问node js服务器 我可以使用 localhost 12345 从实例访问 node js 服务器 但无法使用实例的公共 IP
  • 在 AWS Quicksight 中可视化 DynamoDB 数据

    我正在寻找一个以 AWS 为中心的解决方案 如果可能的话 避免使用第三方的东西 来可视化非常简单的 DynamoDB 表中的数据 我们使用 AWS Quicksight 为客户提供许多其他报告和仪表板 以便在那里提供可视化效果 我非常惊讶地
  • 从 S3 下载 Carrierwave 上传内容

    我想下载使用 Carrierwave 上传到 S3 的图像 该图像位于卡片模型上 作为上传器安装 我看见这个答案 https stackoverflow com questions 7193516 how to send file to u
  • AWS Lambda:类 java.lang.ClassNotFoundException

    I am getting this message and I have no idea how to resolve it Searched online and tried to implement their suggestion b
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y
  • AWS Lambda Sam找不到docker

    我正在尝试使用以下命令测试我的 hello world lambda 函数aws sam cli在我的项目根文件夹中使用以下命令 sam local start api debug 这在控制台中给出了以下输出 2018 07 11 16 1
  • k8s CronJob 在 pod 列表上循环

    我想在特定命名空间中的 pod 上运行循环 但诀窍是在 cronJob 中执行此操作 是否可以内联 kubectl get pods n foo 这里的技巧是在你获得 Pod 列表后 我需要循环并在 15 秒的超时时间内将每个 Pod 删除
  • 有没有办法修复 Elastic Beanstalk 中的 Gem::LoadError

    我对 Elastic Beanstalk 比较陌生 因此希望得到一些建议 将 RoR 应用程序部署到 EB Puma 使用在 64 位 Amazon Linux 上运行的 Ruby 2 6 后 当我 转到环境 链接时 它不会呈现我的应用程序
  • AWS SAM - 通过 SAM 模板在 API 网关方法中强制执行请求验证

    我正在开发一个 SAM 应用程序 该应用程序具有 lambda 函数 并以 API 网关作为事件源 API 端点是一种 POST 方法 需要在请求正文中提供一组参数 API Gateway 为我们提供了通过使用 AWS 控制台指定请求模型来
  • IOPS(在 Amazon EBS 中)在实践中意味着什么?

    我有一些应用程序所需的图像 图像很多 50 000 但整体大小很小 40 Mb 最初 我以为我会简单地使用 S3 但上传速度非常慢 作为临时解决方案 我想附加一个包含图像的 EBS 这样就可以了 然而 在阅读了一些有关 EBS 通用 gp2
  • 使用 Glue 将数据输入到 AWS Elastic Search

    我正在寻找使用 AWS Glue python 或 pyspark 将数据插入 AWS Elastic Search 的解决方案 我见过用于 Elastic Search 的 Boto3 SDK 但找不到任何将数据插入 Elastic Se

随机推荐