mameブログ

mameという男がやりたい事をやっている記録

EC2で発行したキーペアをなくしてしまった時の対処法

EC2のキーをなくしてしまった

AWSの検討をするのが久しぶりで、以前SSHアクセスをオープンにしたEC2に対して、以前発行したキーをなくしてしまいました。。。
今回はキーを再発行するとともに、稼働中のEC2のキー変更について記事にします。

そもそもキーとは?

キーというのは実体を持つファイルになります。
そもそもこれは何かというと、EC2サーバに外部からアクセスするときにアクセスの暗号化/複合化を担うものになります。
(転じて、Tera TermなどではEC2サーバへの認証としてもキーを使用することができます)


公開鍵暗号方式というのを覚えていますでしょうか?
it-trend.jp


サーバが発行する鍵を使った暗号方式です。
手続きは以下の手段になります。
①ホスト(サーバ)が秘密鍵を生成する
②ホストが秘密鍵から公開鍵を作る
③送信者は送信したい内容を公開鍵でロック(暗号化)して送る
④ホストはロック(暗号化)された文書を受信する
⑤ホストは文書を秘密鍵でロック解除(復号化)する


AWSではEC2生成のページで「ネットワーク&セキュリティ→キーペア」というタブがあります。
ここで「キーペアを作成」を押下、名前とファイル形式を選択し「キーペアを作成」を押下するとキーを作ることができます。
ここで作られるキーが実体を持ったファイルであり、他の人にわたっては困る秘密鍵となります。
AWSでサーバ構築した当事者がTera TermでSSH認証をするときにこの鍵を使いますが、これって「秘密鍵を持ってるあなたは当然Ownerであって認証OKですね」という意味合いなのだと思います。

キーの再設定方法

以下、サイトにも書いてある手段を取りました。
qiita.com


やった事は以下です。

①新たなキーを上にも書いたキーペア生成方法で生成する。

PuTTY Key Generatorというツールを使い、①で生成したキーから公開鍵を生成。
PuTTY Key Generatorのダウンロード先は以下です。
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
生成方法は、puttygen.exeをダブルクリックして立ち上げて、Loadボタンを押下、①で生成したキー(.pem or .ppk拡張子)を選択するとテキスト表示されます。
以下のサイトでも手段が書いてありますね。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html#retrieving-the-public-key-windows

③公開鍵情報(テキスト)をコピー。

④EC2を「稼働中」→「停止」に遷移させる。

⑤EC2に対して「アクション」→「インスタンスの設定」→「ユーザーデータを編集」を押下。

⑥ユーザデータ編集画面上で以下を記載して保存する。

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [users-groups, once]
users:
  - name: username
    ssh-authorized-keys: 
    - PublicKeypair

この時、usernameはユーザ名(ec2-user)、PublicKeypairは③でコピーした公開鍵情報に書き換えます。

⑦EC2を「停止」→「稼働中」に遷移させる。

⑧この状態でTera Termで認証確認を行う。
Tera Termを開いて、「新しい接続」の画面で、ホストにEC2のパブリックDNSアドレスをコピーする。
サービスはSSHのSSH2、ポートは22でOKを押下。(←このあたりはEC2のポート開放設定とリンクさせないといけないですね)
SSH認証の画面が出てきますので、ユーザ名を例えばec2-userに、パスワードは何も記載しません。
認証方式で「RSA/DSA/ECDSA/ED25519鍵を使う」のラジオボタンをチェックし、①で生成したキーファイルを選択して、OKを押下。


以上の①~⑧の工程を経て、SSH認証が通り、アクセス成功がすれば解決です。


①~③までやってた行為って公開鍵暗号方式の手順と同じですね。
⑥のミソは、cloud-configの設定だと思います。
cloud-configはEC2が稼働開始時に設定される内容になります。
(調べると、cloud_init_local→cloud_init→cloud_config→各種サービス起動→cloud_finalの順に実行されるようです。)
つまり、一度④でEC2を停止し、⑥で書いた後に⑦で再稼働をしているのは、このconfig設定を実行させるためだったのです。
公開鍵をEC2と対応づけて(⑥)再稼働する(⑦)ことで、認証のための鍵とEC2との対応付けも済んだ、よってキーを使った認証が可能となった(⑧)という事です。


さて、一度EC2との対応付けが完了したので、EC2は公開鍵をconfigに直書きする必要はありません。
⑨EC2を再度「停止」に遷移させる
⑩EC2に対して「アクション」→「インスタンスの設定」→「ユーザーデータを編集」を押下。
⑪ユーザデータ編集画面上で、⑥で記載していた内容を削除。
⑫EC2を再度「稼働」に遷移させる
をやりましょう。
ここまで終えた状態で、再度Tera Termを使った認証作業をしてみましょう、アクセス可能なはずです。
EC2がキーペアを結べたからです。