amazon-web-services - IAM AWS S3 限制到特定的子文件夹

标签 amazon-web-services amazon-s3

我正在使用 AWS S3 组件来存储文件。

我有一个名为“ mybucket ”的存储桶,其中包含以下文件夹:

+---Mybucket
\---toto1
\---toto2
+---toto3
|   \--- subfolder
|       \---subsubfolder
\---toto4

我有只需要访问“toto3”文件夹的 AWS 控制台用户。

我试图限制对该文件夹的访问,但用户必须有权列出存储桶的根目录。如果我赋予访问根文件夹的额外权限,用户可以浏览“toto1”和“toto2”文件夹,而我不想要。

我想配置这样的东西:
  • 授权列出我的 S3 账户的所有存储桶(listAllBuckets 策略)
  • 自动列出存储桶的根目录(如果用户看到目录名称对我来说没问题)
  • 拒绝所有不同于“toto3”的前缀桶的访问
  • 在 toto3 文件夹中为用户自动执行所有操作
  • 我不想写一个包容规则

  • 我尝试了这个 IAM 策略但没有成功:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:PutObject",
                    "s3:GetObject"
                ],
                "Resource": ["arn:aws:s3:::mybucket/toto3/*"]
            },
            {
                "Sid": "Stmt1457617383000",
                "Effect": "Allow",
                "Action": [
                    "s3:GetBucketLocation",
                    "s3:ListBucket"
                ],
                "Resource": ["arn:aws:s3:::mybucket"]
            },
            {
                "Sid": "Stmt1457617230000",
                "Effect": "Deny",
                "Action": ["s3:*"],
                "Condition": {
                    "StringNotLike": {
                        "s3:prefix": "toto3*"
                    }
                },
                "Resource": [
                    "arn:aws:s3:::mybucket/*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListAllMyBuckets"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }
    

    最佳答案

    这是一项对您有用的政策:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListAllMyBuckets"
                ],
                "Resource": [
                    "*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::mybucket/toto3/*"
                ]
            },
            {
                "Sid": "Stmt1457617230000",
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket"
                ],
                "Condition": {
                    "StringLike": {
                        "s3:prefix": [
                            "",
                            "toto3/"
                        ]
                    }
                },
                "Resource": [
                    "arn:aws:s3:::mybucket*"
                ]
            }
        ]
    }
    

    细节:
  • ListAllMyBuckets是控制台要求的。它显示了所有存储桶的列表。
  • toto3/ 内允许的任何操作小路。
  • ListBucket (检索对象列表)在存储桶的根和 toto3/ 中允许小路。

  • 我成功地测试了这个解决方案。

    AWS 文档引用:Allow Users to Access a Personal "Home Directory" in Amazon S3

    关于amazon-web-services - IAM AWS S3 限制到特定的子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35944349/

    相关文章:

    amazon-web-services - ECS服务持续重启时触发云观察报警

    node.js - 使用 Elasticsearch 查询字符串匹配多个字段

    python - S3 对象和 ObjectSummary 之间有什么区别?

    ruby-on-rails - 如何在 Rails 应用程序后台监听 AWS SQS 消息?

    python - 每次添加新的 Google Sheet 行时都会触发 AWS Lambda

    ios - 文件上传到适用于 iOS 的 Amazon S3 的进度条?

    amazon-web-services - 是否可以使用s3 java sdk通过流写入s3

    ruby - Amazon 基于前缀的 S3 策略不起作用(AWS、IAM、STS、Ruby)

    amazon-web-services - 将存储桶策略附加到由无服务器生成的存储桶

    node.js - 来自 Lambda Node JS 的多个 Dynamo DB 调用