AWS IAM 实例策略将凭证应用于一个区域中的实例,但不应用于另一个区域中的实例

AWS IAM instance policy applying credentials to instance in one region, but not another

我有一个从模板启动 AWS EC2 实例的设置,它们的 AMI 包含 AWS CLI,因此它可以在启动时复制私有 S3 存储桶的内容。此模板自动应用具有“AmazonS3ReadOnlyAccess”策略的 IAM 角色。到目前为止,这在 eu-west-2 区域一直按预期工作,但现在我想在 us-east-2 区域 运行 这些实例。我复制了 AMI 并使用与 eu-west-2 中相同的设置制作了一个新模板,但是当同步 S3 存储桶的脚本启动时(它只是一个 运行s "aws s3 sync . .. ...") 同步文件夹的内容是空的。

环顾四周后,我注意到它会引发“致命错误:无法找到凭据”错误。我使用“aws configure list”检查了凭据,发现 access_key、secret_key 和区域未设置。如果我 运行 返回 eu-west-2 中的相同实例,则会填充这些字段。

我已经尝试重新复制基础 AMI、重新创建启动模板、创建区域特定的存储桶、创建新的 IAM 策略以及所有这些作为 IAM 用户和根用户,凭证仍然在 eu-west 中设置-2,但不是 us-east-2。 唯一不同的配置是 VPC、子网和路由 table 设置——原因很明显,因为它们需要位于新区域中。 有人知道为什么会这样吗?因为我 运行 没有想法。

us-east-2a 实例

us-east-2b 实例

好的,因为我一直对复制的 AMI 有问题,所以我决定在 us-east-2 服务器上从头开始构建一个。

我创建了一个新实例,设置它,并创建了一个新的 AMI。当我启动它时,实例策略正确应用并且一切正常。然而,当我从 AMI 制作模板时,所有凭据再次丢失。我尝试从 AMI(而不是模板)启动实例,一切都再次运行。我比较了模板和 AMI 启动实例之间的设置,唯一的区别(除了不同的 IP 等)是子网 - 工作 AMI 图像在 us-east-2a 上,模板创建的实例在 us-east-2b。现在这对我来说似乎很奇怪,该策略应用的凭据将取决于子网,但据我测试,情况似乎如此。

TL;DR。由于未在与原始 AMI 构建所在的子网(us-east-2a 和 us-east-2b)相同的子网上启动新映像,因此未应用策略集凭据。通过将启动模板设置为使用相同的子网解决。