[英]How to lockdown S3 bucket to specific users and IAM role(s)
在我们的环境中,所有IAM用户帐户都分配有客户管理的策略,该策略授予对许多AWS服务的只读访问权限。 这是我想做的:
这是根据AWS的要求:
到目前为止,我已经完成了以下工作:
使用以下设置以名称“ 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/*" } ] }
将策略分配给角色
不受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
创建广泛的Deny
策略时请谨慎。 您最终s3:PutBucketPolicy
对自己拒绝s3:PutBucketPolicy
,这使您处于策略阻止您更改策略的情况下……在这种情况下,您唯一的办法就是说服AWS支持删除存储桶策略。 一种更安全的配置是使用它仅拒绝对象级权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.