申请 AWS IAM 策略后需要等待多久才能生效?

122

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

例如,这可能会成功或失败(我使用Java 1.6.6 SDK):

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

如果我在#3和#4之间插入断点并等待几秒钟,用户就无法从存储桶中读取,这是我期望的。如果我删除断点,则用户可以从存储桶中读取,这是错误的。

(当我添加策略然后访问资源时,这也是不一致的)

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

有关策略应用程序内部的文档资料吗?

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

2个回答

103
“几乎立即”这个短语在 IAM FAQ 中出现了5次,当然,这是有点主观的。
由于AWS是一个全球分布式系统,您的更改必须传播,整个系统似乎被设计为支持可用性和分区容错,而不是立即一致性。
我不知道您是否考虑过,在您的流程的第4步中,您可能会看到一系列的通过、失败、通过、通过、失败、失败、失败、失败...因为存储桶或存储桶中的对象实际上不是单个位置上的单个物体,正如S3中不同操作的混合一致性模型所证明的那样,其中新对象是立即一致的,而覆盖和删除则是最终一致的......因此,策略是否对存储桶或对象产生了“影响”的概念并不是完全有意义的概念,因为策略的应用本身几乎肯定是一个分布式事件。

要确认这些政策的应用需要AWS展示(至少间接地)审查拥有该政策副本的每个实体的能力,以查看它是否具有当前版本…在像S3这样的系统中,这可能是不切实际或难以控制的,因为它已经超出了惊人的2万亿对象,并且每秒提供超过1.1百万个请求的峰值负载

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

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

与此同时,伴随的答案是“再试一次”。

我们建议在稍微延迟一段时间后进行重试循环,因为在大多数情况下,您会很快看到您的更改反映出来。如果您休眠,您的代码在大多数情况下将等待时间过长,并且可能对于罕见的异常情况不够长。 我们积极监控复制系统的性能。但是像S3一样,我们只保证最终一致性,而不保证任何特定的上限。

14
通常我会在5或10秒钟内看到变化。这绝对不是瞬间的,但也不是非常缓慢的。 - Charles Engelke
1
谢谢回复 - 幸运的是这只是测试代码,我有自由基本上放弃我的当前方法并尝试不同的方法。 - Ed Norris
我遇到了同样的问题。编写了一段脚本来搭建一个新的CodePipeline项目。在角色创建和CodePipeline创建之间手动等待10秒钟后,仍然会遇到“InvalidStructureException:CodePipeline未被授权在新创建的角色ARN上执行AssumeRole”的问题。 - Trung Hieu Nguyen

40

我这里的答复可能不够科学,但我觉得它会帮助其他人感到不那么疯狂 :). 我一直以为事情没有按预期的时间进展而认为它们没有起作用。

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

刚才,我删除了该策略,我的主机失去了访问权限,前后大约需要2-3分钟。(足够我Google这个问题并阅读几篇其它文章)

总的来说,对我来说,事情通常都很快,但如果您相当确定某些事情应该起作用而却还没有发生,请耐心等待10分钟,给自己一个方便。不幸的是,这使得IAM更改之后的自动化听起来比我想象的要难!


我为SES创建了一个新的IAM密钥。它在us-east-1中有效,但在eu-central-1中我已经“解除沙箱限制”,但是该密钥被认为是无效的。 我认为我已经创建了超过一个小时;仍然不起作用。我会睡一觉,看看明天是否能正常工作。 - Leif Neland
1
不好意思,7个小时后,该密钥仍然只能在us-east-1地区使用。 - Leif Neland
6
在我的情况下,“几乎立即”意味着7分钟。抽出时间休息比不断刷新和反复检查更加高效利用我的时间 :) - Fabien Snauwaert
5
感谢您证实了我的猜测。我发现绑定到EC2实例的角色更新所需的时间比绑定到IAM用户的角色要长得多。 - Roger Far
“几乎立即” 对我来说意味着10分钟。 - jellycsc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接