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

Scr*_*ius 5 amazon-web-services aws-cloudformation amazon-iam

IAM 资源是全球性的,这意味着它们不会隔离在特定的 AWS 区域内。但是,IAM 角色的文档包含一条警告

重要的

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

他们在谈论什么样的“不可恢复的错误”?cloudformation 会无法创建资源,还是会陷入某种奇怪的状态?

我们拥有的包含 IAM 资源的堆栈包含 IAM 资源,因此我怀疑我可以忽略此警告。

Mau*_*ice 7

他们希望您注意的问题是 IAM 是一个全局命名空间,如果您不手动命名资源,这可能会导致问题。

这是一个例子:

  • eu-central-1 中的堆栈 1 创建一个名为 的角色AppAdmin
  • eu-west-1 中的堆栈 2 创建一个具有该名称的角色AppAdmin-该堆栈将无法创建或更新

这种失败通常不会危及生命,它只是意味着您的部署将被破坏。如果是现有堆栈的更新,则会执行回滚。如果是新的堆栈,该堆栈将无法创建,您需要手动删除该堆栈,然后才能再次转出(默认情况下,孤立资源将被删除)。

您可以通过按照建议命名资源来简单地避免此问题:

  • eu-central-1 中的堆栈 1 创建一个名为 的角色AppAdmin-eu-central-1
  • eu-west-1 中的堆栈 2 创建一个名为的角色AppAdmin-eu-west-1

现在大家都幸福了!

(对于 S3 存储桶名称和具有全局命名空间的其他资源也是如此)