踏み台サーバの構築、運用はそれなりに面倒ですが、
AWS SystemsManagerの「SessionManager」を利用すると
同様の事が簡単に行えます。踏み台サーバに比べて制限もあるので完全に代替は出来ませんが
多くのケースでは十分では無いかと思います。
Windows,Linuxをサポートしており、とても便利なサービスなのでご紹介です。
SessionManagerの良い点
- IAMを利用した一元的なアカウント管理、アクセス制御が出来る
- 踏み台サーバの構築が不要。
- パブリックIPアドレスが不要でEC2にアクセスが可能
- インバウンドポートを開く必要が無い、SSHキー管理も不要
- アクセスログ、操作ログの記録監査が容易
- 無料
良い点は色々ありますが個人的には面倒なアクセスログ、操作ログの
記録、監査が簡単に出来る点がとても魅力的だと思います。
個人学習用途では費用のかかるパブリックIPが不要になるところもいいですね。
SessionManagerの導入
本記事はPublicなEC2への導入を前提としています。
PriateなEC2にアクセスするためには別途手順が必要となります。
詳細は以下を参照ください。
SessionManagerでPrivateなEC2にアクセスする
導入は以下の流れになります。詳細は環境によって異なるので公式ドキュメントを参照ください。
- SSMエージェントのインストール(Amazon Linuxではプリインストールされてます)
- Session Manager 用のIAMインスタンスプロファイルを準備する
今回は以下を参考に既存のインスタンスに最小限のアクセス許可のプロファイルを作成しました。
Session Manager 用のカスタム IAM インスタンスプロファイルを作成する
- 上記で準備したロールをEC2にアタッチする
SessionManagerを利用したEC2への接続
AWSコンソールから 「Systems Manager」> 「セッションマネージャー」サービスを選択し、
対象のEC2を選択して「セッション開始」すれば接続出来ます。
驚くほど簡単にできますね!
S3にセッションログを保存する
以下を参考に S3へのアクセス権限を付与します。
Session Manager と Amazon S3 および CloudWatch Logs のアクセス許可を持つインスタンスプロファイルを作成する (コンソール)
今回はEC2にアタッチしているポリシーに以下のようなポリシーを追加しました。
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel",
"ssm:UpdateInstanceInformation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::backetname/*"
},
SessionManagerの設定画面でログ保存先の指定が出来ますので
上記で権限を与えたバケットを選択すれば設定完了で
セッションログがS3に保存されるようになります。
ログを一定期間でS3→S3 Glacierへ転送
S3のプロパティでライフサイクルルールを作成し、
一定期間が経てば S3 Glacierに転送するように設定します。
(例えば30日間経過後はS3からログを削除し、Glacierに保存するなど)
リクエスト自体にも料金がかかるので、このあたりはログの量や頻度によって
どのように処理をするのか決めてください。
CloudWatchLogsにログを保存する
保存用途の場合はS3を、解析等をしたい場合はCloudWatchLogsが適していると思います。
EC2にアタッチしたポリシーにさらに以下を追加します。
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Resource": "*"
},
保存用のCloudLogWatch Logsグループを作成し、
あとはS3の保存と同じでSessionManagerの管理画面から作成したグループを設定すると
ログが保存されるようになります。
以上