y-ohgi's blog

TODO: ここになにかかく

令和に構築するEC2踏み台サーバー

TL;DR

  • 令和に踏み台サーバーを作成する
  • Amazon Linux 2023AMIとSSM Agentを利用したEC2
  • 証跡を取得する

About

EC2とSSMのセッションロギングを使用して証跡を取得することが目的。
ECS/Fargateでも同様のことが可能ですが、SSM AgentがプリインストールされているAMIのEC2を使い捨てる方が運用コスト的や構築コスト的に楽なためEC2を選択。

How To

アーキテクチャ

Instance Profileの作成

assumerole.json

$ cat <<EOL > assumerole.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
EOL
$ export EC2SSMRole=EC2SSMBastionRole
$ aws iam create-role \
    --role-name ${EC2SSMRole} \
    --assume-role-policy-document file://assumerole.json
$ aws iam create-instance-profile \
    --instance-profile-name ${EC2SSMRole}
$ aws iam add-role-to-instance-profile \
    --role-name ${EC2SSMRole} \
    --instance-profile-name ${EC2SSMRole}
$ aws iam attach-role-policy \
    --role-name ${EC2SSMRole} \
    --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
$ aws iam attach-role-policy  \
    --role-name ${EC2SSMRole} \
    --policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess

実行ログを格納するためのロググループを作成

$ export LOGS_GROUP_NAME="/ssm/ec2/session"
$ aws logs create-log-group \
    --log-group-name ${LOGS_GROUP_NAME}
$ aws logs put-retention-policy \
    --log-group-name ${LOGS_GROUP_NAME} \
    --retention-in-days 7

SSMのセッションロギングを有効化

System Manager > Session Managerから編集を押下し、EC2の実行ログをCloudWatch Logsへ送信を有効化。
この作業はCLIやCFnから設定ができないためコンソールから実行。

Tips

  • S3へのアーカイブも可能
    • セッション終了時にログのアーカイブを行ってくれるが、大きく形式が異なることとセッションの状態管理が難しくログを完全に保存できない可能性を考慮する必要があります。
  • CloudWatch Logsの考慮点

    • 標準入力には非対応
  • SSMへの接続はVPCエンドポイントでも可能。

EC2の作成

SSMでの接続とログの確認

先述したEC2の作成が終了後、 aws ssm start-session でログイン

$ aws ssm start-session \
    --target <INSTANCE ID>

いくつかコマンドを試しに打って、ログを確認。

実行者がログストリームに表示されていることを確認。

実行したログとその出力結果を確認。

ログのアーカイブ

CWLogsのサブスクリプションフィルターを使用し、Firehoseを経由してS3へアーカイブするのがベターかもしれないです。

Refs

所感

現状の運用でEC2が存在し、key pairを使用したEC2を改修するために行ったのが動機です。
誰がログインしたかを確認したかったため、セッションロギング機能を使ったところ予想以上に優秀でしたまる