S3 拒绝管理员访问
Posted
技术标签:
【中文标题】S3 拒绝管理员访问【英文标题】:S3 deny access to administrators 【发布时间】:2020-04-10 09:46:21 【问题描述】:对于一个 AWS S3 存储桶,我想拒绝除一个特定 IAM 角色之外的所有人访问。我创建了一个基于角色的策略来允许访问并且有效。但其他 IAM 用户也可以访问对象,我想阻止这种情况。我尝试添加这样的存储桶策略,它拒绝除此主体之外的所有人,然后允许此主体。但此政策阻止包括该角色在内的所有人访问。
我试图阻止的其他 IAM 用户附加到内置的 AdminstratorAccess 策略。
"Version": "2012-10-17",
"Id": "PolicySecretBucket",
"Statement": [
"Sid": "StmtDenyAll",
"Effect": "Deny",
"NotPrincipal":
"AWS": "arn:aws:iam::********:role/service-role/my-role"
,
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*"
,
"Sid": "StmtAllowLambdaBot",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::********:role/service-role/my-role"
,
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*"
]
【问题讨论】:
角色 ARN 通常为arn:aws:iam::********:role/my-role
,但请测试 arn:aws:sts::**********:assumed-role/myrole/mysession
,其中会话名称为 mysession
。
【参考方案1】:
我会这样做:
"Version": "2012-10-17",
"Statement": [
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::MyExampleBucket",
"arn:aws:s3:::MyExampleBucket/*"
],
"Condition":
"StringNotLike":
"aws:userId": [
"AROAEXAMPLEID:*",
"ACCOUNT NUMBER"
]
]
这就是它的工作原理。
用户将拥有允许s3.*
操作的 IAM 策略
我们将使用存储桶策略拒绝任何用户 id 的存储桶 MyExampleBucket
的所有 s3 操作,但角色的用户 id(以及如果删除角色的情况下根帐户的用户 id)李>
获取角色的用户ID:
aws iam get-role --role-name ROLE-NAME
最后,为什么你的不起作用:https://serverfault.com/a/988136
参考: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
【讨论】:
如果它对你有用,请接受答案,以便我确认我的理解 这很好用,谢谢!在本例中,我使用此存储桶来存储 API 凭据,因此我将访问权限限制为仅 GetObject。我希望自己和其他管理员能够放置新对象,但只有指定的 Lambda 函数才能读取它们。【参考方案2】:拒绝对特定存储桶的访问实际上非常困难。
例如,管理员可能有权担任角色,因此他们仍然可以访问存储桶。
您还需要查看所有政策,以确保只有授权人员才能使用iam:PassRole
通过 Amazon EC2 实例担任该角色。
更安全的方法是将存储桶放在单独的 AWS 账户中。然后,仅向特定用户(而不是角色)授予跨账户访问权限。这样,默认情况下管理员的访问权限为零,然后您将访问权限授予所需的人员。 “绕过”此类访问的方法较少。
【讨论】:
感谢您的洞察力。在这种情况下,我不介意管理员是否可以担任该角色,因为我们彼此信任不会做坏事。我只是想防止意外轻松访问。但实际上,由于我使用的是 Lambda 服务角色,我认为不可能假设这些。以上是关于S3 拒绝管理员访问的主要内容,如果未能解决你的问题,请参考以下文章