我以编程方式添加和删除 AWS IAM 用户策略,但应用这些策略时得到的结果不一致。
例如,这可能会成功,也可能不会成功(我使用的是 Java 1.6.6 SDK):
- 从可以从特定存储桶读取数据的用户开始
- 清除用户策略(列出策略,然后为每一项调用“deleteUserPolicy”)
- 等到用户没有用户策略(调用“listUserPolicies”直到返回空集)
- 尝试从存储桶中读取(这应该会失败)
如果我在 #3 和 #4 之间放置一个断点并等待几秒钟,用户将无法从存储桶中读取数据,这正是我所期望的。如果我删除断点,用户可以从存储桶中读取数据,这是错误的。
(当我add策略然后访问资源)
我想知道策略更改何时对组件(S3、SQS 等)产生影响,而不仅仅是对 IAM 系统产生影响。有什么办法可以得到收据或确认吗?或者也许有一定的等待时间?
有没有关于政策应用内部细节的文档?
(仅供参考,我复制了我的问题)
“几乎立即”一词在本文中出现了 5 次IAM FAQ,当然,有些主观。
由于 AWS 是一个全球分布式系统,因此您的更改必须传播,并且整个系统的设计似乎有利于可用性和分区容错性相对于立即一致性。
我不知道您是否考虑过这一点,但完全有可能在流程的第 4 步中看到一系列通过、失败、通过、通过、失败、失败、失败,失败......因为无论是桶还是桶中的对象实际上都不是一个地方的单个事物,正如混合一致性S3 中不同操作的模型,其中新对象是立即一致的,而覆盖和删除最终是一致的……因此策略对存储桶或对象“有影响”或没有“影响”的概念并不完全有意义因为策略的应用本身几乎肯定是一个分布式事件。
要确认此类策略的应用,需要 AWS 公开(至少间接)询问拥有该策略复制副本的每个实体的能力,以查看其是否具有当前版本……这可能是不切实际的,或者至少可以说,在像 S3 这样庞大的系统中,它的规模已经超出了惊人的规模2 万亿个对象,每秒服务超过 110 万个请求的峰值负载.
AWS 官方解答这个论坛帖子提供更多信息:
虽然您对 IAM 实体所做的更改会立即反映在 IAM API 中,但信息可能需要相当长的时间才能在全球范围内得到反映。在大多数情况下,您所做的更改会在一分钟内得到反映。网络状况有时可能会增加延迟,并且某些服务可能会缓存某些非凭证信息,这些信息需要一段时间才能过期并被替换。
对于同时该做什么的随之而来的答案是“再试一次”。
我们建议在轻微的初始延迟后重试循环,因为在大多数情况下,您会看到您的更改很快得到反映。如果您睡觉,在大多数情况下您的代码将等待太长时间,并且对于罕见的异常可能等待的时间不够长。
我们积极监控复制系统的性能。但与 S3 一样,我们只保证最终一致性,而不保证任何特定的上限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)