如何仅允许 IAM 用户完全访问存储桶中的特定路径? [关闭]

Posted

技术标签:

【中文标题】如何仅允许 IAM 用户完全访问存储桶中的特定路径? [关闭]【英文标题】:How to I allow full access for an IAM user to a specific path within a bucket only? [closed] 【发布时间】:2014-03-09 17:20:47 【问题描述】:

背景

我有几个桶,每个桶里面都有一个“开发”和“生产”文件夹。 我有两个帐户,accountname-devaccountname-prod

目标

我希望 account-dev 拥有对 BucketName/DEVELOPMENT 的完全访问权限(所有操作) 我希望 account-prod 拥有 BucketName/PRODUCTION 的完全访问权限(所有操作)

问题

每当我使用策略生成器时,似乎我都做错了。添加标准管理策略可以正常访问文档,但我的自定义策略不允许。

我使用 Amazon 的 IAM 策略创建屏幕为特定账户添加了策略。

我尝试使用的策略是:


  "Version": "2012-10-17",
  "Statement": [
    
      "Sid": "[Redacted]",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Condition": 
        "StringLike": 
          "s3:prefix": "DEVELOPMENT/*"
        
      ,
      "Resource": [
        "arn:aws:s3:::RedactedBucketName"
      ]
    
  ]

问题

上述政策有什么问题吗? 这是我需要添加的唯一策略吗?还是我也需要先在存储桶级别添加某种访问功能? 即使 Amazon 的策略生成屏幕未包含委托人的完整 ARN,是否最好还是将其包含在内?

【问题讨论】:

仅供参考,给投票这个离题的人:它与我们的开发代码失败直接相关。想过把它放在 ServerFault 上,但是对于同一主题的问题似乎要少得多,所以我认为它属于这里。 【参考方案1】:

我可以让它这样工作:

仅将 IAM 用户策略(不需要 S3 存储桶策略)分配给单个用户。

查看以下用户政策。我为account-dev 用户创建,意思是,您必须将此 IAM 策略应用于account-dev 用户。


  "Statement": [
    
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    ,
    
      "Sid": "AllowRootLevelListingOfDevelopmentBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::development-bucket-name"
      ],
      "Condition": 
        "StringEquals": 
          "s3:prefix": [
            ""
          ],
          "s3:delimiter": [
            "/"
          ]
        
      
    ,
    
      "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::development-bucket-name"
      ],
      "Condition": 
        "StringLike": 
          "s3:prefix": [
            "DEVELOPMENT/*"
          ]
        
      
    ,
    
      "Sid": "AllowUserToReadWriteObjectData",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::development-bucket-name/DEVELOPMENT/*"
      ]
    
  ]

用户从 S3 控制台工作需要AllowGroupToSeeBucketListInTheConsoleAllowRootLevelListingOfDevelopmentBucket。如果您不希望用户从 S3 控制台工作并希望他仅使用 API 工作,那么您可以省略这 2 节。

同样,您为account-prod 创建了另一个用户策略并将其分配给该用户。

【讨论】:

感谢您的回答!不幸的是,原来的政策是好的,但这是另一个问题。因此,我将删除使用问题,但感谢您的加入!

以上是关于如何仅允许 IAM 用户完全访问存储桶中的特定路径? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

AWS IAM 策略:按用户/角色限制存储桶/文件夹访问?

创建单个 IAM 用户以仅访问特定的 S3 存储桶

AWS S3策略限制用户仅列出存储桶中的某些文件夹

允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略

AWS IAM 策略:如何更改 AWSLambdaFullAccess 策略以仅允许访问一个 S3 存储桶?

通过 terraform 创建 IAM 用户并在 S3 存储桶中上传密钥和访问密钥