为什么Amazon建议在AWS IAM资源名称中包括区域?

5
IAM资源是全球性的,这意味着它们不会孤立在特定的AWS区域内。但是,IAM角色的文档包括一个warning:

重要

如果您在多个区域中重复使用相同的模板,则为IAM资源命名可能会导致无法恢复的错误。为了防止这种情况发生,我们建议使用FN::Join和AWS::Region创建特定于区域的名称,如以下示例所示...

他们在谈论什么样的“无法恢复的错误”?CloudFormation只是无法创建资源,还是会陷入某种奇怪的状态?
我们拥有的包含IAM资源的堆栈仅包含IAM资源,因此我认为我可以忽略这个警告。
1个回答

7
他们希望让您知道的问题是 IAM 是一个全局命名空间,如果您不手动为资源命名空间,则可能会导致问题。
以下是一个例子:
- 在 eu-central-1 中 Stack 1 创建了一个名称为 AppAdmin 的角色 - 在 eu-west-1 中 Stack 2 创建了一个名称为 AppAdmin 的角色 - 这个堆栈将无法创建或更新
这种故障通常不会对生命构成威胁,它意味着您的部署将被破坏。 如果是现有堆栈的更新,将执行回滚操作。 如果是新堆栈,则堆栈将无法创建,您需要在重新发布之前手动删除堆栈(默认情况下,孤立的资源将被删除)。
按照建议的方式对资源进行命名空间处理即可避免此问题:
- 在 eu-central-1 中 Stack 1 创建一个名为 AppAdmin-eu-central-1 的角色 - 在 eu-west-1 中 Stack 2 创建一个名为 AppAdmin-eu-west-1 的角色
现在大家都很高兴!
(同样适用于具有全局命名空间的 S3 存储桶名称和其他资源)

好的,我觉得最好只创建一次资源,而不是用不同的名称创建多个相同的资源。我会忽略他们的建议,因为正如我之前提到的,我们的 IAM 资源在它们自己的堆栈中,所以在新区域中无法重新创建它们是可以接受的行为。 - user3092396
1
假设您在不同地区部署了不同版本的应用程序,其资源需要不同的功能/特权;-) - 存在一种方法来管理这种混乱... - Maurice

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