繁体   English   中英

如何将S3存储桶锁定到特定用户和IAM角色

[英]How to lockdown S3 bucket to specific users and IAM role(s)

在我们的环境中,所有IAM用户帐户都分配有客户管理的策略,该策略授予对许多AWS服务的只读访问权限。 这是我想做的:

  • 将SQL Server 2012 Express数据库从本地迁移到RDS实例
  • 限制对包含数据库文件的S3存储桶的访问

这是根据AWS的要求:

  • 一个S3存储桶以存储.bak数据库文件
  • 具有访问存储桶的角色
  • 附加到RDS实例的SQLSERVER_BACKUP_RESTORE选项

到目前为止,我已经完成了以下工作:

  • 创建了一个名称为“ test-bucket”的存储桶(并在此处上传了.bak文件)
  • 创建了一个名为“ rds-s3-role”的角色
  • 使用以下设置以名称“ rds-s3-policy”创建策略:

     { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::test-bucket/" }, { "Effect": "Allow", "Action": [ "s3:GetObjectMetaData", "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::test-bucket/*" } ] } 
  • 将策略分配给角色

  • 授予RDS服务的AssumeRole权限以承担上面创建的角色
  • 使用SQLSERVER_BACKUP_RESTORE选项在RDS中创建一个新的选项组,并将其链接到我的RDS实例

不受S3存储桶的限制,我可以执行恢复。 但是,我找不到在不妨碍RDS服务执行还原的情况下限制对存储桶的访问的可靠方法。

关于限制访问S3存储桶的尝试,我在线上找到了一些帖子,建议使用显式的Deny语句来拒绝对所有类型的主体的访问,并基于某些条件语句来授予访问权限。

这是我的存储桶策略的内容:

    {
        "Version": "2012-10-17",
        "Id": "Policy1486769843194",
        "Statement": [
            {
                 "Sid": "Stmt1486769841856",
                 "Effect": "Deny",
                 "Principal": "*",
                 "Action": "s3:*",
                 "Resource": [
                     "arn:aws:s3:::test-bucket",
                     "arn:aws:s3:::test-bucket/*"
                 ],
                 "Condition": {
                     "StringNotLike": {
                         "aws:userid": [
                             "<root_id>",
                             "<user1_userid>",
                             "<user2_userid>",
                             "<user3_userid>",
                             "<role_roleid>:*"
                         ]
                     }
                 }
             }
         ]
     }

我可以确认存储桶策略确实将访问权限限制为仅指定了IAM用户,但是我不确定它如何对待IAM角色。 我在aws论坛上找到的每个文档都使用了上面的:*语法,在该文档中,作者说“:*”是承担指定角色的每个主体的全部内容。

我唯一有问题的是,有了这个存储桶策略,当我尝试进行数据库还原时,出现了拒绝访问错误。 有没有人做过这样的事情? 我整天都在忙着,还没有找到可行的解决方案。

坦白地说,以下内容只是猜测而已...但是在阅读有些困难的IAM文档和其他地方的内容之间,并考虑到我最初对它的理解(错误地),我怀疑您使用的是角色名称 ,而不是策略中角色的ID

角色ID看起来类似于AWSAccessKeyId,但它们以AROA...开头。

对于给定的角色,在此输出中找到RoleId

$ aws iam get-role --role-name ROLE-NAME

https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

创建广泛的Deny策略时请谨慎。 您最终s3:PutBucketPolicy对自己拒绝s3:PutBucketPolicy ,这使您处于策略阻止您更改策略的情况下……在这种情况下,您唯一的办法就是说服AWS支持删除存储桶策略。 一种更安全的配置是使用它仅拒绝对象级权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM