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

Why do Amazon suggest including the region in AWS IAM resource names?

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

Important

Naming an IAM resource can cause an unrecoverable error if you reuse the same template in multiple regions. To prevent this, we recommend using FN::Join and AWS::Region to create a region-specific name, as in the following example ...

他们说的是哪种“不可恢复的错误”? cloudformation 会不会创建资源失败,还是会卡在某种奇怪的状态?

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

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

这是一个例子:

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

这种故障通常不会危及生命,它只是意味着,您的部署将被破坏。 如果是对现有堆栈的更新,将执行回滚。 如果是新的堆栈,堆栈将无法创建,您需要在再次推出之前手动删除堆栈(默认情况下,孤立的资源将被删除)。

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

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

现在大家都很开心!

(S3 Bucket 名称和其他具有全局命名空间的资源也是如此)