为什么我从加密快照创建的新 Amazon EBS 卷不存在?

上次更新日期:2021 年 2 月 10 日

我使用 AWS 命令行界面 (AWS CLI) create-volume 从加密快照创建了 Amazon Elastic Block Store (Amazon EBS) 卷。该命令成功完成并返回卷 ID。当尝试将卷挂载到实例时,我找不到卷。为什么我从加密快照创建的新 EBS 卷不存在?

简短描述

当您从快照创建 Amazon EBS 卷时,将运行两个操作:

  1. 首先,Amazon EBS 启动卷创建。这将返回卷 ID,并将卷状态设置为“正在创建”(如 API/AWS CLI 输出所返回)。这意味着 CreateVolume API 有效且已成功注册。
  2. 接下来,将启动异步调用以验证用于加密和解密正在创建的卷的 KMS 密钥。

如果 KMS 验证成功,则卷状态将设置为可用,EBS 卷便可访问。但是,如果指定的 KMS 密钥 ID、别名或 ARN 无效,则操作可能会显示为完成,但最终失败且不会返回任何错误。

注意:CreateVolume 的 KMS 验证是异步的。有关更多信息,请参阅 create-volume加密 EBS 资源

您可能只在尝试挂载或访问 EBS 卷时才会注意到问题。然后,您发现它不存在,尽管 CreateVolume API 返回了卷 ID。此外,如果您检查 AWS CloudTrail 日志,则不会看到任何错误。

问题示例

此示例显示了与 KMS 密钥的无效别名搭配使用的 CreateVolume API。CreateVolume API 成功并返回卷 ID,然后将卷状态设置为正在创建。由于 KMS 密钥的别名无效,所以异步身份验证失败。这会导致整个操作失败。当您检查 AWS CloudTrail 日志中的创建卷事件时,未发现错误,因为 CreateVolume 已操作成功。

$ aws ec2 create-volume --volume-type gp2 --availability-zone eu-west-1c --encrypted --kms-key-id hana --snapshot-id snap-0a27fe340500641d9 
{
    "AvailabilityZone": "eu-west-1c", 
    "MultiAttachEnabled": false, 
    "Tags": [], 
    "Encrypted": true, 
    "VolumeType": "gp2", 
    "VolumeId": "vol-043fe27d0ccf74b36", 
    "State": "creating", 
    "KmsKeyId": "hana", 
    "SnapshotId": "snap-0a27fe340500641d9", 
    "Iops": 100, 
    "CreateTime": "2020-10-06T18:03:09.000Z", 
    "Size": 8
}

AWS CloudTrail 日志:

responseElements": {
        "requestId": "8677d3cd-ad1d-4866-95f5-375d92a35813",
        "volumeId": "vol-043fe27d0ccf74b36",
        "size": "8",
        "snapshotId": "snap-0a27fe340500641d9",
        "zone": "eu-west-1c",
        "status": "creating",
        "createTime": 1602007389000,
        "volumeType": "gp2",
        "iops": 100,
        "encrypted": true,
        "masterEncryptionKeyId": "hana",
        "tagSet": {},
        "multiAttachEnabled": false
    },
    "requestID": "8677d3cd-ad1d-4866-95f5-375d92a35813",
    "eventID": "bd4216df-ba39-425e-b272-936212ae6699",
    "eventType": "AwsApiCall",
    "recipientAccountId": "864258534754"
}

当运行 describe-volume-status 时,您会发现卷不存在:

$ aws ec2 describe-volume-status --volume-ids vol-043fe27d0ccf74b36
An error occurred (InvalidVolume.NotFound) when calling the DescribeVolumeStatus operation: 
The volume 'vol-043fe27d0ccf74b36' does not exist.

解决方法

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

使用 describe-volume-status API

使用 describe-volume-status API 检查 EBS 卷是否存在。

订阅 CloudWatch CreateVolume 事件

订阅公有 CloudWatch CreateVolume 事件,了解有关卷创建失败的更多信息。这是您可能会收到的示例通知。它会通知您 CreateVolume CloudWatch 事件。从通知中,您可以更深入地了解事件,并且可以看到 CreateVolume 结果由于无效密钥 ID 而失败。

AWS Notification Message
CreateVolume <no-reply@sns.amazonaws.com>
{
"version":"0","id":"192e695f-2387-1cf0-fb1c-1cb32f047212",
"detail-type":"EBS Volume Notification","source":"aws.ec2",
"account":"12345678","time":"2020-10-06T18:03:10Z",
"region":"eu-west-1",
"resources":["arn:aws:ec2:eu-west-1:864258534754:volume/vol-043fe27d0ccf74b36"],
"detail":
{"result":"failed","cause":"Invalid keyId hana","event":"createVolume",
"request-id":"8677d3cd-ad1d-4866-95f5-375d92a35813"}
}
注意:如果您从加密快照创建 EBS 卷,也可能由于以下原因而无法创建 EBS 卷:

  • 创建卷的 AWS Identity and Access Management (IAM) 用户/角色没有足够的权限来访问用于加密快照的 KMS 密钥。
  • 用于加密快照的 KMS 密钥已被禁用、删除或不在区域中。