EC2のキーペアで生成した秘密鍵は、キー登録した際にダウンロードできるかぎりとなりますが。
公開鍵については取得する方法が用意されているので本記事ではこれらを試してみます。
今回実行する環境
- Windows 10 21H2
- OpenSSH_for_Windows_9.1p1, LibreSSL 3.6.1
From the private key
ダウンロードした秘密鍵から公開鍵を取り出す。
今回、EC2キーペア画面でqiita-rsa
を登録し取得したqiita-rsa.pem
から公開鍵を取得してみます。
ドキュメントではLinuxとMacOSでの手順が書かれていますが。
Windowsの場合はパーミッションエラーが出た場合の調整方法が異なります。
今回はWidowsのOpenSSHで実行した所、下記のエラーが表示されたので対応します。
Bad permissions. Try removing permissions for user: xxxxxxxxxxx on file C:/qiita/raw-key/qiita-rsa.pem.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\qiita\raw-key\qiita-rsa.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\qiita\raw-key\qiita-rsa.pem": bad permissions
今回パーミッションエラーが出たpemファイルのセキュリティタブを確認してみると、エラーメッセージにあるように、いろいろなユーザが許可されている事がわります。
この状態だと警告となってしまうため、詳細設定
を選択
継承の無効化
を選択
このオブジェクトから継承されたアクセス許可をすべて削除
を選択
追加
を選択
プリンシパルの選択
を選択
選択するオブジェクトを入力して下さいの欄に、ログインしているユーザー名を入力して名前の確認
を選択
名前の確認が成功すると、入力したオブジェクト名に下線がつくので確認できたら
OK
を選択
OK
を選択
余計なユーザに権限がついてない事を確認してOKを選択
OK
を選択
ファイルのセキュリティを上記のように変更した状態で、もう一度コマンドを実行すると公開鍵を取り出す事ができます。
From the instance metadata
EC2でインスタンスのメタデータに公開鍵の情報を含まれているのでここで確認してみます。
今回確認するインスタンスは下記で、インスタンスメタデータサービスバージョン(IMDS)のバージョン1と2の両方を参照できるように構築しています。
IMDS version 1の場合
curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
IMDS Version 2の場合
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" –v http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
From the instance
EC2でLinuxインスタンスを構築すると、ssh接続のために公開鍵を~/.ssh/authorized_keys
に配置するため、ここから確認してみます。
画像の環境については、先程From the instance metadata
で構築したEC2インスタンスになります。
From describe-key-pairs
aws-cli
のec2 describe-key-pairs
コマンドに--include-public-key
オプションをつけると公開鍵を出力します。
CloudShellで実行すると下記のようになります。
総評
公開鍵があとから確認できるからどうしたといった感はありますが。
(あえて言えば、EC2キーペアで生成したキーの公開鍵を他サーバーでも使いたいので取得したい時とか?)
AWSではこういう所に公開鍵が登録されていて、EC2を構築するときにいい感じに公開鍵を配置してくれてるんだなって感じです。