AWS CloudTrail連携
このガイドでは、AWS CloudTrailをKYRA MDRに接続して、AWS環境のリアルタイム監視を行う方法を説明します。KYRA MDRはCloudTrailイベントを分析し、不正アクセス、設定ミス、不審なAPIアクティビティを検出します。
前提条件
- 管理者アクセス(またはロールとS3バケット通知を作成するためのIAM権限)を持つアクティブなAWSアカウント
- AWSアカウントでCloudTrailが有効(管理イベントはデフォルトで有効)
- アクティブなサブスクリプションを持つKYRA MDRアカウント
アーキテクチャ概要
AWS CloudTrail → S3 Bucket → SNS Topic → KYRA Cloud Sensor → KYRA MDR Platform (S3をポーリング)KYRA MDRはクロスアカウントIAMロールを使用してS3バケットからCloudTrailログを読み取ります。KYRAが読み取るまで、お客様のデータは管理下から離れません。
ステップ1:KYRA用IAMロールの作成
KYRA MDRがCloudTrailログを読み取れるようにするクロスアカウントIAMロールを作成します。
AWSコンソールを使用
- IAM > Roles > Create Role に移動
- Another AWS account を選択
- KYRA MDRのAWSアカウントID:
123456789012(Console > Settings > Cloud Integrationsで提供)を入力 - Require external ID にチェックし、コンソールに表示されるExternal IDを入力
- Next をクリックし、以下のポリシーをアタッチ
IAMポリシー
KYRAMDRCloudTrailReadOnly という名前のカスタムポリシーを作成:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudTrailBucketAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-cloudtrail-bucket", "arn:aws:s3:::your-cloudtrail-bucket/AWSLogs/*" ] }, { "Sid": "AllowSNSSubscription", "Effect": "Allow", "Action": [ "sns:Subscribe", "sns:ConfirmSubscription" ], "Resource": "arn:aws:sns:*:*:your-cloudtrail-topic" }, { "Sid": "AllowCloudTrailDescribe", "Effect": "Allow", "Action": [ "cloudtrail:DescribeTrails", "cloudtrail:GetTrailStatus", "cloudtrail:LookupEvents" ], "Resource": "*" } ]}信頼ポリシー
ロールの信頼ポリシーは以下のようになります:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/KYRACloudSensor" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "your-external-id-from-console" } } } ]}AWS CLIを使用
# ポリシーの作成aws iam create-policy \ --policy-name KYRAMDRCloudTrailReadOnly \ --policy-document file://kyra-policy.json
# 信頼ポリシーでロールを作成aws iam create-role \ --role-name KYRAMDRRole \ --assume-role-policy-document file://kyra-trust-policy.json
# ポリシーのアタッチaws iam attach-role-policy \ --role-name KYRAMDRRole \ --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/KYRAMDRCloudTrailReadOnlyステップ2:CloudTrailの設定
マルチリージョンCloudTrailトレイルがまだない場合は作成します:
トレイルの作成(必要な場合)
aws cloudtrail create-trail \ --name kyra-mdr-trail \ --s3-bucket-name your-cloudtrail-bucket \ --is-multi-region-trail \ --enable-log-file-validation \ --sns-topic-name your-cloudtrail-topic
aws cloudtrail start-logging --name kyra-mdr-trailデータイベントの有効化(オプションですが推奨)
データイベントはS3オブジェクトレベルおよびLambda呼び出しアクティビティの可視性を提供します:
aws cloudtrail put-event-selectors \ --trail-name kyra-mdr-trail \ --event-selectors '[ { "ReadWriteType": "All", "IncludeManagementEvents": true, "DataResources": [ { "Type": "AWS::S3::Object", "Values": ["arn:aws:s3"] }, { "Type": "AWS::Lambda::Function", "Values": ["arn:aws:lambda"] } ] } ]'注意: データイベントは大量のボリュームを生成し、追加のCloudTrail費用が発生する可能性があります。まず管理イベントのみで開始し、必要に応じてデータイベントを追加してください。
ステップ3:KYRAコンソールで接続
- KYRA MDRコンソールを開きます
- Settings > Integrations > Add Integration に移動します
- AWS CloudTrail を選択します
- 以下を入力します:
- AWS Account ID: 12桁のAWSアカウントID
- IAM Role ARN:
arn:aws:iam::YOUR_ACCOUNT_ID:role/KYRAMDRRole - S3 Bucket Name: CloudTrail S3バケット名
- S3 Region: バケットのリージョン(例:ソウルの場合
ap-northeast-2) - SNS Topic ARN(オプション): リアルタイム通知用
- Test Connection をクリック — KYRAがロールの引き受けとバケットのリスト表示を試みます
- Save をクリック
ステップ4:イベントの確認
連携ステータスの確認
コンソールで Settings > Integrations に移動します。AWS CloudTrail連携は以下を表示するはずです:
- Status: Connected
- Last Sync: 直近5分以内
- Events Processed: 増加するカウント
AWSイベントの検索
- Log Search に移動します
source_type:aws-cloudtrailでフィルタリングします- 以下のようなイベントが表示されるはずです:
ConsoleLogin— AWSコンソールサインインAssumeRole— ロール引き受けイベントRunInstances— EC2インスタンスの起動CreateBucket— S3バケットの作成
テストイベントの生成
# テストセキュリティグループの作成と削除(CloudTrailイベントを生成)SG_ID=$(aws ec2 create-security-group --group-name kyra-test --description "KYRA test" --output text --query 'GroupId')aws ec2 delete-security-group --group-id $SG_ID5〜15分以内(CloudTrailの配信遅延)に、KYRA MDRで CreateSecurityGroup と DeleteSecurityGroup イベントが表示されるはずです。
必要な権限のまとめ
| 権限 | 目的 |
|---|---|
s3:GetObject | S3からCloudTrailログファイルを読み取る |
s3:ListBucket | 取り込み用の新しいログファイルをリスト |
sns:Subscribe | リアルタイムCloudTrail通知をサブスクライブ |
cloudtrail:DescribeTrails | トレイル設定の検出 |
cloudtrail:GetTrailStatus | トレイルヘルスの確認 |
cloudtrail:LookupEvents | 初期同期のための最新イベントのクエリ |
KYRA MDRは読み取り専用アクセスを使用します。AWSリソースやCloudTrail設定を変更することはありません。
検出ルール
KYRA MDRにはAWS CloudTrail用の組み込み検出ルールが含まれています:
| 検出 | イベント名 | MITRE ATT&CK | 説明 |
|---|---|---|---|
| rootアカウント使用 | ConsoleLogin(root) | T1078.004 | rootアカウントのサインイン検出 |
| IAMユーザー作成 | CreateUser | T1136.003 | 新しいIAMユーザーの作成 |
| MFA無効化 | DeactivateMFADevice | T1556 | アカウントからMFAが削除 |
| セキュリティグループ公開 | AuthorizeSecurityGroupIngress | T1562.007 | 0.0.0.0/0インバウンドルールの追加 |
| CloudTrail無効化 | StopLogging | T1562.008 | トレイルログの停止 |
| S3バケット公開 | PutBucketPolicy | T1530 | バケットポリシーがパブリックアクセスを許可 |
| 異常なリージョン | 全般 | T1535 | 通常でないAWSリージョンからのAPI呼び出し |
| アクセスキー漏洩 | 通常でないIPからのGetCallerIdentity | T1528 | 資格情報漏洩の可能性 |
マルチアカウント設定
複数のアカウントを持つAWS Organizationsの場合、組織トレイルを使用した一元管理CloudTrailを使用できます:
- 管理アカウントで組織トレイルを有効化
- すべてのメンバーアカウントのイベントが単一のS3バケットに流入
- 管理アカウントにのみKYRA IAMロールを作成
- KYRA MDRがすべてのアカウントからのイベントを取り込みます
aws cloudtrail create-trail \ --name kyra-org-trail \ --s3-bucket-name your-org-cloudtrail-bucket \ --is-organization-trail \ --is-multi-region-trailトラブルシューティング
接続テストが失敗する
- ロールARNは正しい? アカウントIDとロール名を再確認
- External IDが一致? 信頼ポリシーのExternal IDがコンソールと一致することを確認
- 信頼ポリシー? プリンシパルはKYRAのAWSアカウントでなければなりません
- S3バケットは存在する? バケット名とリージョンを確認
イベントが表示されない
- CloudTrailはアクティブ?
aws cloudtrail get-trail-status --name your-trailを実行 —IsLogging: trueを確認 - S3権限? 正しいバケットとパスで
s3:GetObjectとs3:ListBucketを確認 - 配信遅延: CloudTrailは約5〜15分ごとにログをS3に配信 — イベントはリアルタイムではありません
- リージョンの不一致? コンソールのS3リージョンが実際のバケットリージョンと一致することを確認
高コスト
CloudTrail管理イベントは最初のトレイルについては無料です。データイベントは100,000イベントごとに費用が発生します。コストを削減するには:
- 管理イベントのみで開始(デフォルト)
- イベントセレクターを使用して特定のS3バケットまたはLambda関数をフィルタリング
- 書き込みイベントで十分な場合は読み取り専用データイベントを除外