そう思っていましたが退職した方から解決策を教えていただきました。AWSのEC2の話になります。
今パブリックに公開しているSSHのポートはセキュリティグループで閉じてしまい、秘密鍵だけがあっても入れないようにしてしまいましょう。
その上でセッションマネージャー使うことで、AWSCLIアクセスキーによる認証でSSHできるようになります。
秘密鍵の制御はサーバーの数だけ作業しないといけませんが、AWSのアカウントはコンソールで一元制御かつ簡単に無効化できるので、サーバーが大量にある場合に特に効果を発揮します。
以下デモです。EC2インスタンスを作成します。EC2インスタンスにロールAmazonSSMManagedInstanceCore
やAmazonSSMRoleForInstancesQuickSetup
がアタッチされることで、セッションマネージャーからアクセスできるようになります。初期状態だとロールがないので、セッションマネージャーの高速セットアップで作成しましょう。
作成後に5〜10分待つとEC2にロールがアタッチできるようになります。
、アタッチ後にさらに5分ほど待つと、セッションマネージャーから選択可能インスタンスとして候補に上がりました。ブラウザから開始するか、コマンドで以下のようにもスタートできます。
$ aws ssm start-session --target i-072i1e2868daf86
Starting session with SessionId: umihico-0d274fa3791c81e3c
sh-4.2$
最近のAmazonLinux2は最初からSSMエージェントが入っていますが、入ってない場合は以下でインストールできます。
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
awscliコマンドではなく、慣れているsshやscpを使えるようにしたいので、.ssh/configに追記します。
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
User ec2-user
これでsshコマンドも通るようになりました。
$ ssh -i ~/.ssh/umihico.pem i-072i1e2868daf42
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
9 package(s) needed for security, out of 16 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-179-41-11-188 ~]$
セキュリティ的な議論でAWSアクセスキーにスイッチできない場合はauthorized_keysの編集は避けれませんが、Macであれば直接編集するリスクを取らず、ssh-copy-id
コマンドを使えば楽にできそうです。こちらが参考になりました。
参考
- https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-quick-setup.html
- https://www.karakaram.com/aws-session-manager-tunneling-support-for-ssh/
- https://qiita.com/syoimin/items/6f5f0aca002161d40233
- https://qiita.com/kentarosasaki/items/aa319e735a0b9660f1f0
- https://qiita.com/ir-yk/items/af8550fea92b5c5f7fca
- https://qiita.com/itiut@github/items/94b248ba93efee8960d3