Agent Grow Tech Notes
🔑

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鍵認証の違いに戸惑った話を紹介しました。

読んでいただきありがとうございました。

Agent Grow Tech Notes
Agent Grow Tech Notes

Discussion