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



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

例如,这可能成功也可能不成功(我使用的是Java 1.6.6 SDK):

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

如果我在#3和#4之间设置一个断点并等待几秒钟,用户将无法从bucket中读取,这正是我所期望的。如果我删除断点,用户可以从bucket中读取,这是错误的。

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

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

是否有任何关于策略应用程序内部的文档?

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

短语"几乎立即";在IAM常见问题解答中使用了5次,当然,这有点主观。

由于AWS是一个全局分布的系统,您的更改必须传播,而且系统作为一个整体似乎是为了支持可用性和分区容忍度,而不是即时一致性。

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

为了确认这种政策的应用,AWS需要暴露(至少间接)询问每个拥有该政策复制副本的实体的能力,以查看其是否具有当前版本。。。至少可以说,在S3这样庞大的系统中,这可能是不切实际或难以操作的,S3已经超过了惊人的2万亿个对象,并且每秒提供超过110万个请求的峰值负载。

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

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

同时该做什么的附带答案是";再试一次"

我们建议在稍有初始延迟后进行重试循环,因为在大多数情况下,您会很快看到您的更改得到反映。如果你睡着了,在大多数情况下,你的代码等待的时间会太长,而且可能不够长,无法处理罕见的异常。

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

我有一个远没有那么科学的答案。。。但我认为这将帮助其他一些人减轻精神错乱的感觉:)。我一直认为事情不起作用,而它们只需要比我预期的更多的时间。

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

刚才,我删除了该策略,花了2-3分钟(足够在谷歌上搜索并阅读其他几个页面),我的主机才失去访问权限。

一般来说,事情对我来说也很快,但如果你很确定某件事应该奏效,但事实并非如此,那就帮自己一个忙,等10分钟。不幸的是,这使得IAM更改后的自动化听起来比我想象的更难!

最新更新