AWS Systems Manager Session Managerの操作ログをAmazon S3に格納する
はじめに
こんにちは、第三SAチームのamaebiです。
今回はプライベートサブネットにあるAmazon EC2にSession Managerを使ってアクセスし、その操作ログをAmazon S3に保存し、確認する方法について紹介します。
操作ログを残す選択肢としてAmazon CloudWatch Logsがございますが、敢えてAmazon S3を選択した理由についても軽く触れていきます。
・Amazon CloudWatch Logs を使用してセッションデータをログ記録する (コンソール)
なお、プライベートサブネットにあるAmazon EC2にアクセスするまでの手順は、本ブログでは取り扱わないため、以下の記事をご覧ください。
なぜS3にログを残すのか
では、なぜSession Managerの操作ログをAmazon CloudWatch Logsではなく、S3バケットに格納する必要があるのか。
その理由は、Amazon CloudWatch Logsよりも保管コストが安いからです。
Amazon CloudWatch LogsとAmazon S3の料金表で見比べてみましょう。
※東京リージョンでのコスト比較です。
Amazon CloudWatch
ログの管理 | 料金 |
---|---|
収集 (データインジェスト) | |
スタンダード | USD 0.76/GB |
低頻度アクセス | USD 0.38/GB |
保存 (アーカイブ) | USD 0.033/GB |
分析 (Logs Insights のクエリ) | スキャンしたデータ 1 GB あたり USD 0.0076 |
検出およびマスク (データ保護) | スキャンされたデータ 1 GB あたり USD 0.12 |
分析 (Live Tail) | 0.01 USD/分 |
Amazon S3 標準
ストレージ料金表 | |
---|---|
最初の 50 TB/月 | 0.025USD/GB |
次の 450 TB/月 | 0.024USD/GB |
500 TB/月以上 | 0.023USD/GB |
その他の要因によって多少のコスト変動はありますが、Amazon S3に保存した方が全体的にコストパフォーマンスが高いことが分かります。
更にSession Managerの操作ログの他にも、エラーログやアクセスログ等のログを長期保存する場合、Amazon S3標準からS3 Glacierにストレージクラスを変更することで更なるコスト削減に繋がります。
構成図
今回は、以下のような構成でSession Managerからログを取得します。
使用リソース
今回の検証環境で使用するリソース情報は以下の通りです。
- Amazon EC2
- OS:Amazon Linux 2023
- インスタンスタイプ:t2.micro
- ストレージタイプ:gp3
- ストレージ容量:8GiB
- IAM Role
- ポリシー1:AmazonSSMManagedInstanceCore
- ポリシー2:AmazonS3FullAccess
- VPCエンドポイント
- Session Manager用エンドポイント
- インターフェースエンドポイント1:com.amazonaws.ap-northeast-1.ssm
- インターフェースエンドポイント2:com.amazonaws.ap-northeast-1.ec2messages
- インターフェースエンドポイント3:com.amazonaws.ap-northeast-1.ssmmessages
- S3用エンドポイント
- ゲートウェイエンドポイント:com.amazonaws.ap-northeast-1.s3
- Session Manager用エンドポイント
- Amazon S3
- ストレージクラス:標準
- 暗号化タイプ:SSE-S3
手順
大まかな手順としては以下の通りです。
※先ほども述べたようにプライベートサブネットにあるAmazon EC2にアクセスするまでの手順は、本ブログでは取り扱いません。
- アタッチされているIAMロールにポリシー追加
- ゲートウェイタイプのエンドポイント追加
- 操作ログ格納用のS3バケット作成
- S3 ロギング設定
- 確認
それでは、詳細な手順を見ていきましょう。
アタッチされているIAMロールにポリシー追加
ここではAmazon EC2の操作ログがS3バケットに格納できるようアクセス権限を付与します。
マネジメントコンソール > EC2 > インスタンス > 該当インスタンスを選択し、詳細からアタッチされているIAMロールをクリックします。
IAMロールのページに遷移したら、許可タグから 許可を追加 > ポリシーをアタッチ をクリックします。
検索欄からAmazonS3FullAccessと検索し、該当ポリシーを選択します。
その後、許可を追加します。
許可ポリシーがアタッチされていることを確認します。
ゲートウェイエンドポイント追加
プライベートサブネットに配置されているAmazon EC2とS3バケットとの疎通ができるよう、ゲートウェイエンドポイントを設置します。
マネジメントコンソール > VPC > エンドポイント > エンドポイントの作成をクリックします。
エンドポイント名入力後、サービスカテゴリから「AWS のサービス」を選択します。
サービスの検索欄からcom.amazonaws.ap-northeast-1.s3と検索し、該当するエンドポイントを選択します。
その際、必ずエンドポイントタイプがGatewayであるものを選択してください。
対象のAmazon EC2が配置されているVPCとプライベートサブネットが紐づけられているルートテーブルを選択します。
その他の設定はデフォルトのまま、エンドポイントの作成をクリックします。
エンドポイント一覧から先ほど作成したゲートウェイエンドポイントを確認します。
操作ログ格納用のS3バケット作成
今回は検証の為、デフォルト設定のまま作成します。
※アクセス許可設定はバケット内の情報を守る上で必須ですので、ご自身の要件に合った設定をお願いします。
・アクセスコントロールのベストプラクティス
マネジメントコンソール > S3 > バケット > バケットを作成をクリックします。
バケット名を入力し、先ほども述べたように設定はデフォルトのままバケットを作成します。
先ほど作成したバケットに操作ログを格納するためのフォルダを作成しておきます。
サーバー側の暗号化はデフォルトの暗号化設定を使用します。
S3 ロギング設定
Session Managerの操作ログをS3バケットに格納するためのロギング設定を行います。
マネジメントコンソール > Systems Manager > Session Manager > 設定タグから編集をクリックします。
S3 loggingを有効化にします。
暗号化されたS3バケットのみを許可を有効化にして、先ほど作成したS3バケット名と操作ログ格納用フォルダ名を入力します。その後、設定を保存します。
設定タグから上記の設定が反映されていることを確認します。
確認
実際に操作ログがS3バケットが格納されるのか確認します。
先ほどの画面からセッションタグを選択し、セッションの開始をクリックします。
ターゲットインスタンスから該当するインスタンスを選択し、Start sessionをクリックします。
セッションがスタートするまで、数分ほど時間がかかります。
EC2インスタンスにアクセスできました。
試しに適当なコマンドを入力してみます。
入力コマンド
sh-5.2$ whoami ssm-user sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ pwd /usr/bin sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ cd /home/ssm-user/ sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ ls -la total 20 drwx------. 2 ssm-user ssm-user 99 May 9 10:13 . drwxr-xr-x. 4 root root 38 May 9 06:58 .. -rw-------. 1 ssm-user ssm-user 208 May 9 10:13 .bash_history -rw-r--r--. 1 ssm-user ssm-user 18 Jan 28 2023 .bash_logout -rw-r--r--. 1 ssm-user ssm-user 141 Jan 28 2023 .bash_profile -rw-r--r--. 1 ssm-user ssm-user 492 Jan 28 2023 .bashrc -rw-------. 1 ssm-user ssm-user 1279 May 9 10:12 .viminfo sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ vi hogehoge sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ cat hogehoge hogehoge sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ ls -la total 24 drwx------. 2 ssm-user ssm-user 115 May 9 10:17 . drwxr-xr-x. 4 root root 38 May 9 06:58 .. -rw-------. 1 ssm-user ssm-user 208 May 9 10:13 .bash_history -rw-r--r--. 1 ssm-user ssm-user 18 Jan 28 2023 .bash_logout -rw-r--r--. 1 ssm-user ssm-user 141 Jan 28 2023 .bash_profile -rw-r--r--. 1 ssm-user ssm-user 492 Jan 28 2023 .bashrc -rw-------. 1 ssm-user ssm-user 1727 May 9 10:17 .viminfo -rw-r--r--. 1 ssm-user ssm-user 9 May 9 10:17 hogehoge sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ exit
操作ログが格納されているか確認するため、セッションを終了します。
※セッションが終了した時に、S3バケットに操作ログが格納されるようになっています。
セッション終了後、S3バケットの操作ログ格納用フォルダの中身を確認します。
先ほどの操作ログが格納されていることが確認できます。
最後にログの中身を確認していきましょう。
ダウンロードされたログファイルをテキストエディタ等で開いても文字化けが発生してしまうため、以下のコマンドを使用してPowerShellからログファイルを確認します。
Get-Content -Encoding utf8 "ログファイルのパス名"
PowerShellから確認した出力結果がこちらです。
ログ内容
Script started on 2024-05-09 10:19:55+00:00 [<not executed on terminal>] sh-5.2$ sh-5.2$ whoami ssm-user sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ pwd /usr/bin sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ cd /home/ssm-user/ sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ ls -la total 20 drwx------. 2 ssm-user ssm-user 99 May 9 10:13 . drwxr-xr-x. 4 root root 38 May 9 06:58 .. -rw-------. 1 ssm-user ssm-user 208 May 9 10:13 .bash_history -rw-r--r--. 1 ssm-user ssm-user 18 Jan 28 2023 .bash_logout -rw-r--r--. 1 ssm-user ssm-user 141 Jan 28 2023 .bash_profile -rw-r--r--. 1 ssm-user ssm-user 492 Jan 28 2023 .bashrc -rw-------. 1 ssm-user ssm-user 1279 May 9 10:12 .viminfo sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ vi hogehoge sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ cat hogehoge hogehoge sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ ls -la total 24 drwx------. 2 ssm-user ssm-user 115 May 9 10:17 . drwxr-xr-x. 4 root root 38 May 9 06:58 .. -rw-------. 1 ssm-user ssm-user 208 May 9 10:13 .bash_history -rw-r--r--. 1 ssm-user ssm-user 18 Jan 28 2023 .bash_logout -rw-r--r--. 1 ssm-user ssm-user 141 Jan 28 2023 .bash_profile -rw-r--r--. 1 ssm-user ssm-user 492 Jan 28 2023 .bashrc -rw-------. 1 ssm-user ssm-user 1727 May 9 10:17 .viminfo -rw-r--r--. 1 ssm-user ssm-user 9 May 9 10:17 hogehoge sh-5.2$ sh-5.2$ sh-5.2$ sh-5.2$ exit exit Script done on 2024-05-09 10:19:55+00:00 [COMMAND_EXIT_CODE="0"]
操作ログが無事取得できていることが確認できました。
最後に
Session Managerの操作ログをAmazon S3に保存し、確認する方法についての紹介でした。
長期的に操作ログを残しておくことで、何か問題が発生した場合でもトレーサビリティは担保することができます。
Amazon S3に保存することでコストメリットの恩恵も受けられますので、こういった運用方法を検討するのもいいかもしれません。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitteramaebiと申します。クラウドエンジニアとしてまだまだ未熟ですが、これから精進していきたいです。
Recommends
こちらもおすすめ
-
AWSとWordPressで企業Webサイトを構築する
2019.5.16
-
CloudFormationで認証情報を扱うベストプラクティス
2020.8.7
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16