暗号化されたスナップショットから作成した新しい Amazon EBS ボリュームが存在しないのはなぜですか?

最終更新日: 2021 年 2 月 10 日

AWS コマンドラインインターフェイス (AWS CLI) 作成ボリュームを使用して、暗号化されたスナップショットから Amazon Elastic Block Store (Amazon EBS) ボリュームを作成しました。コマンドは正常に完了し、ボリューム ID を返します。ボリュームをインスタンスにアタッチしようとすると、ボリュームが見つかりません。暗号化されたスナップショットから作成した新しい EBS ボリュームが存在しないのはなぜですか?

簡単な説明

スナップショットから Amazon EBS ボリュームを作成すると、次の 2 つのオペレーションが実行されます。

  1. まず、Amazon EBS がボリュームの作成を開始します。これにより、ボリューム ID が返され、ボリュームの状態が [creating] (作成中) に設定されます (API/AWS CLI 出力で返されるとおりです)。これは、CreateVolume API が有効であり、正常に登録されていることを意味します。
  2. 次に、非同期呼び出しが開始され、作成しようとしているボリュームの暗号化と復号化に使用される KMS キーの検証が行われます。

KMS 検証が成功すると、ボリュームの状態は [available] (使用可能) に設定され、EBS ボリュームはアクセス可能になります。ただし、指定した KMS キー ID、エイリアス、または ARN が有効でない場合、アクションは完了として表示されますが、最終的にはエラーが返されずに失敗します。

注: CreateVolume の KMS 検証は非同期です。詳細については、「create-volume」および「EBS リソースの暗号化」をご参照ください。

EBS ボリュームをアタッチしようとしたり、EBS ボリュームにアクセスしようとしたりした場合にのみ、この問題に気付くことがあります。その後、CreateVolume API がボリューム ID を返すにもかかわらず、そのボリュームは存在しないことがわかります。また、AWS CloudTrail ログを確認しても、エラーは表示されません。

問題の例

この例では、KMS キーの無効なエイリアスで使用されている CreateVolume API を示しています。CreateVolume API は成功し、ボリューム ID を返し、ボリュームの状態を [creating] (作成中) に設定します。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 イベントを通知します。通知から、イベントの詳細を把握し、無効な keyId を理由として CreateVolume の結果が失敗したことがわかります。

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 ボリュームを作成する場合も、次の理由により作成に失敗することがあります。

  • ボリュームを作成する AWS Identity and Access Management (IAM) ユーザー/ロールには、スナップショットの暗号化に使用される KMS キーにアクセスするための十分なアクセス権限がありません。
  • スナップショットの暗号化に使用された KMS キーが無効になっているか、削除されたか、リージョンに存在しません。