暗号化されていないEBSスナップショットを暗号化する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

yoshidaです。

AWS Elastic Block Store(以下EBS)は暗号化に対応しており、暗号化のタイミングについて以下のような特徴があります。

  • EBSボリュームの作成時に暗号化を有効にする
  • 暗号化されていない既存のEBSボリュームは暗号化できない
  • 暗号化されたEBSボリュームから取ったスナップショットは暗号化される

スナップショットについてはどうかというと、暗号化されたスナップショットから暗号化されていないスナップショットへの変換は出来ませんが、この逆、つまり、暗号化されていないスナップショットを暗号化することはできます

AWS CLIからEBSスナップショットを暗号化する

スナップショットの暗号化にはEC2のCopySnapshot APIでEncrypted=true を渡せば完了です。 AWS CLIから試してみましょう。

暗号化されていないスナップショットの確認

まずはEBSスナップショットを確認します。

$  aws ec2 describe-snapshots --owner-id 12345
{
    "Snapshots": [
        {
            "Description": "",
            "Tags": [
                {
                    "Value": "unencrypted-snapshot",
                    "Key": "Name"
                }
            ],
            "Encrypted": false,
            "VolumeId": "vol-asdf",
            "State": "completed",
            "VolumeSize": 8,
            "Progress": "100%",
            "StartTime": "2015-08-06T02:38:35.000Z",
            "SnapshotId": "snap-4321",
            "OwnerId": "12345"
        }
    ]
}

"Encrypted": falseとあるように、スナップショットは暗号化されていません。

スナップショットの暗号化

このスナップショットから暗号化されたスナップショットを作成するには、スナップショットのコピーコマンド(ec2 copy-snapshot)に--encryptedオプションを渡します。

$ aws ec2 copy-snapshot --source-region ap-northeast-1 --source-snapshot-id snap-4321 --encrypted --description 'encrypted snapshot'
{
    "SnapshotId": "snap-9876"
}

暗号化されたスナップショットの確認

$ aws ec2 describe-snapshots --owner-id 12345
{
    "Snapshots": [
        {
            "Description": "",
            "Tags": [
                {
                    "Value": "unencrypted-snapshot",
                    "Key": "Name"
                }
            ],
            "Encrypted": false,
            "VolumeId": "vol-asdf",
            "State": "completed",
            "VolumeSize": 8,
            "Progress": "100%",
            "StartTime": "2015-08-06T02:38:35.000Z",
            "SnapshotId": "snap-4321",
            "OwnerId": "12345"
        },
        {
            "Description": "encrypted snapshot",
            "Encrypted": true,
            "VolumeId": "vol-4004fb3b",
            "KmsKeyId": "arn:aws:kms:ap-northeast-1:12345:key/asdf",
            "State": "completed",
            "VolumeSize": 8,
            "Progress": "100%",
            "StartTime": "2015-08-06T02:44:08.000Z",
            "SnapshotId": "snap-9876",
            "OwnerId": "12345"
        }
    ]
}

コピーコマンド経由で作成されたスナップショットは"Encrypted": trueというように無事暗号化されました。

暗号化の鍵について

EBS暗号化ではデフォルトのAWS Key Management Service(AWS KMS)カスタマーマスターキー(CMK)が使用されます。 コピー時に--kms-key-idオプションを渡せばデフォルト以外のCMKを利用することも可能です。 暗号化に利用されている鍵は$ aws ec2 describe-snapshotsのレスポンスKmsKeyIdから確認できます。

まとめ

暗号化されていないEBSボリュームを直接暗号化することはできませんが、一度スナップショットを取ることで簡単に暗号化できました。

参考