EC2稼働開始後にEBSボリュームの暗号化を行う手順

# 目的
-  EC2を稼働する際にEBSボリュームをデフォルトの暗号化設定をチェックせずに暗号化無しで作成している場合に、後から、EBSボリュームを暗号化したい

# 方法
EBSボリュームのsnapshotからコピーして復元する際に暗号化してそれをEC2に再アタッチする方法で行う
1. snapshotを取得
1. 暗号化を有効にしてsnapshotをコピー
1. コピーされたsnapshotからコピーを作成
1. 作成した新たなボリュームをインスタンスにアタッチ

# 実際に動いているサービスに対して行う時の手順の詳細
## １、AWS KMSでキーを作成する
- Key Management Service (KMS)からキーの作成
https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/services-ebs.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/5f76b7ee-1c0e-1370-80ab-8deaa07ac7aa.png)



## ２、EBSを暗号化する該当のEC2インスタンスをELBから外す。
- スナップショットを取るときに静止点を作ってデータの不整合を防ぐ必要がある
- インスタンスへの入出力を止めるために作業するインスタンスをELBから外してアクセスしてくる状態がないようにしてから作業する

## ３、該当のwebサーバ内でも通信ログが止まっているか確認

- ELBから外したあと、本当に通信が来ていないことを確認するために該当のwebサーバーログ等を確認する


## ４、稼働しているEC2インスタンスを停止する

- 「インスタンスを停止」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/90ecb8b6-9259-7e46-19b5-34af05f94b8b.png)


## ５、EC2インスタンスに紐付いているEBS Volumeを特定する

- 暗号化されていないことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/636201a7-11bd-519c-836d-a9ead967b4c0.png)


## ６、EBS VolumeのSnapshotを作成する

- スナップショット作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/a7eff942-6216-aa7e-8458-1a6ca165f36f.png)

- 説明、名前、タグ欄は任意。説明に「no_encrypted_{インスタンス名}」などと入れておく。

- 以下になれば成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/526b90a5-5600-feeb-bda4-6e4b94c03310.png)

## ７、作成されたSnapshotをコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/9fa4455b-404c-9528-92b1-4fa239bbf4ea.png)


上記からスナップショット一覧へ

作成に時間がかかる（10〜15分程度）

作成完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/c1814222-9323-29f3-9c9a-dda6970cf775.png)

コピーを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/5bea2e4e-01c4-e9bd-ba62-98f44b0c1b7c.png)

コピーを作成する際に暗号化する
- マスターキーにはAWS KMSで作成したキーを使用。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/c8ab6f21-4463-0e1a-e757-36d83b40edb6.png)



暗号化済を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/fb13c278-da1d-6de9-1fb2-c57632ef0ccf.png)


## ８、コピーしたSnapshotからEBS Volumeを作成する

暗号化したスナップショットからEBS Volumeをさらに暗号化して作成
- 名前はencrypted_{インスタンス名}にする。（既存の暗号化前のボリュームと区別するため）
- アベイラビリティーゾーンはebsボリュームを紐づける想定のインスタンスが存在するアベイラビリティーゾーンに設定する。
- マスターキーにはAWS KMSで作成したキーを使用。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/7dc369d4-1c97-b863-b579-9b24a1bede17.png)


暗号化済みを確認（まだアタッチしていない）
<img width="1612" alt="image.png (26.3 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2020/09/22/78280/01922af0-a7ca-4f16-b3b7-1521e55c1818.png">


## ９、EC2インスタンスに紐づいている既存のEBS Volumeをデタッチする

ルートデバイス確認。AmazonLinuxは /dev/xvda。後ほどルートデバイスを入力する欄あり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/0fe4ae50-1883-7552-ac00-df2ad303fbc6.png)


EBSボリュームをデタッチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/819e5bbb-fbb3-57ea-edee-8e34664b4d03.png)


デタッチされたことを確認
<img width="2184" alt="image.png (95.7 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2020/09/22/78280/3aaf986b-9e67-4c6d-9f3c-a5336e514ba4.png">


## １０、EC2インスタンスに前段の手順で作成した新たなEBS Volumeをアタッチする

EBSボリュームのアタッチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/5abe938a-6ce0-ef0b-7a27-f2be368e480e.png)


EBSボリュームのアタッチ
- 先程確認しておいたルートデバイスを確実に入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/6e0e628d-e60b-ba57-050f-0f699363c242.png)


- アタッチされたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/b84e7cd9-42b0-2119-c965-8ef723ab23b6.png)


## １１、EC2インスタンスを再起動する

- 「インスタンスの開始」からEC2インスタンスを起動する。
-  EC2インスタンスのステータスチェックが合格になるのを確認

## １２、ELBへの紐付けを復活する。

- statusがhealthyになればオッケー

## １３、サービスnowebページが見れるかどうか確認
終了。

# 参考
- https://dev.classmethod.jp/articles/encryption-ebs-for-running-ec2-instance/#return-note-282862-1
- https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/services-ebs.html3 



# 終わりに

株式会社Relicでは、サーバーサイドエンジニアを積極的に採用中です。
またRelicでは、地方拠点がありますので、U・Iターンも大歓迎です！🙌
少しでもご興味がある方は、Relic採用サイトからエントリーください！

https://relic.co.jp/categories/job_3?utm_source=qiita&utm_medium=article&utm_campaign=qiita_article