RHELとAWSで戸惑った公開鍵認証の話
● はじめに
最近、AWSソリューションアーキテクトの資格を取ろうと思い、
実機を触りながら勉強を実施しています。
普段、SSHの公開鍵認証について、普段は何気なく使っていたのですが、
AWS EC2で初めてキーペアを扱ったときに「あれ?」と違和感を覚えました。
RHEL系Linuxサーバの設計や構築に慣れているつもりだったSSHの鍵認証。
でもAWSでの流れはちょっと違う…。
今回は、RHELとAWSでのキーペアの扱いの違いに戸惑った体験を整理してみたいと思います。
(大まかな流れの紹介なので、コマンドのオプションや、AWSの設定等はここでは紹介を省いています。)
● RHELでの公開鍵認証の基本的な流れ
まず、RHEL環境でのSSH公開鍵認証を設定する場合の流れはこうです。
1.クライアント(接続元)で鍵ペアを作成
# ssh-keygen -t rsa
このコマンドを実行すると、公開鍵と秘密鍵のセットが作成されます。
画面の下にある、以下のファイルが公開鍵と秘密鍵のセットになります。
秘密鍵:id_rsa
公開鍵:id_rsa.pub
公開鍵の.pubはpublicの略です。
publicには、「公共」のという意味があるので
public(公共)の鍵⇒公開鍵と覚えると覚えやすいと思います。
id_rsaが秘密鍵。id_rsa.pubが公開鍵。
2.接続先サーバに公開鍵をコピー
# ssh-copy-id root@SERVER
このコマンドを実行することで、接続したい先のサーバに公開鍵を登録させます。
SERVERというホスト名のサーバに公開鍵を登録
3.接続元の秘密鍵を使ってSSH接続
# ssh root@SERVER
画像ではわかりにくいのですが、
接続元であるCLIENTから上記のコマンドを実施すると
接続先であるSERVERにログインできました。
接続確認(RHEL)
RHELでは、以下の流れになります。
1.接続元で、公開鍵と秘密鍵のセットを作成
2.公開鍵を接続先に登録
● AWS EC2でのキーペアの流れ
一方、AWSでEC2インスタンスを起動する際には少し勝手が違いました。
1.AWSコンソール上で「キーペアの作成」をクリック**
画像のキーペアを作成画面で、画面右下「キーペアを作成」ボタンをクリックするだけでキーペアを作成できます。
AWS側でのキーペア作成
2.秘密鍵(.pemファイル)がダウンロードされる
1つ前の手順で実施した「キーペアを作成」ボタンをクリックすると自動で秘密鍵がダウンロードされます。
表示しているブラウザで自動ダウンロードされている様子
3.この.pemファイルを使ってSSHログイン
先ほどダウンロードした、秘密鍵を使用しssh接続ができました。
接続確認(AWS)
● 少し戸惑った理由
秘密鍵は他人に渡してはいけないと教えられてきたのに、
AWSが自動で生成して「はい、これ使ってね」と秘密鍵(相当)を渡してくることに驚きました。
一方、公開鍵はというと、AWS側で自動的にEC2インスタンスに配置済み。
ユーザー側はほとんど意識せず、ただ秘密鍵ファイルを持って接続するだけ。
「AWS側でのキーペア作成」の画像で、作成したTECH_BLOGの公開鍵相当が登録されている
AWSでは、
ユーザーが鍵ペアを作るのではなく、
AWSが鍵を作り、ユーザーに秘密鍵だけ渡す
というスタイルなんですね。
● 最終的な理解
結論、どちらの場合でも必要なものは
接続元⇒秘密鍵
接続先⇒公開鍵
整理してみると、方式が違って見えても本質は同じでした。
接続元(クライアント)に「秘密鍵」がある
接続先(サーバ)に「公開鍵」がある
という構成さえ守られていれば、どちらも公開鍵認証として成立します。
違うのは「どちらが鍵を生成するか」「公開鍵を誰がどこに配置するか」だけでした。
● まとめ
今回は、RHELとAWSでのSSH鍵認証の違いに戸惑った話を紹介しました。
読んでいただきありがとうございました。
Discussion