具有 DeleteObject 权限的 IAM 用户无法从 S3 存储桶中删除

具有 DeleteObject 权限的 IAM 用户无法从 S3 存储桶中删除

伙计们,有件事我真的不明白。底部的 GitLab 运行器无法删除顶部存储桶中的对象。他应该有权限这样做,但我得到的却是以下内容:

删除失败:s3://bucket.domain.com/file.png 调用 DeleteObject 操作时发生错误(AccessDenied):访问被拒绝

S3 权限存储桶策略:

   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Sid": "Stmt1412062044000",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::321570121925:root"
               },
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:PutObjectAcl",
                   "s3:DeleteObject"
               ],
               "Resource": [
                   "arn:aws:s3:::bucket.domain.com/*",
                   "arn:aws:s3:::bucket.domain.com"
               ]
           },
           {
               "Sid": "Stmt1721016931TBA",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::321570121925:root"
               },
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::bucket.domain.com"
           }
       ]
   }

“aws sts get-called-identity” 的 GitLab 运行器结果:

   {
       "Account": "321570121925", 
       "UserId": "AROAJZ6FNUZ33NL3XQVYK:i-0394709c2c1742643", 
       "Arn": "arn:aws:sts::321570121925:assumed-role/gitlab-runner-20180419190331730700000002/i-0394709c2c1742643"
   }

我已经调查了好几个小时,但这对我来说毫无意义。请帮忙。

答案1

S3 允许跨账户委派权限,以便一个账户中的主体(用户、角色)可以访问另一个账户中的资源。

但是,要做到这一点,两个账户都必须授予必要的权限:拥有存储桶的账户必须委托该权限,而拥有委托人的账户也必须授予该权限。

 "Principal": {
      "AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
  },

在存储桶策略中,这将权限委托给外部账户 xxxxxxxxxxxx 的根...但该账户必须使用适当的 IAM 策略进一步将权限委托给其用户/角色。

笔记

要对资源执行特定操作,IAM 用户需要获得其所属的父 AWS 账户和拥有该资源的 AWS 账户的权限。

https://docs.aws.amazon.com/AmazonS3/latest/dev/how-s3-evaluates-access-control.html

上面引用的文档对 S3 如何处理特权检查进行了广泛的概述。

相关内容