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

Posted

技术标签:

【中文标题】允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略【英文标题】:AWS IAM Policy to allow user access to specific S3 bucket for backup 【发布时间】:2016-06-17 11:12:50 【问题描述】:

我有一个支持将文件备份到 AWS S3 的 NAS。我在 AWS 控制台中的 IAM 下创建了一个用户,并尝试生成一个策略,该策略只允许该用户访问具有读/写权限的特定 S3 存储桶。以下是我生成的策略:


  "Version": "2012-10-17",
  "Statement": [
    
      "Sid": "Stmt1465916250000",
      "Effect": "Allow",
      "Action": [
          "s3:PutObject",
          "s3:PutObjectAcl"
        ],
        "Resource": [
         "arn:aws:s3:::atlas-nas-backups"
        ]
      
   ]

但是,当我通过策略模拟器针对 S3 的所有操作运行此操作时,每个操作都失败了。我错过了什么,这个用户无法将对象写入存储桶?除了将文件备份到特定存储桶的能力之外,我不希望该用户访问任何其他 AWS 资源。

【问题讨论】:

【参考方案1】:

存储桶权限有一个怪癖,您需要使用/* 通配符规范分别指定存储桶本身其密钥。此外,即使是写入操作,也可能需要 List 操作。


  "Version": "2012-10-17",
  "Statement": [
    
      "Sid": "Stmt1465916250000",
      "Effect": "Allow",
      "Action": [
          "s3:PutObject",
          "s3:PutObjectAcl",
          "s3:ListBucket",
          "s3:GetBucketLocation"
        ],
        "Resource": [
         "arn:aws:s3:::atlas-nas-backups",
         "arn:aws:s3:::atlas-nas-backups/*"
        ]
      
   ]

我还添加了“s3:GetBucketLocation”和“s3:ListBucket”操作。如前所述,即使您只编写对象,服务也可能希望列出项目并获取存储桶的位置(区域)。您可能不需要最后两个,只是想向您展示它们以防万一。

【讨论】:

【参考方案2】:

最低限度的备份策略只需要PutObjectListBucket

为什么选择 ListBucket? 如果只添加 PutObject,aws 会抱怨它缺少 ListObjects 权限。


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::atlas-nas-backups/*"
        ,
        
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::atlas-nas-backups"
        
    ]

【讨论】:

以上是关于允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略的主要内容,如果未能解决你的问题,请参考以下文章

私有登台S3存储桶的策略

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

aws s3 存储桶策略

S3 存储桶策略授予/限制对特定联合用户的访问权限

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

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