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

2 分钟阅读
0

我使用 AWS 命令行界面(AWS CLI)create-volume 命令从加密快照创建 Amazon Elastic Block Store(Amazon EBS)卷。该命令成功运行并返回卷 ID。当我尝试将卷连接到实例时,我找不到这个卷。

简述

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

  1. Amazon EBS 启动卷创建。这将返回一个卷 ID,并将卷状态设置为正在创建,和 API 或 AWS CLI 输出中返回的一样。这意味着 createVolume API 有效且已成功注册。
  2. 启动异步调用以验证用于加密和解密您创建的卷的 AWS Key Management Service(AWS KMS)密钥。

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

**注意:**createVolume 的 AWS KMS 验证是异步操作。有关更多信息,请参阅创建卷加密 Amazon EBS 资源

连接或访问这个 EBS 卷时,您可能会注意到这个问题。尽管 createVolume API 会返回卷 ID,但是相关 EBS 卷不存在,AWS CloudTrail 日志中也没有显示任何错误。

问题示例

此示例显示了使用 createVolume API 时,AWS KMS 密钥的别名无效。createVolume API 执行成功并返回卷 ID,然后将卷状态设置为正在创建。由于 AWS 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",z
        "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-043fe27d0ccf74b36An error occurred (InvalidVolume.NotFound) when calling the DescribeVolumeStatus operation:
The volume 'vol-043fe27d0ccf74b36' does not exist.

解决方案

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

使用 describe-volume-status API

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

订阅 CloudWatch createVolume 事件

订阅公开 CloudWatch createVolume 事件,了解有关卷创建失败的更多信息。在此示例中,通知显示了 createVolume CloudWatch 事件。通知显示,由于 keyId 无效,createVolume 失败。

AWS Notification MessageCreateVolume <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 卷,则创建快照也可能由于以下原因而失败:

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

相关信息

如何优化我的 Amazon EBS 卷的性能?

为什么我无法通过搜索 CloudTrail 事件日志找到创建 EBS 卷的用户名?

AWS 官方
AWS 官方已更新 6 个月前