[AWS CloudTrail] 証跡/内部監査用のログを貯める

監査対策としてCloudTrailでログを取得する方式を解説します。

CloudTrailとは?

CloudTrail

  • 単一のAWS アカウントにおける、全APIリクエストを記録するサービス

    • 公式説明
      1
      CloudTrail を使用すると、AWS アカウントのイベントを表示できます。これらのイベントの記録を保持するには、証跡を作成します。証跡により、イベントメトリクスを作成し、アラートをトリガーして、イベントワークフローを作成することもできます。 また、AWS Organizations のマスターアカウントでログインすると、組織の証跡を作成することができます。
    • 一つのAPではなく、アカウント全体の話
    • 外向きよりも、内向きの監視が目的
      • AWSアカウントを共有する内部のIAMユーザの悪意を持った行動を抑えることができる
      • 外部からのリクエストも記録できる
  • デフォルト

    • 90日間の記録は初めから有効
    • 無料
    • 永続的に保持する際には有料となる
  • ”証跡情報の作成”

    • S3
    • 本番稼働でなければ、ひとまず対処しなくてもOK?
  • CloudTrail Insights

    • 異常検知機能
      • 公式説明
        1
        CloudTrailが異常なアクティビティを検出した場合、Insightsイベントはトレイルの送信先のS3バケットに配信されます。また、CloudTrailコンソールでInsightsイベントを表示すると、インサイトの種類やインシデント期間を確認することができます。CloudTrailのトレイルでキャプチャされる他のタイプのイベントとは異なり、インサイトイベントは、アカウントの通常の使用パターンとは大きく異なるアカウントのAPI使用状況の変化をCloudTrailが検出した場合にのみログに記録されます。
    • 有料
  • Organizationのマスターアカウントを使えば、マルチアカウント運用でも組織の証跡を作成可能

    • 監査チームとの連携に活用

CloudTrailで内部監査用のログを貯める

デフォルトでは90日間の情報しか確認出来ないため、証跡を作成してS3 bucketに貯める必要がある。

  • AWS Console/CloudTrail
  • ダッシュボード/”証跡の作成”を押下
    CloudTrail

証跡の作成

  • 使い方は2種類ありそう
    • アカウント統一の証跡を作成
    • サービス毎に証跡を分ける
      • 複数の認跡の作成では、追加コストが発生

リージョン毎に一つまでの証跡を作成しても無料であり、S3のみの課金となる。
CloudWatch側でサービス毎のログは取るので、CloudTrailはアカウント統一の証跡を作成することにする

CloudTrail 証跡の作成

  • 証跡情報の作成
    • 証跡名
      • アカウント名-logsで設定してみる
    • 証跡情報を全てのリージョンに適応
      • はい
    • 管理イベント
      • そのまま
    • Insightsイベント
      • いいえ
        • 追加料金を避けるため
        • CloudWatchからのAlartで充分だと考える
    • データイベント
      • S3, Lambda共に全てでOK
    • ストレージの場所
      • 新しいS3バケットを作成しますか?
        • はい
      • S3バケット
        • 適当に命名
          • bucket-for-cloudtrail-logs
    • 詳細
      • ログファイルの検証
        • CloudTrailからログファイルを送信後に、編集/削除/変更がないか確認できる
        • Cloud Configが必要だと考えていたが、利用せずとも改ざん対策できた
    • タグ
      • Own
        • 証跡の作成者だけ登録
    • 作成

以上で証跡とS3 Bucketが生成される。内部監査対策は基本的にこれだけでOK。

参考

関連記事

CloudFrontのアクセスログをLoggingで収集~aws configで改ざん防止

CloudFrontのLoggin機能を有効化して、任意のS3バケットに格納するよう設定します。
だれが何時何をしたのか?確認可能にすることで、後の監査対策となります。
今回の手法はAWSのベストプラクティスの一つなので覚えておきましょう(資格の試験で良く出ます)

今回の構成

CloudFrontのLogging機能

ログ記録の仕組み

  • ClouFrontの設定からLoggingを有効化するだけで、上記の図のように、S3にアクセスログファイルを自動で格納するように設定可能です。CloudFrontを用いるのであれば、基本的に使う機能として覚えてください。

前提条件

実装手順

Log格納用のs3 bucketを生成/Policy設定

  • aws console/s3
  • バケットを作成する
    • 任意の名称を付ける

バケットの作成

権限設定

  • LogをためるにはCloudFrontからのアクセス許可が必要

  • 必要な権限

    • s3:GetBucketAcl
    • s3:PutBucketAcl
  • s3/任意のbucket/アクセス権限タブ/アクセスコントロール

    • S3 ログ配信グループを選択
    • オブジェクトへのアクセス
      • 以下をチェック
        • オブジェクトの一覧
        • オブジェクトの書き込み
      • 保存
    • ロックパブリックアクセスを無効化
  • バケット用のs3 ACLでFULL_CONTROLを付与する必要もあります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MakeLogs",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E2TINTLAJ7TK2U"
},
"Action": "*",
"Resource": "arn:aws:s3:::reacq-bucket-for-logs/*"
}
]
}
  • その他のS3 Bucketのプロパティ
    • オブジェクトレベルのログ記録
      • 追加料金がかかっても良ければ、CroudTrailデータイベント機能を使用して記録可能

ログ削除時にSNSトピックにより通知させる

S3 bucket内のログの削除イベントを元に、Amazon SNSトピックを利用して危険通知を自動で出せるように設定します

  • SNSトピックを作成する
    • SNSトピックを利用することで設定した宛先に通知を送ることができます
    • 手順
      • AWS Console/Amazon Simple Notification Service
      • トピックの作成
        • トピック名
          • DeleteAlert
        • 次のステップ
        • 表示名
          • Log-Delete-Alert
        • 他の設定はスルーでOK
          • ※AWSを利用する際の原則として、タグにOwnerとPJ名程度は付けておきましょう
        • トピックの作成
      • トピックができたらARNを控えます
        • ARNはAWSのリソースを一意にに藩閥するための番号
        • 他のサービスと連携する時に必要になります
      • 生成したトピックを選択
      • ”サブスクリプションの作成”
        • プロトコル
          • 今回はEメールを選択
          • 例えばSMSで電話番号を設定するば、よくあるWEBサービスのSMS通知を簡単に実現できます
        • エンドポイント
          • 今回はTeamsの開発チームのチャンネルに流したいので、そのメールアドレスを設定(Teamsはチャンネル毎にメールアドレスを取得できます)
        • サブスクリプションの作成を押下
      • 以上でこのSNSトピックが呼び出された際に、サブスクリプションで規定した連絡先に通知がと届くようになります

Amazon SNS サブスクリプション

  • S3側でイベントを規定
    • S3 Bucket/プロパティタブ
    • イベント
      • ログの削除を検知できるようにイベントを作成します
        • 名前
          • DeleteLog
        • イベント
          • 全てのオブジェクトの削除イベント
        • プレフィックス/サフィックスはスルーでOK
        • 送信先
          • SNSトピック
        • SNSトピックのARN
          • 事前に作成しておいたSNSトピックのARNをコピペ

Loggingの有効化

  • aws console/CloudFront
  • 任意のディストリビューションを選択して、GeneralタブのEditを押下
  • Edit Distribution
    • Loggingをonに変更
    • Bucket for Logs
      • 事前に作成したbucketを選択
    • Yes, Edit

Edit Distribution

ログ記録を確認

  • S3バケットを確認するとログの記録が開始されたことを確認できます

Cloud Trail

aws configで改ざんを防止

S3にせっかくログを貯めても、削除されてしまっては無意味であるため、改ざん防止策が必須となります。

  • 改ざん対策
    • aws configでログの格納先であるs3 bucketをトラッキング
    • ログデータの削除/編集を検知

料金

  • アクセスログの料金

    • つまりS3の料金対策だけでOK
      1
      アクセスログの作成は、CloudFront のオプション機能です。アクセスログの作成を有効にしても追加料金はかかりません。ただし、Amazon S3 でのファイルの保存とアクセスについて通常の Amazon S3 料金が発生します (ファイルの削除はいつでもできます)。
  • 対策例

    • ログを非常事態以外は見ない場合
      • Glacier等の廉価版を利用
    • 直近のログは素早く確認したい場合
      • S3のライフサイクルポリシーを利用して、一定期間の経過後にGlacierに移行させる

参考

関連記事

@EventEmitter @Input @Output @ViewChild ACM AMP API Gateway AR AR.js AR.js Studio AWS AWS Amplify AWS Budgets AWS Cost Explorer AWS SDK for JavaScript AddThis Adobe XD Alexa Amazon CloudWatch Amazon Honycode Amazon SNS Android Angular Angular Material AngularFire AppSync Augury C CDN CI/CD Cloud Craft Cloud9 CloudFormation CloudFront CloudTrail Cognito Cost Anomaly Detection Cubase ai Cubasis LE DTM Disqus DynamoDB Elgato HD 60S Firebase Firebase Hosting Former2 Github Github Actions Github.com GithubEnterprise GithubPages Google Chrome Google Cloud Shell GraphQL Hexo Hosting IAM Ionic JSON JavaScript LadioCast Logging LowCode MFA MS Authentication MacBook Pro 16 Mind Node NETDUETTO Netflix Party Netlify Network NoCode Observable PO PdM Promise RPA ReactiveForm Recognition Route53 S3 SAM(Serverless Application Model) SAR SSL SYNCROOM Schematics ScrumInc Serverless Service Siri Sitemap Spark AR Steinberg UR44C Teams Touch Cast Studio Treetable TypeScript UI UI Bakery WAF WAFv2 WEB Page Dev WEB会議 WebAR WebSocketAPI Webhook Windows Power Automate Wireshark aot async/await aws config cloud9 display.land draw.io e2e test filter() forkJoin() google search console hexo-generator-amp iOS iPad Pro iPhone icarus map() mat input mat tree mat-checkbox mat-input mat-selection-list mmhmm ngFor plantUML popIn Aladdin2 then() vscode ”global is not defined” らくがきAR アジャイル アジャイル開発 クロスプラットフォーム ショートカット スクラム スクラム開発 テレワーク ファイル操作 ブラウザ型IDE プロダクトオーナー プロダクトマネージャー プロトタイピング リモートセッション 共同開発 双方向データバインディング 待ち合わせ処理 認定スクラムマスター 静的WEB Hosting 静的WEBサイトHosting
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×