Microsoft SentinelにAWS CloudTrailのログを取り込んでみた

2023.01.15

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

Azure には SIEM (Security Information and Event Management) と SOAR (Security Orchestration, Automation and Response) を提供するサービスである Microsoft Sentinel があります。AWS のデータも取り込めるため試してみました。

Microsoft Sentinel とは | Microsoft Learn

試してみた

AWS のデータの取り込み方法は次のドキュメントに記載があります。

Microsoft Sentinel をアマゾン ウェブ サービスに接続し、AWS サービス ログ データを取り込む | Microsoft Learn


Microsoft Sentinel から AWS に接続するコネクタには次の 2 種類があります。

  • S3 コネクタ(新規) - プレビュー
  • CloudTrail コネクタ(レガシー)

新しい S3 コネクタでは、次の AWS のデータの取り込みに対応しています。

  • AWS CloudTrail の管理イベントとデータイベント
  • Amazon VPC フローログ
  • Amazon GuardDuty の検出結果

また、AWS 側のセットアップ方法が 2 種類あります。

今回のブログでは、AWS CloudTrail の管理イベントを手動セットアップで取り込んでみたいと思います。手動セットアップを選択した理由は、勉強目的でどのようなリソースが必要か確認しながら設定したかったためです。


Microsoft Sentinel の初期設定

Microsoft Sentinel の初期設定をしていきます。

Azure ポータルで Microsoft Sentinel の画面を開き、「Microsoft Sentinel の作成」をクリックします。

Log Analytics ワークスペースは未作成の環境のため「新しいワークスペースの作成」をクリックします。

今回は次の設定でワークスペースを作成します。

ワークスペース作成後に、作成したワークスペースを選択して「追加」して完了です。

今回は無料試用版を利用します。

AWS 側の設定で必要なため、設定画面のワークスペースの設定からワークスペース ID を確認します(IAM ロールの信頼ポリシーにおいて外部 ID として指定します)。


AWS の設定

手動セットアップ を参考に、AWS CloudTrail と接続するために 必要な AWS 側の設定を行います。

Microsoft Sentinel が AWS に接続するアーキテクチャは下図となります。

(引用元)アーキテクチャの概要

次のリソースを作成・設定していきます。

  • IAM ロール
  • SQS のキュー
  • S3 バケット
  • CloudTrail の証跡


IAM ロールの作成

まずは、IAM ロール azure-sentinel-role を作成しました。

アタッチしている IAM ポリシーは次の通りです。IAM アクセス許可ポリシーを適用する に記載の内容を設定しています。今回は KMS 暗号化を利用しない設定で進めますが、利用する場合は KMS 関連の権限も必要です。

  • AmazonSQSReadOnlyAccess
  • AmazonS3ReadOnlyAccess
  • AWSLambdaSQSQueueExecutionRole

信頼ポリシーです。手動セットアップ に記載されている Microsoft の AWS アカウント ID を Principal として指定し、Microsoft Sentinel のワークスペース ID を外部 ID として指定しています。

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Principal": {
              "AWS": "arn:aws:iam::197857026523:root"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
              "StringEquals": {
                  "sts:ExternalId": "0e898fa7-44bf-7717-bc20-a5310example"
              }
          }
      }
  ]
}


SQS キューの作成

次に、Amazon SQS のキューを作成します。

次の設定で標準キューを作成しました。設定はデフォルトのままです。

キューのアクセスポリシーの設定です。

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "allow s3 to send notification messages to SQS queue",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:ap-northeast-1:111122223333:azure-sentinel-queue",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::azure-sentinel-cloudtrail-20230111"
        }
      }
    },
    {
      "Sid": "allow specific role to read/delete/change visibility of SQS messages and get queue url",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/azure-sentinel-role"
      },
      "Action": [
        "SQS:ChangeMessageVisibility",
        "SQS:DeleteMessage",
        "SQS:ReceiveMessage",
        "SQS:GetQueueUrl"
      ],
      "Resource": "arn:aws:sqs:ap-northeast-1:111122223333:azure-sentinel-queue"
    }
  ]
}

アクセスポリシーは次のドキュメントで設定内容が説明されています。

Azure-Sentinel/AwsRequiredPolicies.md at master · Azure/Azure-Sentinel


S3 バケットの作成

CloudTrail のログを保管する S3 バケットを作成します。

主な設定は次の通りにしました。

項目
リージョン ap-northeast-1
バージョニング 無効
デフォルトの暗号化 SSE-S3
イベント通知名 azure-sentinel-event

イベント通知の設定では、S3 バケットへの PUT イベントを上記で作成した SQS キューに通知するように設定します。

バケットポリシーも設定する必要がありますが、CloudTrail の設定時に自動で設定されるポリシーもあるため、後で設定するようにします。


CloudTrail の証跡作成とバケットポリシーの更新

CloudTrail の証跡 azure-sentinel-cloudtrail を次の内容で設定しました。先ほど作成した S3 バケットにログを格納するように設定しています。

証跡の作成後に、S3 バケットのバケットポリシーに対して、次のドキュメントで説明されている Common policies の S3 policy を最後に追記しました。

Azure-Sentinel/AwsRequiredPolicies.md at master · Azure/Azure-Sentinel

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Sid": "AWSCloudTrailAclCheck20150319",
          "Effect": "Allow",
          "Principal": {
              "Service": "cloudtrail.amazonaws.com"
          },
          "Action": "s3:GetBucketAcl",
          "Resource": "arn:aws:s3:::azure-sentinel-cloudtrail-20230111",
          "Condition": {
              "StringEquals": {
                  "AWS:SourceArn": "arn:aws:cloudtrail:ap-northeast-1:111122223333:trail/azure-sentinel-cloudtrail"
              }
          }
      },
      {
          "Sid": "AWSCloudTrailWrite20150319",
          "Effect": "Allow",
          "Principal": {
              "Service": "cloudtrail.amazonaws.com"
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::azure-sentinel-cloudtrail-20230111/AWSLogs/111122223333/*",
          "Condition": {
              "StringEquals": {
                  "s3:x-amz-acl": "bucket-owner-full-control",
                  "AWS:SourceArn": "arn:aws:cloudtrail:ap-northeast-1:111122223333:trail/azure-sentinel-cloudtrail"
              }
          }
      },
      {
          "Sid": "Allow Arn read access S3 bucket",
          "Effect": "Allow",
          "Principal": {
              "AWS": "arn:aws:iam::111122223333:role/azure-sentinel-role"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::azure-sentinel-cloudtrail-20230111/*"
      }
  ]
}

以上で、AWS 側の設定は完了です。


Microsoft Sentinel のデータコネクタ設定

Microsoft Sentinel のデータコネクタ設定から「amazon」などで検索して、S3 コネクタを選択します。

AWS 側の IAM ロールの ARN と SQS の URL、および宛先テーブルを設定して「接続の追加」をクリックします。以上で、接続設定は完了です。

データが取り込まれていることを確認できました。

ブック機能のテンプレート「AWS ユーザー アクティビティ」を試してみたところ、アクティビティが可視化されました。

クエリのサンプルや AWS のデータに利用できる分析テンプレートも用意されていました。

さいごに

Microsoft Sentinel に AWS CloudTrail のログを取り込んでみました。最後に試したブック機能以外にも、分析や脅威ハンティングのテンプレートや機能もあるため色々できそうです。

以上、このブログがどなたかのご参考になれば幸いです。