この記事で伝えたいこと(ポイント)
- 前回の内容を振り返って何が必要か検討してみたよ
はじめに
この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。
今回は前回の内容をもとに実際に必要な要件を考えてみます。
前提
まず、AWS Systems Managerのセッションマネージャー(以下、ssm)が代わりになるという条件を考えていきます。
前回の内容ではなぜ踏み台サーバが必要なのか
ということについて考えた際、以下のようなことが必要だということがわかりました。
- 操作ログをとる
- セッション開始時に通知を出す
- VPCエンドポイントで対象にアクセス(接続まわり)
- 特定のIPアドレスからアクセス(接続まわり)
このうちVPCエンドポイントで対象にアクセス
と特定のIPアドレスからアクセス
についてはやりようによってはさまざまな方法があります。今回はシンプルに接続まわり
と題しましょう。
それでは順番に見ていきます。
操作ログをとる
まずは操作ログを取得することです。イメージとしてはTeraTermのようなターミナルのソフトでSSHアクセスした時に取得されるようなログです。
具体的にはコマンドの実行時間と実行したコマンドの詳細を取得できることが重要です。
※希望としては以下の形式、区切り文字はなんでも良い
{時間} {コマンド}
1つのセッションで異なるユーザがアクセスするというのは考えにくいのでログのファイル名にユーザ名が入っていると良いかもしれません。
※ユーザ名がIAMユーザなのかLinuxのユーザのことなのかは議論の余地ありです。
また、ストレージについては検証レベルなのでS3で対応することにします。
セッション開始時に通知を出す
次にセッション開始時に通知を出すというところです。
どのように通知を出すと良いでしょうか。通知といっても色々あります。
メール、チャットアプリ(SlackやTeamsなど)、スマホの通知(Firebaseのプッシュ通知)などです。
記録だけが重要であるならば、前述の操作ログだけでも良いかもしれません。
「承認していない誰かが入ってきたらすぐに気づきたい」ということであれば、速報性が大事なのでチャットアプリやスマホの通知が良いでしょう。
今回はできるだけ速報性の高いもので実装したいと思います。
接続まわり
次にネットワークです。接続元がどうなっているかでさまざまな方法があります。具体的には以下のとおりです。(一部記載)
ローカル端末接続
- パブリックなインタンス/ECSサービスに接続する(特定のIPに制限する)
特定のIPアドレスからのアクセスですが、これは特定の組織がVPNで入ることを考えて実装してみましょう。セキュリティグループで言うとMyIP
に該当するものです。
ですが、ssmではセキュリティグループを利用できません。
まだ試せてはいませんが、このアプローチの場合IAMロールによる制御が必要になります。
※LookerとAmazon AthenaをIAM認証させた時にソースIPを使って制限できたのでできると推測
CloudShell接続
- CloudShellからパブリックに接続する
- CloudShellからプライベートに接続する(CloudShellのVPC機能とVPCエンドポイントを利用)
2つの手段がありますが、これは内部に閉じるのが賢明でしょう。なお、実装ではインターフェイスエンドポイントが必要になるため、多少の料金は見積もりに入れないといけません。
また、CloudShellをVPCで利用できるようにする必要があります。
まとめ
今回は「AWS Systems Managerがあれば、踏み台サーバはいらないのか」というテーマで何が必要なのかを考えてみました。パターンをきれいに分けていくと「なんかやれそうだな」というのが見えてきたと思います。考察と設計をもとに次は実践していきたいと思います。