AWS の KeyPair(キーペア) の意味や働きがよくわかってなかったので整理した

キーペアは EC2 インスタンスにログインするための一つの手段。このあたりの話題、いっつも忘れるのでまとめた。

キーペアとは

下記 AWS ドキュメントの抜粋。

パブリックキーとプライベートキーは、キーペアと呼ばれます。

つまりは(公開鍵暗号方式で用いる)公開鍵と秘密鍵の組のこと。

公開鍵暗号方式はデータ暗号化の一手法で、パブリックキー(公開鍵)で暗号化した情報はプライベートキー(秘密鍵)でのみ復号できるという性質がある。これを応用すればログイン認証が行える。

どうやってログイン認証を行うか

  • 1: ユーザーは EC2 インスタンス作成時、キーペアを一つ割り当てる
    • キーペアは事前につくっておく or 管理コンソール上でその場でつくる
  • 2: AWS は 1 のインスタンスのログイン情報を、1 のキーペアのパブリックキーで暗号化しておく
  • 3: ユーザーは 1 のインスタンスにログインする時、プライベートキーを使って AWS に問い合わせる
    • すると AWS 側が暗号化されたログイン情報をそのプライベートキーで復号化する
    • 正しく復号された → この人は正しい人ですね、ログインを許可します。
    • 正しく復号されない → あんた誰だよ、ログインさせねえぞ。

つまり事前に AWS にキーペアを教えておけば、AWS 側は「ああ、この人のプライベートキーで復号できたんだから、この人はこのパブリックキーの持ち主なんだな」ということを判断できる。つまりは認証ができる。

実際はもう少し AWS 側が融通を利かせてくれて、以下のような感じ。

  • Linux の場合 → すぐにログインできる(SSH によるログイン)
  • Windows の場合 → Administrator パスワードをゲットできる(ので後はそちらでパスワード管理するなり変えるなりしてね)

キーペアの作り方

  • 1: EC2 > ネットワーク&セキュリティ > キーペア
  • 2: キーペアの作成ボタン
  • 3: キーペア名を適当に入れる
  • 4: キーペアがつくられる
    • この時、pem ファイル(プライベートキー)のダウンロードが始まるので、ダウンロードしておく

pem ファイルの入手チャンスはここしかないので、ここを逃したら、もうこのキーペアのプライベートキーは入手できなくなる。

(余談) フィンガープリントとは

フィンガープリント(元々の意味は「指紋」)とはプライベートキーのハッシュ値(厳密に言えば SSH?の仕様として定められたハッシュ処理によって導出されたハッシュ値)のこと。

用途は改ざん防止。もっと言えば「(1) ユーザーが手元で持っているプライベートキー」と「(2) AWS 側に登録されたプライベートキー」が本当に同じものであるかを確認する用。

管理コンソール上に表示されているのは (2) のフィンガープリント。(1) についてもフィンガープリントを計算してやれば確認できる。同一なら改ざんされてない。同一でないなら、改ざんされている。

プライベートキーからフィンガープリントを計算するには以下コマンドを使う。ssh-keygen コマンドでは上手く計算できない。

$ openssl pkcs8 -in xxxxx.pem -nocrypt -topk8 -outform DER | openssl sha1 -c

参考