脱SSHしたい!!

こんにちは、YOUTRUST Webエンジニアの大竹(YOUTRUST)です。

8月1日からYOUTRUSTにジョインしまして1ヶ月程が経ちました。 色んな学びや刺激がありとても濃い1ヶ月だったので、「まだ1ヶ月しか経っていないのか〜」という不思議な感覚になっています。

⭐ 本題

そんなことはさておき、以前にサーバーへの入り方を確認している時に、以下のようなメッセージがありました。

前職でも「SSHじゃなくてSSMで良くない?」というような話をしてたことを思い出したので、せっかくだし僕の方で脱SSHに向けて取り組もうと思いました。

なのでこの記事では脱SSHについての話をしようと思います。

🤔 なぜSSHを避けたいのか?

いくつか避けたい理由はありますが、主な理由を上げたいと思います。

  1. インスタンスのSG(セキュリティグループ)で22番ポートを開放しないといけない
  2. 公開鍵を管理しないといけない

1つ目の「インスタンスのSG(セキュリティグループ)で22番ポートを開放しないといけない」についてですが、基本的にポートを開放することはセキュリティリスクに繋がるのでなるべくポートは開放しない形を取りたいです。

2つ目の「公開鍵を管理しないといけない」についてですが、新しいメンバーが入ったときやサーバーが増えた時に鍵を共有したり増やしたりするのは手間ですし、メンバーの退職時にも一手間増えます。そのため、できるだけ公開鍵は管理したくないです。

📝 SSMとは?

ここで今までの話で出てきたSSMについて説明したいと思います。 SSMはAWSが提供しているサービスの1つでAWS Systems Managerの略称です。

docs.aws.amazon.com

SSMの中にSession Managerという機能があり、これを使うことでSSHを使わずにサーバーにアクセスすることができます。

以下ドキュメントからの引用

Session Manager は安全かつ監査可能なノード管理を実現し、インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーの管理したりする必要はありません。また Session Manager はマネージドノードの制御されたアクセス、厳格なセキュリティプラクティス、ノードアクセス詳細がある完全監査可能なログを要件とする社内ポリシーの尊守を実現しつつ、エンドユーザーが簡単なワンクリック・クロス プラットフォームアクセスによってマネージドノードの使用を実現します。

💪 Systems Managerを使ってサーバーにアクセスしてみる

ここまで色々と説明をしてきましたが、ここからは脱SSHのためにSystems Managerを使ってサーバーにアクセスしてみようと思います。

✔ 必要事項

Systems Managerを使用してEC2にアクセスするには、EC2インスタンスにSystems Manager利用に必要なアクセス許可を持ったポリシーを割り当てたインスタンスプロファイルをアタッチする必要があります。

以下のドキュメントを参考にインスタンスプロファイルの作成とアタッチをしてください。

docs.aws.amazon.com

docs.aws.amazon.com

💡 前提

ここでSystems Manager利用にあたって今回満たしたい前提を話したいと思います。

  1. AWS CLIを使ってサーバーにアクセスしたい
  2. AWS SSOを使用して認証情報を取得する

1つ目の「AWS CLIを使ってサーバーにアクセスしたい」についてですが、AWSのマネジメントコンソールを使ってSystems Managerを利用してもよいのですが、できるだけSSHを使う感覚で利用したいので、今回はAWS CLIを使ってサーバーにアクセスします。

2つ目の「AWS SSOを使用して認証情報を取得する」についてですが、YOUTRUSTではAWS SSOを使ってユーザーの管理を行っているので、今回はAWS SSOを使って認証情報を取得しようと思います。

AWS CLIコマンドのインストール

まずはじめにドキュメントを参考にAWS CLIコマンドをインストールします。

docs.aws.amazon.com

以下のコマンドを実行してVersionが表示されたらインストール完了です。

$ aws --version

※ うまく行かない場合は一度アンインストールしてから再度インストールし直してみてください。

参考:AWS CLI バージョン 2 のアンインストール - AWS Command Line Interface

🔨 名前付きプロファイルの設定

~/.aws/config ファイルを開いて名前付きプロファイルの設定を追加します。

docs.aws.amazon.com

追加する内容はこのような形になります。

[profile oreore-profile]
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region = ap-northeast-1
sso_account_id = 123456789011
sso_role_name = readOnly
region = ap-northeast-1
output = json

🚩 AWS SSOログイン

登録した名前付きプロファイルを使用してAWSにログインします。

$ aws sso login --profile oreore-profile

コマンドを実行するとブラウザが起動するので認証手続きを進めます。

これでAWSにログインが完了しました!

※ コマンドを実行する場合は毎回プロファイルを指定する必要があります(プロファイルを指定しないと認証エラーになるはずです)

⬇ Session Managerプラグインのインストール

AWS CLIにてSSMを使用してサーバーのセッションを開始・終了するにはローカルマシンにSession Managerプラグインをインストールする必要があります。

以下のドキュメントを参考にローカルマシンにSession Managerプラグインをインストールします。

docs.aws.amazon.com

また、このときSession Managerプラグインが正常にインストールされたことを確認してください。

docs.aws.amazon.com

🚀 サーバーにアクセス

ここまでで一通りの準備が整ったので、SSMコマンドを実行してサーバーにアクセスします。

$ aws ssm start-session --target [インスタンスID] --profile oreore-profile

参考:start-session — AWS CLI 1.25.67 Command Reference

インスタンスIDをNameタグ名で取得するには以下のコマンドを実行してください。

$ aws ssm describe-instance-information --filters "Key=tag:Name,Values=[Nameタグ名]" --query "InstanceInformationList[0].InstanceId" --profile oreore-profile

♨ まとめ

SSMを使うことで脱SSHが実現できました!AWSはやっぱり便利ですね〜!

これからもどんどん活用して行こうと思います!

🙋 採用情報

YOUTRUSTでは、理想のユーザー体験を実現するために、共に開発していく仲間を探しています!

ご応募お待ちしております!

herp.careers