はじめに
システム構築にEC2を使う場合に、社内セキュリティ基準などでディスクレベルの暗号化が必要な場合があるかと思います。
その際にEBSならばすぐに暗号化できるのですがルートボリュームは一手間かかるのでそれを紹介します。
手順
EC2のインスタンスを作成
事前にSecurity group、Subnet、IAMのインスタンスプロファイル、鍵を変数として設定しておいてください。
また、jqをyum install -y jq
などでインストールしておいてください。
instanceid=`aws ec2 run-instances \
--image-id ami-1a15c77b \
--count 1 \
--instance-type t2.small \
--security-group-ids ${sg_id} \
--subnet-id ${subnet_id} \
--associate-public-ip-address \
--key-name ${key_name} \
--iam-instance-profile Arn=arn:aws:iam::${iam_profile} \
--block-device-mappings '[{"DeviceName":"/dev/xvda","Ebs":{"DeleteOnTermination":false, "VolumeSize":20,"VolumeType":"gp2"}}]' \
| jq -c -r '.Instances[]|.InstanceId'`
この時点ではルートボリュームは暗号化できません。
AMI作成
作成したインスタンスのAMIを作成します。
この時点でもまだルートボリュームは暗号化されていません。
amiid=`aws ec2 create-image --instance-id ${instanceid} --name "noenctest" --no-reboot | jq -c -r '.ImageId'`
AMIをコピー
ここで暗号化の処理をします。
下記の例ではKMSのkeyIDを指定していないのでデフォルトのものが使われますが、--kms-key-id
で指定することもできます。
また、暗号化したAMIはアカウントを超えてコピーすることはできなくなります(private設定になる)ので、検証・ステージング・本番等でアカウントが別れている場合は要注意です。
enc_amiid=`aws ec2 copy-image --source-image-id ${amiid} --source-region ap-northeast-1 --region ap-northeast-1 --encrypted --name "enctest" | jq -c -r '.ImageId'`
これで暗号化ができました!
念のためコンソールから確認してみると
暗号化できてますね!