我正在以编程方式添加和删除AWS IAM用户策略,并且我从这些策略的应用中获得了不一致的结果。
例如,这可能成功也可能不成功(我正在使用Java 1.6.6 SDK):
如果我在#3和#4之间插入断点并等待几秒钟,则用户无法从桶中读取,这正是我所期望的。如果我删除断点,用户可以从桶中读取,这是错误的。
(当我添加策略然后访问资源时,这也是不一致的)
我想知道策略更改何时对组件(S3,SQS等)产生影响,而不仅仅是在IAM系统上。有没有办法从中获得收据或确认?或者可能有一段时间等待?
是否有关于政策申请内部的文件?
(仅供参考我从https://forums.aws.amazon.com/thread.jspa?threadID=140383&tstart=0复制了我的问题)
答案 0 :(得分:44)
短语“几乎立即”在IAM FAQ中使用了5次,当然有点主观。
由于AWS是一个全球分布式系统,因此您的更改必须传播,整个系统似乎旨在支持可用性和分区容差as opposed to立即一致性。
我不知道你是否考虑过它,但它完全在可能的范围内,你可能实际上,在你的流程中的第4步,看到一系列通过,失败,通过,通过,失败,失败失败,失败......因为桶中的桶和对象实际上都不是单个地方的单一事物,如S3中不同操作的mixed consistency模型所证明的那样,新对象立即保持一致虽然覆盖和删除最终是一致的......所以对于桶或对象“有效”的策略的概念并不是一个完全有意义的概念,因为策略的应用本身几乎可以肯定,分布式活动。
要确认此类策略应用,将要求AWS公开(至少间接)询问具有该策略的复制副本的每个实体的能力,以查看它是否具有当前版本...这将是在像S3这样庞大的系统中至少可以说是不切实际或笨拙的,这已经超越了令人震惊的2 trillion objects, and serves peak loads in excess of 1.1 million requests per second。
this forum post的官方AWS答案提供了更多信息:
虽然您对IAM实体所做的更改会立即反映在IAM API中,但可能需要花费一些时间才能全局反映信息。在大多数情况下,您所做的更改会在不到一分钟的时间内得到反映。网络状况有时可能会增加延迟,某些服务可能会缓存某些非凭据信息,这些信息需要时间到期并被替换。
随后的答案是“再试一次”。
我们建议在稍微初始延迟后重试循环,因为在大多数情况下,您会很快看到您的更改。如果你睡觉了,你的代码在大多数情况下会等待太长时间,并且可能不会长到足够罕见的例外情况。
我们主动监控复制系统的性能。但是像S3一样,我们只保证最终的一致性,而不是任何特定的上限。
答案 1 :(得分:6)
我这里的科学答案要少得多...但是我认为这将帮助其他人减少疯狂:)。我一直认为事情花的时间比我预期的要长,所以事情没用。
昨晚,我正在添加一个内联策略,以允许主机从系统管理器获取参数。我认为它不起作用,因为更改后很多分钟(大约5分钟左右),我的CLI命令仍然失败。然后,他们开始工作。因此,这是一个相当大的延迟。
直到现在,我删除了该政策,主机丢失访问权限后,花了2-3分钟的时间(足以谷歌浏览并阅读其他几页)。
一般来说,对于我来说,事情也很轻松,但是如果您确定某些事情应该起作用,但那不是可行的,那就帮自己一个忙,等待10分钟。不幸的是,这使得IAM更改后的自动化听起来比我想象的要难!