跳至内容

为什么我会在使用 CloudFormation 启动 EC2 实例时收到 "did not stabilize" 错误?

2 分钟阅读
0

我正在尝试在 AWS CloudFormation 中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例,但收到了 "did not stabilize" 错误。

简短描述

当 CloudFormation 成功启动 EC2 实例,但该实例未能达到稳定状态时,会出现以下错误:

"AWS::EC2::Instance with identifier 'i-abcxyz1234' did not stabilize"

出现上述错误的原因如下:

  • 您使用了其他 AWS 账户中的 AWS Key Management Service (AWS KMS) 密钥来加密从中启动 EC2 实例的亚马逊机器映像 (AMI)。
  • 您未在 CloudFormation 模板中指定 AWS KMS 密钥。

要解决这些问题,请执行以下操作:

  • 更新 AWS KMS 密钥策略,允许对您启动实例的账户执行 AWS KMS 操作。
  • 确认账户中存在 AWS KMS 密钥,并且您在模板中指定了 AWS::KMS::Alias

解决方法

**先决条件:**要确定导致 "did not stabilize" 错误的原因,请在 Event source(事件源)列中使用 kms.amazonaws.com 筛选 AWS CloudTrail 日志。选择 Preferences(首选项)以显示 Error code(错误代码)列,然后打开 Error code(错误代码)。您可以在 Event name(事件名称)列中查找问题。有关更多信息,请参阅如何查看有关 AMI 或快照的加密信息?

更新密钥策略

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

当您尝试跨 AWS 区域或账户访问加密资源时,您可能会在 CloudTrail 日志中收到以下错误消息:

"user/role xyz is not authorized to perform: kms:ReEncryptFrom..."

要获取 AWS KMS 密钥 ID,请完成以下步骤:

  1. 在 AMI 所在的账户中打开 Amazon EC2 控制台
  2. 在导航窗格中,选择 Images(映像),然后选择 AMI
  3. 选择 AMI。
  4. 选择 Storage(存储)选项卡,然后记下 KMS 密钥 ID。

要检查密钥策略是否向您启动实例所在的账户授予 AWS KMS 权限,请参阅查看密钥策略

以下密钥策略包含必要的 AWS KMS 权限:

{
"Sid": "Allow destination account use of the customer managed key",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::destination-account:root"
]
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
}

**注意:**将 destination-account 替换为您启动实例的账户 ID。

如果密钥策略未包含必要的 AWS KMS 权限,则编辑策略以添加这些权限。此外,请确保向执行堆栈操作的 Identity and Access Management (IAM) 实体授予相同的权限。要添加权限,您可以使用 IAM 控制台AWS CLI。要编辑现有 IAM 策略,请参阅编辑 IAM 策略

在 CloudFormation 模板中指定 AWS KMS 密钥

如果您使用了 BlockDeviceMapping 属性,但未在 CloudFormation 模板中指定 AWS KMS 密钥别名,则会在 CloudTrail 日志中收到 "NotFoundException" 错误消息。

要解决此问题,请在模板中指定 AWS KMS 密钥别名。确保该别名与其关联的密钥位于同一区域和账户中。

AWS 官方已更新 1 年前