こんにちは、ちゃりおです。
みなさんは、踏み台サーバの鍵の管理どうしてますか。
ユーザごとにアカウント作ったり、秘密鍵を共有していたり、ssmで鍵を使わなかったり色々あると思います。
踏み台サーバでの鍵の管理について考えてみたので書いてみます。
方法
思いつく限り鍵管理の方法を書いてみます。
手間とセキュリティの観点から、比較してみます。
- 踏み台サーバの秘密鍵を共有する
- 一つのユーザにそれぞれのユーザの公開鍵を追加する
- ユーザごとにアカウント作る
- ssmを使う(aws環境だったら)
1.踏み台サーバの秘密鍵を共有する

踏み台サーバの秘密鍵をユーザ全員で共有する方法です。
これは楽ではあるんですが、一番避けたい方法です。
鍵の流出のリスクが高いし、だれがアクセスできるのかわからなくなりがちです。
しかも、もし退職したとしても秘密鍵を持ち逃げしたら不正にアクセスされる可能性があります。
- メリット
- 鍵の管理が楽
- デメリット
- セキュリティリスクが高い(鍵の流出の可能性が高い)
2.一つのユーザにそれぞれのユーザの公開鍵を追加する

踏み台サーバの一つのユーザにそれぞれのユーザの公開鍵を追加する方法です。
これは「秘密鍵を共有する」次に楽です。セキュリティも確保できます。
踏み台サーバの一つのユーザの、authorized_keysにアクセスするユーザの公開鍵を追加する方法です。
この方法であれば、だれがアクセスできるかはauthorized_keysを確認すればわかります。
また、退職時も公開鍵を消せばアクセスできなくなるので良さそうです。
公開鍵をもらうのが手間と思うかもしれませんが、githubを使っている環境なら
githubのユーザ名がわかれば公開鍵取得可能なので手間も少ないです。
curlだったら、以下のコマンドで追加できます。
(echo; curl https://github.com/XXXXXX.keys; echo) >> ~/.ssh/authorized_keys)
公開鍵にコメントを付けておくとよりわかりやすいです。(作成時にタイトルつけれますが、ついていない人も多いので)
デメリットは一つのユーザなので、ログからどのユーザが何をしたの追跡しづらいことです。
- メリット
- 誰がアクセスできるか把握できる
- 踏み台サーバのユーザがひとつなので、ユーザ追加の手間はない
- デメリット
- 誰がどの操作を行ったかログが取得できない
3.ユーザごとにアカウント作る

踏み台サーバにそれぞれのユーザを作成する方法です。
この方法だと、ユーザが別れているのでログからどのユーザがどんな操作をしたのかわかります。
しかし、ユーザ追加の必要があるので作業は増えます。
ユーザ追加して、パーミッションを設定して、鍵を追加するなど。
(Ansibleとか使えば自動化できる程度の作業ですが)
- メリット
- ログからだれがいつどこのサーバにログインしたかわかる
- デメリット
- ユーザが増えるたびに、踏み台サーバにユーザ作成やパーミッションの設定を行う必要がある
4.ssmを使う(aws環境だったら)
aws環境なら使える方法で、ssm(AWS Systems Manager)を使う方法があります。
操作対象にssmエージェントがインストールされていれば、ssmを通してsshができます。
この方法の良いところは、
- セキュリティグループでsshポートを開ける必要がない
- iamでユーザを管理できる(鍵を管理する必要がない)
ただ少し手間もかかります。
- Session Managerプラグインをクライアントpcにインストール
- 各種エンドポイントを設定
AWS Systems Manager セッションマネージャーでSSH・SCPできるようになりました
踏み台も不要になりますし、aws環境なら一番いい方法では無いでしょうか。
なにより鍵を管理しなくていいのは、嬉しいです。
- メリット
- 鍵を管理する必要がない(IAMで管理)
- sshのポートを開ける必要がない
- デメリット
- エンドポイントの設定やssmの設定が必要
まとめ
今回は、鍵の管理についてまとめてみました。
一番いいのは、ssmだと思います。
現在「1.踏み台サーバの秘密鍵を共有する」の場合、大きく方法を変えたくない場合はまずは「2.一つのユーザにそれぞれのユーザの公開鍵を追加する」にしてみるのもいいかもしれません。


