AWSアカウント間でAMIを共有して、EC2インスタンスを複数のAWSアカウントに配布する
WordPressのデザインテーマを購入し、WordPressを使ったテンプレートWebサイトを用意して、これを構築希望ある会社さんに提供するサービスを考えたのですが、これをあまり工数をかけないで作業する方法として、ベースとなるAWSアカウント上にWordPressサイトを動かすEC2インスタンスを作成して、会社さんのAWSアカウントを作成して、ベースAWSから配布したいなと考えました。
AWSアカウントを超えて、サイトを配布する手段として、AMIを共有することができると調べたのですが、これを実際にやってみると公開鍵認証の部分で引っ掛かりました。
AWSアカウントを超えて、AMIを共有して、コピー先のAWSアカウントでEC2インスタンスを生成するところまでは良かったのですが、動かそうとしたら、ユーザの公開鍵認証で入れなかったんです。
元サイトの公開鍵キーペアがないので、そりゃあ入れないよなということで、キーペアをインポートしようとしたのですが、うまくインポートができませんでした。
それではキーペアを新しく作っちゃおうとしましたが、新規キーペアを作成しても、EC2ユーザの認証は既存キーペアを使っているので拒否られます。
これを解決したのが、共有元ユーザのホームデレクトリの下、「.ssh」デレクトリ配下に、ファイル「authorized_keys」が格納されています。
これが公開鍵の内容を登録したファイルらしいんです。
これを共有先でキーペアのインポートで読み込んで、AMIからEC2インスタンスを生成するときに、キーペア指定でこれを指定すると、共有元で使っていたキーペアを使った認証でSSH接続ができるようになりました。
ちなみに、その後、CloudformationでAMIからEC2を生成するように、テンプレートを作成して、その中で自サイトで生成したキーペアを指定することでも、この認証問題を解決できました。
で、今回は元サイト「.ssh」配下「authorized_keys」を持ってきて、コピーサイトを作ったやり方です。
(AMI は共有するか、もしくはコピーするか、どちらかで運用できます)
(ちなみに、画面イメージのAMIは削除してしまったので、現在は存在しませんので、ある程度そのままの画面キャプチャーです)
共有元の手順
- EC2のAWSコンソールを開き、AMIを選択
- 共有あるいはコピーしたいAMIを選択
- 画面下側において、[アクセス許可]タブを選択し、[編集]ボタンをクリック
- [イメージパーミッションの変更] 画面を開き、プライベートを選択
- (コピー先の)[AWSアカウント番号] を入力し、 [アクセス許可の追加] をクリック
①アカウント間コピーする場合は、「スナップショットに”ボリューム作成”のパーミッション追加する」をクリック
②共有のみの場合には、「スナップショットに”ボリューム作成”のパーミッション追加する」はチェックしない - 最後に「保存」をクリック
共有先の手順
- AMI一覧で「プライベートイメージ」を選択すると、共有されたAMI が表示されます。
①共有のみであれば、このAMIを使用して、EC2を起動します。
②コピーする場合は、対象AMIを選択し、[アクション]あるいは右クリックで、「AMIのコピー」を選択します。
共有元が別リージョン(例:オレゴン)であった場合、共有先アカウントの「オレゴン」にAMIが表示されます。
東京であれば、東京リージョンを指定します。
共有解除(登録先) ー コピーを削除
共有解除(登録元)
さらに、暗号化されたAMIの場合には、もう一工夫が必要です。
AWSのセキュリティ対策の1つで、暗号化をしていたのですが、暗号化する前は上の手順で問題なく共有できていたものが、なぜかエラーになり、Webでググると、暗号化すると共有できなくなるみたいです。
この場合の解決方法は、まず暗号化はデフォルトでの暗号方法では、AMI共有ができなくなるみたいなので、CMKで暗号化して、コピー元でAMIをコピーします。
そして、コピーしたAMIで、イメージパーミッションの変更をしておいて、それをコピー先のAWSアカウントで、「アクション」→「AMIのコピー」でコピーします。
このようにしてできたAMIからEC2インスタンスを起動したら、正常に起動できました。(2021.05.27)