単一リージョンでCloudTrailの証跡を作成してみた。

単一リージョンでの証跡作成は推奨されていません。
2022.02.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS事業本部@福岡のべこみん(@beco_minn)です。

皆さん、CloudTrailコンソールで証跡の作成をしたことはありますか?

コンソール上で証跡を作成しようとすると、このようなメッセージが表示されていると思います。

コンソールで作成された証跡は、マルチリージョンの証跡です。

AWS CloudTrailでは、検出に関するベストプラクティス1として「すべてのリージョンに適用される証跡の作成」が推奨されています。

一方、現在は非推奨とはなっていますが単一リージョンにのみ適用される証跡の作成もAWS CLIを使用することで行うことが出来ます。

気になったのでAWS CLIを使用した単一リージョン適用の証跡作成方法と使用するコマンドについて調べてみました。

大事なことなのでもう一度言いますが、単一リージョンでの証跡作成は推奨されていません。

いきなりまとめ

  • 単一リージョン適用の証跡は非推奨
  • 単一リージョン適用の証跡作成にはcreate-trailコマンドを使用する
  • create-trailコマンドではデフォルトで単一リージョン適用
    • すべてのリージョン適用にする場合は--is-multi-region-trailオプションをつける必要あり

単一リージョンの証跡を作成するには?

AWS CloudTrailのユーザーガイド2にも記載がありますが、AWS CLIのcreate-trailというコマンドを使用することでのみ単一リージョン適用の証跡を作成することが出来ます。

詳細は後述しますが、特にオプションは付けずデフォルトの状態でcreate-trailを使用すると単一リージョン適用の証跡を作成することが出来るようです。

create-trailコマンドについて

それではcreate-trailコマンドについて見ていきましょう。

AWS CLI Command Reference - create-trail

create-trailはCloudTrail APIコマンドの1つです。

証跡の名称(--name)とログ格納先のS3バケット名称(--s3-bucket-name)のみが必須オプションとなっています。

下表に各オプションをまとめました。

必須 オプション 役割 備考
--name 作成する証跡の名前を指定
--s3-bucket-name ログファイル格納用のS3バケット名を指定 S3バケットはコマンド実行前に作成する必要あり
--s3-key-prefix キープレフィックスを指定
--sns-topic-name ログファイル配信の通知用に定義されたAmazon SNSトピック名を指定
--include-global-service-events IAM等のグルーバルサービスのイベントも取得する場合に指定 指定しない場合は--no-include-global-service-events(デフォルト)
--is-multi-region-trail 証跡をマルチリージョンで作成する場合に指定 指定しない場合は--no-is-multi-region-trail(デフォルト)
--enable-log-file-validation ログファイルの整合性の検証を有効にする場合に指定 指定しない場合は--no-enable-log-file-validation(デフォルト)
--cloud-watch-logs-log-group-arn ログを配信するロググループのARNを指定 --cloud-watch-logs-role-arnを指定した場合にのみ必須
--cloud-watch-logs-role-arn CloudWatch Logsエンドポイントがロググループに書き込むために使用するIAMロールのARNを指定
--kms-key-id ログの暗号化に使用するKMSキーIDを指定 値は、"alias/"プレフィックスを付けたエイリアス名、エイリアスARN、キーARN、グローバルに一意のキーID、のいずれかを指定可能
--is-organization-trail Organizations 組織内のすべてのAWSアカウントに証跡を作成する場合に指定 指定しない場合は--no-is-organization-trail(デフォルト)
--tags-list key-valueのリスト形式で証跡のタグを指定
--cli-input-json --generate-cli-skeletonで生成したテンプレートファイルを指定 yamlの場合は--cli-input-yaml
--generate-cli-skeleton このオプションを指定すると、コマンドは実行せずにパラメータテンプレートを生成して表示する 値は、input(デフォルト)、 input-yamloutputのいずれかを指定可能

--cli-input-json / --cli-input-yaml--generate-cli-skeletonはAWS CLIのユーザーガイドでも紹介されており、create-trailコマンド独自のオプションというわけではありません。3

やってみた

ということで、AWS CLIで単一リージョンの証跡を作ってみました。

お手軽にCLIコマンドを実行出来るAWS CloudShellでこのコマンドを実行してみます。

aws cloudtrail create-trail --name demo-trail --s3-bucket-name demo-trail-bucket-20220226

create-trailはデフォルトで単一リージョンとなっているため、--no-is-multi-region-trailオプションは付けていません。

--s3-bucket-nameで指定したバケットは事前に作成しています。

CloudTrailがアクセス出来るようにS3バケットはバケットポリシーを変更する必要があります。4

実行結果はこちらです。

[cloudshell-user@ip-10-0-38-162 ~]$ aws cloudtrail create-trail --name demo-trail --s3-bucket-name demo-trail-bucket-20220226
{
    "Name": "demo-trail",
    "S3BucketName": "demo-trail-bucket-20220226",
    "IncludeGlobalServiceEvents": true,
    "IsMultiRegionTrail": false,
    "TrailARN": "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/demo-trail",
    "LogFileValidationEnabled": false,
    "IsOrganizationTrail": false
}

"IsMultiRegionTrail": false

となっていますね。

単一リージョンの証跡が作成出来たようです。

コンソール上から見るとこんな状態になってます。

コンソール上で証跡を作成するとそのままログ記録が開始されますが、AWS CLIで作成した場合はstart-loggingコマンドを実行しないと開始されません。

最後に

やっぱりAWS CLIのドキュメントを読むとAWSのAPIへの理解が深まって面白いですね。

本記事がどなたかのお役に立てれば幸いです。

以上、べこみんでした。