在应用AWS IAM策略有效之前,我应该等待多长时间?

Ed *_*ris 48 policy amazon-s3 amazon-web-services user-permissions amazon-iam

我正在以编程方式添加和删除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复制了我的问题)

Mic*_*bot 53

短语"几乎立即"在IAM FAQ中使用了5次,当然,这有点主观.

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

我不知道你是否考虑过它,但它完全在可能的范围内,你可能实际上,在流程的第4步,看到一系列的通过,失败,通过,通过,失败,失败,失败,失败...因为桶中的桶和对象实际上都不是单个地方的单个事物,如S3中不同操作的混合一致性模型所证明的,其中新对象是立即一致的,而最终覆盖和删除因为政策的应用本身几乎可以肯定是一个分布式的事件,所以对于在桶或对象上"有效"的策略的概念并不是一个完全有意义的概念.

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

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

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

随之而来的答案是"再试一次".

我们建议在稍微初始延迟后重试循环,因为在大多数情况下,您会很快看到您的更改.如果你睡觉了,你的代码在大多数情况下会等待太长时间,并且可能不会长时间用于罕见的异常.

我们主动监控复制系统的性能.但是像S3一样,我们只保证最终的一致性,而不是任何特定的上限.

  • 我通常会在5或10秒内看到变化.它绝对不是即时的,但它并不是很慢. (9认同)

Joh*_*0te 27

我在这里有一个不那么科学的答案......但我认为它会帮助其他一些人感觉不那么疯狂:)。我一直认为事情没有奏效,而他们只是花费的时间比我预期的要多。

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

刚才,我删除了该策略,并在我的主机失去访问权限之前花费了 2-3 分钟(足以用谷歌搜索此内容并阅读其他几页)。

一般来说,事情对我来说也很活泼,但是如果您非常确定某些东西应该起作用而它不起作用,那么请帮自己一个忙并等待 10 分钟。不幸的是,这使得 IAM 更改后的自动化听起来比我想象的要困难!

  • 就我而言,“几乎立即”意味着 7 分钟。与不断刷新和反复检查相比,休假是更有效地利用我的时间:) (3认同)
  • 谢谢你证实了我的怀疑。我发现附加到 EC2 实例的角色比附加到 IAM 用户的角色需要更长的时间来更新。 (2认同)