こんにちは!エンジニアの君島です。
Amazon Lightsailはお手軽にインスタンスを構築して、安価にアプリケーションやウェブサイトを運用できるサービスです。
Lightsailインスタンスで動作していたシステムを別のAWSアカウントのEC2へ移行する機会が続きました。暗号化されたAMIやスナップショットを別のアカウントに移行する際のあるあるな手順なので記載しておきます。
目次
Amazon LightsailとAmazon EC2の違い
まとめようと思いましたが、公式ドキュメントに記載がありましたのでリンク先を紹介します。
リンク先のようにLightsailは、AWSサービスの中でも特殊な立ち位置で、一サービスだけで完結しています。マネジメントコンソールもLightsailだけ独自画面ですし。
Lightsailを別のAWSアカウントのEC2に移行しよう
経緯
上記のようなお手軽さからLightsailでまずは検証からとスタートしていたWebサービスがいくつかありました。それらを実運用しようという方針となりました。
その際、
・ネットワークやセキュリティや暗号化等の面でより細かく柔軟に制御したい
・そもそもsandbox用のAWSアカウントから運用で利用するAWSアカウントに移行したい
といった要望があったため、別のAWSアカウントにおける同一リージョンのEC2に切り替えることになりました。
移行手順
LightsailのスナップショットをEC2のAMIにエクスポートする
こちらは簡単な操作で実現可能です。Lightsailのマネジメントコンソールにて、対象のスナップショットからEC2のAMIにエクスポートすることができます。
以下の画像のように、特定のスナップショットを指定して、エクスポートします。選択して少し待つとEC2の方にAMIができあがっているはずです。
(誤った手順)EC2のAMIを別のAWSアカウントに共有する
誤った手順ですので、理解されている方は読み飛ばしてください。
できあがったAMIに対してアクション > AMI 許可を編集から、アカウントIDを追加ボタンを押して共有したいアカウント入力し、追加します。
この状態で、変更を保存を押すと、以下のようなエラーメッセージが表示されます。
こちらのエラーメッセージはAWSマネージドキーで暗号化されたスナップショットを別のAWSアカウントに共有できない。別のスナップショットを指定するように。という意味になります。
先述のEC2とLightsailの違いのドキュメントにも記載がありますが、LightsailはAWSマネージドキーを用いてスナップショットを暗号化します。しかしながら、このAWSマネージドキーで暗号化されたスナップショットでバックアップされたAMIは他のアカウントに共有することができないのです。
確かにAMIのストレージタブから見えるKMSキーIDは
EBSのAWSマネージドキーのIDと一致していますので、このスナップショットはAWSマネージドキーで暗号化されています。
別のAWSアカウントにAMIをコピーするには、スナップショットがカスタマー管理型のキーで暗号化されている(あるいは暗号化自体されていない)必要があります。
それでは、カスタマー管理型のキーを作成しましょう。
カスタマー管理型キーを作成し、移行先アカウントを共有する
KMS > カスタマー管理型のキー > キーの作成ボタンを押して、キーを作成します。
非対称暗号化が明示的に必要でない限りは対象型を選択し、必要な情報を入力していきます。
ステップ4:キーの使用アクセス許可を定義にて、別のAWSアカウントIDを追加して設定することができます。移行先のアカウントIDを入力して、キーの作成を続行してください。
なお、この操作はキー作成後でも可能ですし、キーポリシーを直接編集することも可能です。
ちなみに、上部にも記載がありますがマネジメントコンソール上からの操作では、移行先のアカウントのrootユーザーを指定します。これではキーを操作できる範囲が広すぎるので、移行先アカウント側でアクセス許可を設定した方が望ましいと言えます。あるいは、こちらのキーポリシーを直接編集してより詳細にアクセス許可を設定してもいいでしょう。
AMIをコピーし、先ほど作成したキーを指定して暗号化する
先ほど作成したキーを指定したAMIを作成していきます。
アクション > AMIをコピーを選択します。下の方にEBSスナップショットの暗号化にチェックを入れます。そもそも暗号化せずにコピーすればええやんとは言わないでください。
KMSキーに先ほど作成したカスタマー管理型のキーを指定して、AMIをコピーします。コピーが終わるまで少し待ちましょう。
コピーしたAMIを別のAWSアカウントに共有する
さて、改めてAMIを移行先のアカウントに共有する設定を追加しましょう。
できあがったAMIに対してアクション > AMI 許可を編集から、移行先のアカウントIDを追加ボタンを押して共有したいアカウント入力し、追加します。
今度はエラーとならずに、設定の変更ができるはずです。
移行先アカウントでAMIからEC2を作成する
ここからは、移行先のAWSアカウントに切り替えて操作しましょう。
EC2 > AMI でプライベートイメージを選択すると移行されたAMIが見つかるはずです。このイメージからEC2インスタンスを作成することができますので、移行完了となります。
まとめ
Lightsailでスナップショットを取ると、デフォルトで暗号化が有効であり、そこで使用されるキーはAWSマネージドキーとなります。そのため、そのキーで暗号化されたスナップショットでバックアップされたAMIを別のAWSアカウントに共有することはできません。共有したい場合には、スナップショットの暗号化に使用されたカスタマーマネージド型キーの使用を 移行先のAWS アカウントに許可する必要があります。
ということで、Lightsaiから別アカウントのEC2に移行するまでの一連の手順にしてまとめてみました。
- CLIでAmazon S3にあるファイル内の文字列検索をしてみる - 2024-02-01
- 不完全なマルチパートアップロードをCLIで確認してS3の無駄コストを無くそう - 2024-01-29
- AlmaLinux9.3にPHP8.3を入れてLaravel9から10にバージョンアップする - 2024-01-12
- AWS CloudShellの表現力を確認してみよう - 2024-01-01
- AWSのアーキテクチャーを学べるAWS Card Clash攻略Wiki - 2023-12-26