こんにちは、マネージドサービス部テクニカルサポート課の坂口です。
今回はキーペアを紛失または削除してしまい EC2 インスタンスに接続出来なくなった際の復旧方法について紹介いたします。
復旧方法
キーペアを紛失または削除した場合、いくつか復旧方法がございます。
今回は ec2-user に紐付くキーペアを紛失した想定でご紹介いたします。
他のユーザでログインする
前提条件
・他のユーザを作成済み
・ユーザ毎に秘密鍵が異なること
・sudo 権限が付与されていること
1.新しく登録する公開鍵を確認します
※ AWS マネジメントコンソールからキーペアを作成した場合は以下のコマンドにて公開鍵を確認してください
"PublicKey" フィールドに出力されます。
aws ec2 describe-key-pairs --key-names [キーペア名] --include-public-key
2.他のユーザでログインします
3.authorized_keys に 1.で確認した公開鍵を追記します
sudo echo [公開鍵] >> /home/ec2-user/.ssh/authorized_keys
4.新しく登録した公開鍵に紐づく秘密鍵でログインします
ユーザーデータを使用する
1.新しく登録する公開鍵を確認します
※ AWS マネジメントコンソールからキーペアを作成した場合は以下のコマンドにて公開鍵を確認してください
"PublicKey" フィールドに出力されます。
aws ec2 describe-key-pairs --key-names [キーペア名] --include-public-key
2.インスタンスを停止後、インスタンスを選択し「アクション」「インスタンスの設定」「ユーザーデータを編集」を押下します
3.以下のユーザーデータを貼り付けし「保存」を押下します
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, always] users: - name: ec2-user ssh-authorized-keys: - [公開鍵]
4.インスタンスを起動し新しく登録した公開鍵に紐づく秘密鍵でログインします
5.正常にログイン出来たらインスタンスを停止しユーザーデータを削除します
※ 削除しないと起動の度に実行されます
参考資料
repost.aws
AWS Systems Manager の AWSSupport-ResetAccess ランブックを使用する
1.AWS Systems Manager のコンソールを開き、「オートメーション」を押下します
2.「Execute automation」を押下し「AWSSupport-ResetAccess」を選択後「Next」を押下します
3.対象インスタンスを選択し「Execute」を押下します
4.実行完了後「Outputs」内の「getLinuxSSHKeyParameter.Name」にパラメータストアのパラメータ名が出力されているので確認します
5.AWS Systems Manager コンソールから「パラメータストア」を押下します
6.確認したパラメータ名を押下します
7.復号後の値が秘密鍵となっていますのでコピーして pem ファイル(秘密鍵)を作成します
8.作成した秘密鍵を使用しログインします
参考資料
docs.aws.amazon.com
AWS Systems Manager のセッションマネージャー経由で接続する
1.新しく登録する公開鍵を確認します
※ AWS マネジメントコンソールからキーペアを作成した場合は以下のコマンドにて公開鍵を確認してください
"PublicKey" フィールドに出力されます。
aws ec2 describe-key-pairs --key-names [キーペア名] --include-public-key
2.EC2 コンソールから、インスタンスを選択し「接続」を押下します
3.「セッションマネージャー」タブを押下し「接続」を押下します
4.authorized_keys に 1.で確認した公開鍵を追記します
sudo echo [公開鍵] >> /home/ec2-user/.ssh/authorized_keys
5.新しく登録した公開鍵に紐づく秘密鍵でログインします
参考資料
docs.aws.amazon.com
EC2 Instance Connect を使用する
1.新しく登録する公開鍵を確認します
※ AWS マネジメントコンソールからキーペアを作成した場合は以下のコマンドにて公開鍵を確認してください
"PublicKey" フィールドに出力されます。
aws ec2 describe-key-pairs --key-names [キーペア名] --include-public-key
2.EC2 Instance Connect で使用される AWS の IP アドレスから SSH を許可するようセキュリティグループを変更する
※ 執筆時点では、以下の IP アドレスレンジ
{ "ip_prefix": "3.112.23.0/29", "region": "ap-northeast-1", "service": "EC2_INSTANCE_CONNECT", "network_border_group": "ap-northeast-1" },
3.EC2 コンソールから、インスタンスを選択し「接続」を押下します
4.「EC2 Instance Connect」タブを押下し「接続」を押下します
5.authorized_keys に 1.で確認した公開鍵を追記します
sudo echo [公開鍵] >> /home/ec2-user/.ssh/authorized_keys
6.新しく登録した公開鍵に紐づく秘密鍵でログインします
参考資料
docs.aws.amazon.com
EC2 シリアルコンソールを使用する
前提条件
・コンソール用のユーザを作成かつパスワードを設定していること
1.新しく登録する公開鍵を確認します
※ AWS マネジメントコンソールからキーペアを作成した場合は以下のコマンドにて公開鍵を確認してください
"PublicKey" フィールドに出力されます。
aws ec2 describe-key-pairs --key-names [キーペア名] --include-public-key
2.EC2 ダッシュボードから、「EC2 シリアルコンソール」を押下します
3.EC2 シリアルコンソールを有効化します
4.EC2 コンソールから、インスタンスを選択し「接続」を押下します
5.「EC2 シリアルコンソール」タブを押下し「接続」を押下します
6.事前に作成しておいたコンソール用ユーザでログインします
7.authorized_keys に 1.で確認した公開鍵を追記します
sudo echo [公開鍵] >> /home/ec2-user/.ssh/authorized_keys
8.新しく登録した公開鍵に紐づく秘密鍵でログインします
参考資料
docs.aws.amazon.com
まとめ
全ての手順を試した結果、個人的にセッションマネージャーを使用する方法が分かりやすくかつ、早く復旧出来るのではと感じました。
いざという時、復旧方法を知っていれば焦らずに作業を行えるので参考になればと思います。