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

×