安全和IAM
Awsume 4发布
最方便的假定角色助手的更新:2020年4月更新
2018年7月27日,星期五
访问管理是任何企业IT基础架构安全的关键属性。 Amazon Web 服务(AWS)提供了多种工具来解决访问管理。拥有各种各样的可用选项可以为客户提供灵活性和敏捷性,但是由于有时不清楚这些访问管理服务如何交互,因此还可能增加混乱。具体来说,S3访问管理可能会变得非常压倒性。对象ACL,存储桶ACL,IAM策略,存储桶策略,存储桶所有权和对象所有权都会影响谁有权访问存储在S3中的对象,并且不清楚它们如何交互。
与s3权限进行交互时, 此AWS博客文章 我的主要目的是对三种访问控制(IAM策略,存储桶策略,ACL)之间的交互有一个基本的了解,但是并不能涵盖所有用例,尤其是它没有提到对象所有者可以对访问控制产生影响。权限。
为了使s3权限更加清晰,我们创建了一个脚本来测试IAM策略,存储桶策略,对象所有者和ACL的所有相关组合。结果汇总在该帖子末尾的表格中。
For simplicity we only looked at the GetObject
api operation. We created multiple buckets in one account, each with a different bucket policy. In each bucket, we created multiple objects with different object owners and ACLs. We created IAM users in two seperate accounts (one account also holds the bucket) to test cross account access. We created objects owned by three accounts (two of the 预先viously mentioned accounts and a third because sometimes objects are owned by an AWS controlled account, billing reports and some access logs are notable examples of this). We used three IAM policies: one with an explicit 拒绝, one with an explicit 允许, and one with no policy. (Policy statements are detailed at the end). We also had four bucket policies: one with no policy, one with an explicit 拒绝 for everyone, one that 允许ed access to everyone, and one that 允许ed access to either of the two user accounts. Again, policies are detailed a the end of the post. We set four different object ACLs: 私人的, 公众阅读, 认证读, and 桶拥有者阅读. We initially started with different bucket ACLs but they had no effect (since we only test the GetObject api). Thus they are not included in the results. Finally, we also made unauthenticated get requests for each of the objects.
The table shows the results every combination of the above resources: every combination of AWS account and IAM policy made a getObject
call on every combination of bucket policy, object acl, and object owner.
结果记录在下表中。在适当的情况下,我们使用通配符来减少结果。
符号 | 含义 |
---|---|
* | 给定列的任何可能值 |
!值 | 给定列的任何可能值(给定VALUE除外) |
This first table demonstrates how 拒绝 policies completely 拒绝 access, regardless of other factors.
用户帐号 | 用户政策 | 铲斗政策 | 对象所有者帐户 | 对象ACL | 来电者自来水桶 | 呼叫者拥有的对象 | 值区拥有者拥有的物件 | 可以访问 | |
---|---|---|---|---|---|---|---|---|---|
* | * | 拒绝 | * | * | * | * | * | 拒绝访问 | |
* | 拒绝 | * | * | * | * | * | * | 拒绝访问 |
该表显示了从第一个帐户(与存储桶所有者相同的帐户)发出的调用。
用户帐号 | 用户政策 | 铲斗政策 | 对象所有者帐户 | 对象ACL | 来电者自来水桶 | 呼叫者拥有的对象 | 值区拥有者拥有的物件 | 可以访问 | |
---|---|---|---|---|---|---|---|---|---|
第一场 | 允许 | ! 拒绝 | * | !私人的 | 是 | * | * | 成功 | |
第一场 | 允许 | ! 拒绝 | 第一场 | 私人的 | 是 | 是 | 是 | 成功 | |
第一场 | 允许 | * | 第二档 | 私人的 | 是 | 没有 | 没有 | 拒绝访问 | |
第一场 | 没有 | 允许任何 | 第一场 | * | 是 | 是 | 是 | 成功 | |
第一场 | 没有 | 允许任何 | 第二档 | !私人的 | 是 | 没有 | 没有 | 成功 | |
第一场 | 没有 | 允许任何 | 第二档 | 私人的 | 是 | 没有 | 没有 | 拒绝访问 | |
第一场 | 没有 | 允许呼叫帐户或无 | 第一场 | 认证读或公共读 | 是 | 是 | 是 | 成功 | |
第一场 | 没有 | 允许呼叫帐户或无 | 第一场 | 存储桶所有者读取或私有 | 是 | 是 | 是 | 拒绝访问 | |
第一场 | 没有 | 允许呼叫帐户或无 | 第二档 | * | 是 | 没有 | 没有 | 拒绝访问 |
该表显示了从第二个帐户发出的呼叫,该呼叫演示了跨帐户访问。
用户帐号 | 用户政策 | 铲斗政策 | 对象所有者帐户 | 对象ACL | 来电者自来水桶 | 呼叫者拥有的对象 | 值区拥有者拥有的物件 | 可以访问 | |
---|---|---|---|---|---|---|---|---|---|
第二档 | 允许 | ! 拒绝 | 第二档 | * | 没有 | 是 | 没有 | 成功 | |
第二档 | 允许 | 允许任何 OR 允许呼叫帐户 | 第一场 | * | 没有 | 没有 | 是 | 成功 | |
第二档 | 允许 | 允许任何 OR 允许呼叫帐户 | 第三步 | 认证读或公共读 | 没有 | 没有 | 没有 | 成功 | |
第二档 | 允许 | 允许任何 OR 允许呼叫帐户 | 第三步 | 存储桶所有者读取或私有 | 没有 | 没有 | 没有 | 拒绝访问 | |
第二档 | 允许 | 没有 | 第一项或第三项 | 认证读或公共读 | 没有 | 没有 | 是 | 成功 | |
第二档 | 允许 | 没有 | 第一项或第三项 | 存储桶所有者读取或私有 | 没有 | 没有 | 是 | 拒绝访问 | |
第二档 | 没有 | ! 拒绝 | 第二档 | 认证读或公共读 | 没有 | 是 | 没有 | 成功 | |
第二档 | 没有 | ! 拒绝 | 第二档 | 存储桶所有者读取或私有 | 没有 | 是 | 没有 | 拒绝访问 | |
第二档 | 没有 | * | 第一场 | * | 没有 | 没有 | 是 | 拒绝访问 | |
第二档 | 没有 | * | 第三步 | * | 没有 | 没有 | 没有 | 拒绝访问 |
下表显示了未经身份验证的用户发出的呼叫。
用户帐号 | 用户政策 | 铲斗政策 | 对象所有者帐户 | 对象ACL | 来电者自来水桶 | 呼叫者拥有的对象 | 值区拥有者拥有的物件 | 可以访问 | |
---|---|---|---|---|---|---|---|---|---|
取消验证用户 | 没有 | ! 拒绝 | * | 公众阅读 | 没有 | 没有 | * | 成功 | |
取消验证用户 | 没有 | 允许任何 | 第一场 | * | 没有 | 没有 | 是 | 成功 | |
取消验证用户 | 没有 | 允许任何 | 第二档 | !公众阅读 | 没有 | 没有 | 没有 | 拒绝访问 | |
取消验证用户 | 没有 | 允许呼叫帐户 | * | !公众阅读 | 没有 | 没有 | * | 拒绝访问 | |
取消验证用户 | 没有 | 没有 | * | !公众阅读 | 没有 | 没有 | * | 拒绝访问 |
以下是我们用于每个列的可能值。
用户帐号
用户政策
]
值区ACL
铲斗政策
GetObject
operation (there is a base bucket policy affecting the put operation).{ "Sid":"Deny s3 get object", "Effect":"Deny", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::*"]}
对象所有者帐户
对象ACL(这些只是AWS提供的固定ACL)
Every possible combination of these features were tested in the script. The 码 and the complete, unreduced results can be found 这里.