CLI接続のセッションマネージャーの操作ログをS3バケットに保存する方法

こんにちは、協栄情報のきおかです。

今回はCLIからセッションマネージャー接続した際の操作ログを出力してみました。
さらにそれをS3バケットに保存してみました。

今回は自分でも初の試みだったので、少し解像度が粗いです。

 

 

前置き

セッションマネージャー経由のログ出力ですが、ポートフォワードやSSHを介する接続ではログは記録できないようです。
ログ出力できるのは、CLIやマネジメントコンソールからのセッションマネージャー接続ですので、今回はそちらの操作ログをS3バケットに保存します。

 

また、WindowsノードにFleet ManagerでGUI接続した場合の操作ログも今回の方法では保存されませんでした。(本稿とは関係ないですが、Windowsノードをポート開放せずにGUI接続する方法をこちらの記事で紹介しています。興味がある方は見てみてください。)

 

 

 

下準備

これまで通り、セッションマネージャーを利用する準備をしていきます。

今回もLinuxとWindowsで検証を行っていきます。
 

 

AWS CLIのインストール

AWS CLIはローカル環境のコマンドラインシェルでコマンドを使用して、AWS サービスとやり取りするためのオープンソースツールです。詳しくはAWS公式ドキュメントをご参考ください。

 

AWS CLIはご自身のローカル環境にインストールしてください。

 

こちらのAWS公式ドキュメントからそれぞれのOSに合わせてインストールしてください。

 

Windowsだけですが、こちらに方法記載しておきます。

  1. 下記コマンドを実行して、インストールを実行。

    C:> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
  2. 下記コマンドを実行して、インストール完了を確認。

    C:> aws --version

どちらもエラーが出なければ完了です。

 

 

AWS CLIのアクセス設定

アクセス設定も必要です。こちらの記事をご参考ください。
 

 

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

AWS CLIを使ってSSM接続する場合に必要になるのが、Session Managerプラグインです。

 

AWS CLIと同様、Session Managerプラグインもご自身のローカル環境にインストールしてください。

 

こちらもAWS公式ドキュメントを参考にして行ってください。

  1. 下記URLにアクセスして、インストーラをダウンロード。

    https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe
  2. インストーラを実行して、インストールを実行。

  3. インストールできたら下記コマンドを実行し、インストールを確認。

    session-manager-plugin

    以下が出力されればインストール完了です。

    The Session Manager plugin is installed successfully. Use the AWS CLI to start a session.

 

 

EC2インスタンスの作成

以下を満たせばなんでも大丈夫です。

  • NATゲートウェイをおいてルーティングする
  • プライベートサブネットに置く
  • HTTPSアウトバウンド通信を許可したセキュリティグループを作成する
  • SSM Agentをインストールする(デフォルトでインストールされるAMIもあり)
  • IAMポリシーAmazonSSMManagedInstanceCoreを含んだIAMロールをアタッチ

セッションマネージャー利用条件・準備はこちらを参考にしてください。

 

 

 

S3バケット作成

特に設定は不要です。デフォルトの設定で作成してください。

 

 

 

手順

接続確認

まずCLIからSSM接続が可能かを確認します。
下記を実行して、接続ができることを確認してください。

$ aws ssm start-session --target i-xxxxxxxx

 

接続できない場合はこちらの記事で最低限必要な項目を確認してください。

 

 

IAMポリシー追加

EC2インスタンスにアタッチしているIAMロールのIAMポリシーを追加します。
以下はEC2インスタンスがS3バケットに操作ログを保存するための権限付与です。

 
以下はこちらのAWS公式ドキュメントに記載のIAMロールの例を参考に作成しています。

 

S3バケット作成の際にKMSキーを使うよう設定した場合は、先ほどの公式ドキュメントを参考にして追加してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetEncryptionConfiguration",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::<バケット名>/*",
                "arn:aws:s3:::<バケット名>"
            ]
        }
    ]
}

 

 

セッションマネージャーからS3へのログ保存を設定

Systems Managerのマネジメントコンソールのタブからセッションマネージャーを開いてください。

 

設定という項目があるので、そこからS3 loggingEnableにしてください。

S3-logging-enabled

先ほど作成したS3バケットをリストから選択してください。選択出来たらページ下の右側にある保存を押して設定完了です。

 

 

 

検証

以下の手順を行ってください。

  1. EC2インスタンスに接続してください。
  2. 適当に何かコマンドを打ってみてください。
  3. 接続を終了してください。

次にS3バケットのマネジメントコンソール画面に移って、ファイルが保存されていれば成功です。

 

 

文字化け問題

私の方ではMicrosoft Windows Server 2022 BaseAmazon Linux 2023 AMIでそれぞれ検証しました。

 

Windows Server 2022 Baseの場合

Windowsの場合は文字化けもなく、操作ログがそのまま出力されました。

操作ログWindows

Amazon Linux 2023の場合

Linux 2023の場合、文字化けが発生しました。
操作ログLinux

 

こちらは、

  • ローカル環境(私の場合はWindows)にダウンロードしてエンコードする: Get-Content ${ファイル名} -Encoding utf8
  • S3イベント通知でLambda関数を呼び出してエンコードして保存する

などで対処できそうです。前者は手動であり総当たり的なので、実際の運用では後者がいいかもですね。もしくは根本的解決を模索するか。。

 

 

 

まとめ

今回はセッションマネージャーで行った操作のログ記録をS3バケットに保存する方法をご紹介しました。

 

次回はCloudWatchとも連携させてみようと思います。

 

それではまた。

Last modified: 2023-06-07

Author