こんにちは、インサイトテクノロジー DBアプライアンス開発本部でクラウドのインフラ業務を担当している伊藤です。最近、花を定期的に届けてくれるサブスクサービスを利用し始めました。気分転換に始めてみましたがとても良い感じです。皆さまもいかがでしょうか?
AWSインフラ構築の準備を進めています。インフラ構築にあたって重要な役割を担うサービスの設定手順などをまとめていきたいと思います。
今回は、AWS CloudTrail(以下「CloudTrail」)を取り上げます。
※以下の画像や情報は2021/10時点のものとなります。
CloudTrailとは
AWSアカウント作成時に有効になり、以下の操作で誰がどこから何をしたかCloudTrailのイベント履歴に保存されます。
- AWSマネジメントコンソールでの操作
- AWS CLIおよびAWS SDKとAPIによる操作
CloudTrailのイベント履歴には90日間分が無料で保存されます。90日以上保存したい場合は、「証跡」を作成してS3へ保存します。※S3への保存料金は発生します。
Amazon CloudWatch LogsへCloudTrailのログを送信することによってモニタリングを行うことができます。
CloudTrail のサポートされているサービスとCloudTrail のサポートされていないサービスがありますので、念のためご確認ください。
証跡を設定してみる
CloudTrailにアクセスすると以下の画面が表示されます。画面右側「証跡の作成」をクリックします。
「クイック証跡の作成」画面が表示されます。この画面では、証跡名を確認して「証跡の作成」をクリックします。
証跡が作成されます。クイック証跡の作成ではこのように簡単に証跡を作成することができます。
S3バケットが作成され、少し時間をおいてアクセスしてみるとログが出力されていることが確認できました。
証跡の出力内容
証跡はjson形式で保存されます。改行なしで出力されるため、見やすいようにフォーマットすると以下の情報が出力されます。一定期間分のイベントをまとめて1つのオブジェクトファイルとして保存されます。
※値は “xxxxx” または “<アカウントID>” 、 “<ユーザー名>” でマスクしています。
保存した証跡の確認を行うにはAmazon Athenaを利用して確認が可能です。こちらは別途ブログで解説したいと思います。
確認するポイント
ポイントとなる項目をピックアップしてみました。詳細や他の項目については「CloudTrail レコードの内容」をご確認ください。
- userIdentityのaccountIdやuserName
- どのAWSアカウントのどのユーザが行った作業か確認できます。
- eventTime
- UTCで保存されています。
- eventSource
- 利用したサービスです。
- eventName
- 対象サービスで行った操作です。
- sourceIPAddress
- リクエストを行ったIPアドレスが表示されます。
出力内容(フォーマット済)
{
"Records": [
{
"eventVersion": "1.08",
"userIdentity": {
"type": "IAMUser",
"principalId": "xxxxxx",
"arn": "arn:aws:iam::<アカウントID>:user/<ユーザ名>",
"accountId": "<アカウントID>",
"accessKeyId": "xxxxxx",
"userName": "<ユーザ名>",
"sessionContext": {
"sessionIssuer": {},
"webIdFederationData": {},
"attributes": {
"creationDate": "2021-10-29T07:29:15Z",
"mfaAuthenticated": "true"
}
}
},
"eventTime": "2021-10-29T09:01:15Z",
"eventSource": "s3.amazonaws.com",
"eventName": "CreateBucket",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "xxxxxx",
"userAgent": "[AWSCloudTrail, aws-internal/3 aws-sdk-java/1.11.1030 Linux/5.4.141-78.230.amzn2int.x86_64 OpenJDK_64-Bit_Server_VM/25.302-b08 java/1.8.0_302 vendor/Oracle_Corporation cfg/retry-mode/standard]",
"requestParameters": {
"CreateBucketConfiguration": {
"LocationConstraint": "ap-northeast-1",
"xmlns": "http://s3.amazonaws.com/doc/2006-03-01/"
},
"bucketName": "aws-cloudtrail-logs-xxxxx-xxxxx",
"Host": "s3.ap-northeast-1.amazonaws.com"
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
"bytesTransferredIn": 158,
"AuthenticationMethod": "AuthHeader",
"x-amz-id-2": "xxxxx",
"bytesTransferredOut": 0
},
"requestID": "xxxxx",
"eventID": "xxxxx",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "<アカウントID>",
"vpcEndpointId": "vpce-xxxxx",
"eventCategory": "Management"
},
{
..(略)..
},
{
..(略)..
}
]
}
CloudTrail イベント履歴との比較
90日以内であれば同様の内容をイベント履歴で合わせて確認することができます。画面下のイベントレコードには、上記のjson情報が表示されています。
※イベント時間はJST表記となっています。
クイック証跡による設定値
以下のような設定が実施されました。
一部設定値をピックアップして、解説しようと思います。
詳細
- ログファイルのSSE-KMS暗号化
- ドキュメントを確認すると、デフォルト(SSE-S3)で暗号化されているがKMSキーを利用することで、さらに柔軟な管理を実施できるようになります。
- KMSキーを利用するため、KMSの利用に応じて費用がかかります。
- ログファイルの検証
- 改ざんされていないか確認が可能となります。
- ダイジェストファイルを追加で保存しますが、後から保存したログの整合性チェックが実施できるため推奨設定かと思います。
CloudWatch Logs
- 証跡ログをCloudWatch Logsへ送信することでモニタリングを実施できます。
データイベント
- S3バケットのオブジェクトレベルの操作などを保存します。そのため操作によっては大量のログが保存されます。
- 管理イベントと違い無料枠がありません。
Insightsイベント
- 異常な書き込み管理イベントをを検知できるようになります。EC2のRunInstance APIが短時間で呼ばれた場合など
- 分析にも費用が発生します。
まとめ
- 証跡の設定を行うことでイベント履歴に保存できない90日より前のデータを保存できるようになりました。
- 複数の設定があるため、ベストプラクティスを参考に環境にあった設定を検討したいですね。
最後までお読みいただきありがとうございます。次回はAWS Configについて取り上げたいと思いますので、ご興味ありましたらご覧ください。