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

Amazon web services 应用AWS IAM策略后,我应该等待多长时间才能生效?,amazon-web-services,amazon-s3,user-permissions,amazon-iam,Amazon Web Services,Amazon S3,User Permissions,Amazon Iam,我正在以编程方式添加和删除AWS IAM用户策略,并且从这些策略的应用程序中得到不一致的结果 例如,这可能会成功,也可能不会成功(我使用的是Java 1.6.6 SDK): 从一个可以读取特定bucket的用户开始 清除用户策略(列出策略,然后为每个策略调用“deleteUserPolicy”) 等待用户没有用户策略(调用“ListUserPolicys”,直到它返回一个空集) 尝试从存储桶中读取数据(此操作应失败) 如果我在#3和#4之间设置一个断点并等待几秒钟,用户将无法读取存储桶中的数据,

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

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

  • 从一个可以读取特定bucket的用户开始
  • 清除用户策略(列出策略,然后为每个策略调用“deleteUserPolicy”)
  • 等待用户没有用户策略(调用“ListUserPolicys”,直到它返回一个空集)
  • 尝试从存储桶中读取数据(此操作应失败)
  • 如果我在#3和#4之间设置一个断点并等待几秒钟,用户将无法读取存储桶中的数据,这正是我所期望的。如果我删除断点,用户可以从bucket中读取,这是错误的

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

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

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

    (仅供参考,我从中抄袭了我的问题)

    短语“几乎立即”在中使用了5次,当然,有些主观

    因为AWS是一个全球分布的系统,所以您的更改必须传播,而且整个系统的设计似乎有利于可用性和分区容忍即时一致性

    我不知道你是否考虑过,但这完全在可能性范围之内,在你的流程的第4步,你可能会看到一系列的通过,失败,通过,通过,失败,失败。。。因为无论是一个bucket还是bucket中的一个对象实际上都不是一个地方的一件事,正如S3中不同操作的模型所证明的,在S3中,新对象是即时一致的,而覆盖和删除最终是一致的。。。因此,策略是否对bucket或对象产生了“影响”的概念并不是一个完全有意义的概念,因为策略的应用本身几乎肯定是一个分布式事件

    要确认这种策略的应用,AWS需要公开(至少间接地)询问具有该策略复制副本的每个实体的能力,以查看其是否具有当前版本。。。在一个像S3这样庞大的系统中,这可能是不切实际或难以操作的,因为S3已经超过了惊人的增长速度

    AWS官方答案提供更多信息:

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

    与此同时,对该做什么的回答是“再试一次”

    我们建议在稍微延迟一段时间后进行重试循环,因为在大多数情况下,您会很快看到您的更改得到反映。如果您睡眠,在大多数情况下,您的代码将等待太长时间,并且可能没有足够长的时间来处理罕见的异常

    我们主动监视复制系统的性能。但和S3一样,我们只保证最终的一致性,而不保证任何特定的上界


    我这里有一个不太科学的答案。。。但我认为这会让其他人感觉不那么疯狂:)。我一直在想事情并没有起作用,而它们只是比我预期的要花更多的时间

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

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


    通常情况下,事情对我来说也很快,但如果你非常确定某件事情应该有效,而事实并非如此,那么请帮自己一个忙,等待10分钟。不幸的是,这使得IAM更改后的自动化听起来比我想象的要困难

    我通常在5或10秒内看到变化。这肯定不是即时的,但也不是很慢。感谢您的回复-幸运的是,这是测试代码,我可以自由地基本上放弃我目前的方法,做一些不同的事情。我遇到了同样的问题。编写了一段脚本来构建一个新的代码管道项目。继续运行到
    InvalidStructureException:CodePipeline无权对角色执行AssumeRole
    问题,直到我手动在角色创建和CodePipeline创建之间等待10秒。我为SES创建了新的IAM密钥。它在us-east-1中有效,但我在eu-central-1中“没有沙盒”,但那里的密钥被称为无效,我想这是一个多小时我创建的;仍然不起作用。我明天再睡一觉,看看它是否管用。不,7小时后,钥匙仍然只在美国-东部-1在我的情况下,“几乎立即”意味着7分钟。休息是对我时间的更有效利用,而不是不断刷新和反复检查:)谢谢你证实我的怀疑。我发现附加到EC2实例的角色比附加到IAM用户的角色需要更长的更新时间。