為什麼我從加密快照建立的新 Amazon EBS 磁碟區不存在?

2 分的閱讀內容
0

我使用 AWS Command Line Interface (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 key ID、別名或 ARN 無效,該操作即會顯示已完成。但是,磁碟區建議最後會失敗,而且不會傳回任何錯誤。

注意: createVolume 的 AWS KMS 驗證是非同步的。如需詳細資訊,請參閱 create-volume加密 Amazon EBS 資源

當您連接或存取 EBS 磁碟區時,您可能會注意到這個問題。雖然 createVolume API 傳回磁碟區 ID,但 EBS 磁碟區不會存在且 AWS CloudTrail 日誌不會顯示任何錯誤。

問題範例

此範例顯示正在使用的 createVolume API,其中包含無效的 AWS KMS key 別名。createVolume API 成功並傳回磁碟區 ID,然後將磁碟區狀態設定為正在建立。因為 AWS KMS key 的別名無效,所以非同步驗證會失敗。這會導致整個操作失敗。當您檢查 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 事件。通知顯示 createVolume 結果因為無效的 keyId 而失敗。

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 key。
  • 用於加密快照的 AWS KMS 已關閉、刪除或不在 AWS 區域。

相關資訊

如何最佳化 Amazon EBS 磁碟區的效能?

為什麼我無法在搜尋 CloudTrail 事件日誌時找到建立 EBS 磁碟區的使用者名稱?

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