应用AWS IAM策略后,我应该等待多长时间才生效?


75

我正在以编程方式添加和删除AWS IAM用户策略,并且从这些策略的应用程序中获得不一致的结果。

例如,这可能成功也可能不会成功(我正在使用Java 1.6.6 SDK):

  1. 从可以读取特定存储桶的用户开始
  2. 清除用户策略(列出策略,然后为每个策略调用“ deleteUserPolicy”)
  3. 等待直到用户没有用户策略(调用“ listUserPolicies”,直到它返回一个空集)为止
  4. 尝试从存储桶中读取数据(这应该会失败)

如果我在#3和#4之间插入一个断点并等待几秒钟,那么用户将无法从存储桶中读取内容,这正是我所期望的。如果删除断点,则用户可以从存储桶中读取数据,这是错误的。

(这在我添加策略然后访问资源时也不一致)

我想知道策略更改何时对组件(S3,SQS等)产生了影响,而不仅是对IAM系统产生了影响。有什么办法可以从中获得收据或确认吗?或者也许有一定的时间等待?

是否有关于政策申请内部的任何文件?

(仅供参考,我从https://forums.aws.amazon.com/thread.jspa?threadID=140383&tstart=0复制了我的问题)

Answers:


72

IAM FAQ中,“几乎立即”一词已使用了5次,当然,它有些主观。

由于AWS是全球分布的系统,因此您的更改必须传播,并且整个系统似乎旨在支持可用性和分区容忍度,而不是即时一致性。

我不知道您是否考虑过,但这完全在您可能会遇到的范围之内,在流程的第4步中,可以看到一系列通过,失败,通过,通过,失败,失败,失败,之所以失败...是因为S3中不同操作的混合一致性模型证明了存储桶或存储桶中的对象实际上都不是单个位置的单个事物,在该模型中,新对象是立即一致的,而最终覆盖和删除是一致的一致的...因此,策略的概念对存储桶或对象是否具有“影响”,并不是一个完全有意义的概念,因为该策略的应用本身几乎可以肯定是一个分布式事件。

要确认此类策略的应用,将要求AWS公开(至少间接)询问具有该策略副本的每个实体的功能,以查看其是否具有当前版本...这可能不切实际或不可行。至少在S3这样庞大的系统中,至少已经说不上说了,这已经超过了惊人的2万亿个对象,并且峰值负载超过每秒110万个请求

AWS对本论坛帖子的官方解答提供了更多信息:

虽然您对IAM实体所做的更改会立即反映在IAM API中,但可能需要花费大量时间才能在全局范围内反映信息。在大多数情况下,您所做的更改会在不到一分钟的时间内反映出来。网络状况有时可能会增加延迟,某些服务可能会缓存某些非凭据信息,这些信息会花费时间并被替换。

与此对应的答案是“重试”。

我们建议您在稍有初始延迟后重试循环,因为在大多数情况下,您会很快看到更改。如果您睡着了,那么在大多数情况下,您的代码将等待太久,对于罕见的异常,等待时间可能不够长。

我们积极监视复制系统的性能。但是像S3一样,我们只保证最终的一致性,而不保证任何特定的上限。


10
我通常会在5或10秒内看到变化。绝对不是即时的,但不是很慢。
Charles Engelke

1
谢谢您的答复-幸运的是这是测试代码,我可以自由地放弃当前的方法并做一些不同的事情。
Ed Norris

我遇到了同样的问题。编写了一段脚本来搭建新的CodePipeline项目。一直InvalidStructureException: CodePipeline is not authorized to perform AssumeRole on role <arn of the freshly created role>遇到问题,直到我手动在角色创建和CodePipeline创建之间等待10秒钟为止。
Trung Hieu Nguyen

20

我在这里的回答远不科学...但是我认为这将帮助其他人减少疯狂:)。我一直认为事情花的时间比我预期的要长,因此事情没有任何效果。

昨晚我添加了一个内联策略,以允许主机从系统管理器获取参数。我以为它没有用,因为更改后很多分钟(大约5分钟左右),我的CLI命令仍然失败。然后,他们开始工作。因此,这是一个相当大的延迟。

刚才,我删除了该政策,并花了2-3分钟的时间(足以谷歌浏览并阅读其他几页),我的主机才失去访问权限。

一般来说,对我来说,事情也很轻松,但是如果您确定某些事情应该起作用,那不是可行的,那就帮自己一个忙,等待10分钟。不幸的是,这使IAM更改后的自动化听起来比我想象的要难!


我为SES创建了一个新的IAM密钥。它可以在us-east-1中使用,但是在eu-central-1中我是“未打沙盒”的,但是这里的密钥被认为是无效的,我认为已经创建了一个多小时。还是行不通。我会睡觉的,看看明天是否可行。
Leif Neland

不,7小时之后关键还是只适用于美国东1
雷夫Neland

2
就我而言,“几乎立即”表示7分钟。休假比持续刷新和
反复

感谢您证实我的怀疑。我发现,连接到EC2实例的角色比连接到IAM用户的角色花费的时间要长得多。
罗杰·法尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.