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は削除してしまったので、現在は存在しませんので、ある程度そのままの画面キャプチャーです)

共有元の手順

  1. EC2のAWSコンソールを開き、AMIを選択
  2. 共有あるいはコピーしたいAMIを選択
  3. 画面下側において、[アクセス許可]タブを選択し、[編集]ボタンをクリック
  4.  [イメージパーミッションの変更] 画面を開き、プライベートを選択
  5.  (コピー先の)[AWSアカウント番号] を入力し、 [アクセス許可の追加]  をクリック
    ①アカウント間コピーする場合は、「スナップショットに”ボリューム作成”のパーミッション追加する」をクリック
    ②共有のみの場合には、「スナップショットに”ボリューム作成”のパーミッション追加する」はチェックしない
  6. 最後に「保存」をクリック
共有元操作
共有元操作

共有先の手順

  1. AMI一覧で「プライベートイメージ」を選択すると、共有されたAMI が表示されます。
    ①共有のみであれば、このAMIを使用して、EC2を起動します。
    ②コピーする場合は、対象AMIを選択し、[アクション]あるいは右クリックで、「AMIのコピー」を選択します。
[送信先リージョン]を選択して、[AMIのコピー]をクリック

共有元が別リージョン(例:オレゴン)であった場合、共有先アカウントの「オレゴン」にAMIが表示されます。
東京であれば、東京リージョンを指定します。

[送信先リージョン]を選択して、[AMIのコピー]をクリック
[送信先リージョン]を選択して、[AMIのコピー]をクリック
何分か待つと、AMIが出来上がっている

共有解除(登録先) ー コピーを削除

登録解除

共有解除(登録元)

イメージパーミッションの解除
AWSアカウント番号を✖で削除して、
「保存」クリック
「保存」クリック

さらに、暗号化されたAMIの場合には、もう一工夫が必要です。

AWSのセキュリティ対策の1つで、暗号化をしていたのですが、暗号化する前は上の手順で問題なく共有できていたものが、なぜかエラーになり、Webでググると、暗号化すると共有できなくなるみたいです。

この場合の解決方法は、まず暗号化はデフォルトでの暗号方法では、AMI共有ができなくなるみたいなので、CMKで暗号化して、コピー元でAMIをコピーします。
そして、コピーしたAMIで、イメージパーミッションの変更をしておいて、それをコピー先のAWSアカウントで、「アクション」→「AMIのコピー」でコピーします。

このようにしてできたAMIからEC2インスタンスを起動したら、正常に起動できました。(2021.05.27)

AWS TIPS はこちら!