AWS SFTPログをCloudWatch Logsに出力してみた #reinvent
AWS Transfer for SFTP(AWS SFTP)はCloudWatch Logsにログを出力できます。 IAM PolicyとIAMロールを作成し、SFTPサーバーに割り当てます。 動作確認としてファイルのPUTを行い、時刻やユーザ名、IPアドレスなどが記録されることを確認しました。
IAMポリシーの作成
AWS SFTPがCloudWatch Logsにログを出力するためにIAMの権限が必要になります。 IAMコンソール>ポリシー>ポリシーの作成>JSONを選択し、以下の内容をペーストします。 ポリシー中の"logs"は、CloudWatch Logsをさします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": "*" } ] }
名前は任意ですが、今回はpush-events-cwlogsとしました。
IAMロールの作成
IAMロールを作成します。 後述の手順で、AWS SFTPにIAMロールを割り当てます。
IAMコンソール>ロールの作成を選択します。 ロールを利用するサービスを選択する画面ですが、現時点でSFTPは反映されていないようです。 一旦、適当なサービスを選択します。今回はS3を選びました。
IAMロールに割り当てるポリシーを選択します。 先ほど作成したpush-events-cwlogsを選びます。
"タグの追加 (オプション)"は特に指定せず、進みます。
適当な名前を入力し、ロールを作成します。今回はsftp-push-events-cwlogsという名前にしました。
sftp-push-events-cwlogsを開き、信頼関係の編集を選択します。
Serviceを"transfer.amazonaws.com"に変更し、保存します。
AWS SFTPサーバーでIAMロールを指定する
AWS SFTPコンソール>Create server>Logging roleで、作成したロール(sftp-push-events-cwlogs)を選択します。 サーバーを作成後に選択する場合、サーバーを選択し、Server configuration>Editから設定できます。
ログを確認する
テストのためにfile.txtを、putします。
$ sftp -i transfer-key abekoki@s-xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com Connected to s-xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com. sftp> put /Users/abe.koki/file.txt Uploading /Users/abe.koki/file.txt to /sftp-project-xxxx/project-a/file.txt /Users/abe.koki/file.txt 100% 4 0.0KB/s 00:00 sftp>
AWS SFTPサーバーを選択し、View Logsを開きます。
CloudWatch Logsコンソールに遷移します。 ログストリームは接続したユーザーの名前が付くようです。
ログストリームを開くと、詳細なログを確認できます。 1行目からは、時刻、ユーザ名(abekoki)、時刻(01:47:46 UTC)、接続したパス(/sftp-project-abek/project-a)、クライアント(OpenSSH)などを確認できました。 2行目からは、「/sftp-project-abek/project-a/file.txt for WRITE|CREATE|TRUNCATE」とfile.txtを開いたことがわかります。 3行目はファイルをクローズした旨の内容です。
おわりに
AWS SFTPのログを有効化し、PUT時のログを確認しました。 ユーザー名、時刻、接続したログなど一般的に必要な情報を記録できることを確認しました。