EC2でインスタンスを構築する時は、キーペアに登録されている公開鍵を選択します。
EC2のマネジメントコンソール画面にはフィンガープリントが表示されており、本記事では表示されているフィンガープリントがファイルから計算するフィンガープリントとどう関係しているか確認してみます。
ドキュメント
今回確認する事
EC2 キーペアのマネジメントコンソールに表示されるフィンガープリントについて。
下記2通りで用意したキーのフィンガープリントを確認します。
- マネジメントコンソールの
キーペアを作成
から作成したキー - マネジメントコンソールの
アクション
=>キーペアをインポート
からインポートしたキー
なぜ手法ごとに確認するかといえば、AWSドキュメントのフィンガープリントの計算方法に下記のようにまとめられています。
表にあるように、RSAキーペアの場合。
キーを用意する手法によってフィンガープリントの計算方法が代わり値がかわります。
このためそれぞれの手法で用意したキーについて、それぞれ方法で取得したフィンガープリントを確認します。
余談
EC2のキーペアに表示されるフィンガープリントについて。
RSAの場合、AWS上で生成した場合と、インポートした場合で結果が変わってくるので。
AWS側で生成したRSAキーペアを、別リージョンで利用したい場合。
別リージョンのキーペア画面から公開鍵をインポートして利用することになりますが。
AWS側で生成したRSAキーとインポートしたRSAキーではフィンガープリントの計算で利用するハッシュ関数が違うので表示が変わります。
これは知らないとちょっと驚く挙動かと思います。
今回実行する環境
- Windows 10 21H2
- OpenSSH_for_Windows_9.1p1, LibreSSL 3.6.1
- OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
本手順でフィンガープリントを確認するためにはssh-keygen
とopenssl
が必要となります。
最近のWindows 10やWindows 11ならばOepnSSHはデフォルトでインストールされていると思いますが。
OpenSSLについては適宜インストールしておいて下さい。
(もしくはドキュメントにあるように、WSLで確認)
また今回実行する環境はPowerShellではなくコマンドプロンプトで実行してください。
2023年2月現在、PowreShell上でopenssl
の結果をパイプするとまずいことがあり、異なるフィンガープリントが表示されてしまいます。
この現象については下記ページが詳しいので勉強になります。
Amazon EC2 によって作成されたキーペアについて確認する
今回、確認用に下記2つのキーをマネジメントコンソールのキーペアを作成
から作成しました。
Name | Type | Fingerprint |
---|---|---|
qiita-rsa | rsa | 8d:c1:49:18:b3:b0:dd:6d:de:f5:73:16:00:ec:6d:10:75:60:a8:43 |
qiita-ed25519 | ed25519 | aDxDMPGCAtcdh5W0hDgyhaNLtF0yhng+lG+KodwyJYw= |
この2つのキーについては、Amazon EC2 によって作成されたキーペアとなり。
- qiita-rsa は rsa で sha-1
- qiita-ed25519 は ed25519 で SHA-256
で計算されたフィンガープリントがコンソールに表示されています。
作成時にダウンロードしたキーについては、今回c:\qiita\key\
に格納しています。
上記ドキュメントでは、キー生成時にダウンロードできる秘密鍵から公開鍵を取り出し、公開鍵のハッシュを取得する方法を紹介しているため、こちらをつかって確認します。
rem ###qita-rsa.pemのフィンガープリントを表示###
openssl pkcs8 -in qiita-rsa.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
rem ###qiita-ed25519.pemのフィンガープリントを表示###
ssh-keygen -l -f qiita-ed25519.pem
コマンドを実行すると上記画像の赤線部分にフィンガープリントが表示されます。
マネジメントコンソール上で表示されているフィンガープリントとも一致しており、キーペアについて確認する事ができました。
なお、qiita-ed25519.pemについては、ブラウザからダウンロードしたファイルをそのまま利用しており、画像ではパーミッション警告が出ています。
最初パーミッション警告が出ていたので、ファイルのセキュリティから継承を切って不要なアクセス権限を外そうかと思いましたが、警告のあとにフィンガープリントが表示されていたので今回はそのままとしています。
Amazon EC2 にインポートされたキーについて確認してみる(RSAのみ)
ブラウザからダウンロードした秘密鍵(qiita-rsa.pem qiita-ed25519.pem)から公開鍵を取り出して、取り出したファイルをAWS EC2にインポートしてみます。
上記ドキュメントにキー登録されている公開鍵を取得する手法がいくつか記載されていますが、今回はFrom the privae key
で紹介されている方法で公開鍵を取得します。
マネジメントコンソールからダウンロードしたファイルに対して、ssh-keygen
コマンドを実行するとパーミッションエラーがでる場合は、ファイルのセキュリティから継承の無効化をして自分だけの権限をいい感じにつけて下さい。
上記画像の用に不要なユーザー(AdministratorsだったりSYSTEMだったり余計な権限を外していい感じにする)
パーミッションをいい感じした後に、コマンドを実行すると公開鍵が表示されるので、表示された内容をそれぞれマネジメントコンソールからインポートします。
コマンドを実行して公開鍵を表示
マネジメントコンソールのキーペア画面から アクション
=> キーペアをインポート
を選択
qiita-rsa-from-private-key
qiita-ed25519-from-private-key
キーペアがインポートされました。
Name | Type | Fingerprint |
---|---|---|
qiita-rsa-from-private-key | rsa | 50:6a:ee:f4:cd:32:ec:09:30:2c:ff:a4:79:21:dd:c7 |
qiita-ed25519-from-private-key | ed25519 | aDxDMPGCAtcdh5W0hDgyhaNLtF0yhng+lG+KodwyJYw= |
インポートされたフィンガープリント と AWSが生成したキーのフィンガープリントを比較すると。
ed25519の鍵の方はフィンガープリントが変化していない事がわかりますが。
rsaの方はインポートした事により、フィンガープリントの計算に利用するハッシュ関数が sha1 から MD5 に変わって、フィンガープリントも変わっている事が確認できます。
ここではインポートで変更されたrsaのフィンガープリントについて確認してみます。
先程、コマンドでインポートした公開鍵を下記コマンドでqiita-rsa-from-private-key
に出力します。
この公開鍵について確認してみます。
rem 秘密から公開鍵を取り出す
ssh-keygen -y -f qiita-rsa.pem>qiita-rsa-from-private-key
rem 取り出した公開鍵をPEM形式して、それをDER形式にしてmd5で計算
ssh-keygen -f qiita-rsa-from-private-key -e -m PEM | openssl rsa -RSAPublicKey_in -inform PEM -outform DER | openssl md5 -c
取得できるフィンガープリントを確認すると、マネジメントコンソールに表示されている50:6a:ee:f4:cd:32:ec:09:30:2c:ff:a4:79:21:dd:c7
と一致している事が確認できます。
なおドキュメントにはもっと単純に下記のように秘密鍵から公開鍵を取り出して確認するコマンドが記載されています。
openssl rsa -in qiita-rsa.pem -pubout -outform DER | openssl md5 -c
ed25519の場合はフィンガープリントは生成手法によってかわらない
何度も出てきていますが、ed25519についてはAWS側で生成しても、インポートしてもフィンガープリントの計算方法が変わらないので一致している事が確認できれば終了。
総評
鍵の棚卸しする際はフィンガープリントで確認しますが。
下記の点は意識しておくとよいかと思います。
- rsaではAWS側で生成した時とインポートした時では計算に利用するハッシュ関数が変わってフィンガープリントが変わる
- Win32OpenSSLを使う場合は、2023年2月現在のPowerShellで実行するとパイプ処理でまずいのでコマンドプロンプトを利用する