AWS Control Tower ログを収集する
このドキュメントでは、AWS Control Tower ログを Google Security Operations に取り込む方法について説明します。AWS Control Tower を使用すると、複数の AWS アカウントにわたってガバナンス、コンプライアンス、セキュリティのモニタリングが可能になります。この統合により、AWS Control Tower のログを分析して、可視性とセキュリティ対策を強化できます。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- AWS への特権アクセス
Amazon S3 バケットを構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- 後で使用するために、バケットの名前とリージョンを保存します。
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成した [ユーザー] を選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] として [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで、[権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーと CloudWatchLogsFullAccess ポリシーを検索して選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
AWS Control Tower で CloudTrail を構成する
- AWS Management Console にログインします。
- AWS Control Tower に移動します。
- 検索バーに「CloudTrail」と入力し、サービスリストから選択します。
[トレイルを作成] をクリックして、新しいトレイルを作成します。
[Trail Settings] を指定します。
- Trail name: トレイルにわかりやすい名前を指定します(例: ControlTowerTrail)。
- すべてのリージョンにトレイルを適用する: [すべてのリージョンにトレイルを適用する] で [はい] を選択していることを確認します。
- 管理イベント: 読み取り/書き込みイベントが [すべて] に設定されていることを確認します。
- 省略可: データイベント: S3 データイベントと Lambda データイベントを有効にして、詳細なデータ アクティビティをキャプチャします。
- 省略可: ログファイルの検証: これを有効にすると、ログファイルが保存された後に改ざんされないようにすることができます。
[イベント] セレクタで、[管理イベント] と [データイベント] をログに記録するように選択します。
CloudTrail の構成方法
- AWS IAM コンソールに移動します。
- [ロール] をクリックします。
- CloudTrail が使用するロール
AWSServiceRoleForCloudTrail
を検索します(このロールは CloudTrail の設定時に自動的に作成されます)。 - ロールの [権限] タブで、[ポリシーをアタッチ] をクリックします。
CloudTrailS3DeliveryPolicy
を検索します。CloudTrailS3DeliveryPolicy
ポリシーの横にあるチェックボックスをオンにします。- [ポリシーをアタッチ] をクリックします。
- AWS CloudTrail コンソールに移動します。
- [Storage location] セクションで、ログファイルの宛先として [S3] を選択します。
- 以前に作成した S3 バケットを選択します。
- 選択したバケットにログを書き込む権限を CloudTrail に付与するよう求められたら、[許可] をクリックします。
- 設定を確認し、[作成](既存のトレイルを編集する場合は [変更を保存])をクリックします。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
このプロダクト ファミリー内で異なるログタイプに対して複数のフィードを構成するには、プロダクトごとにフィードを構成するをご覧ください。
1 つのフィードを設定する手順は次のとおりです。
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: AWS Control Tower Logs)。
- [ソースタイプ] として [Amazon S3] を選択します。
- [ログタイプ] として [AWS Control Tower] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3://your-log-bucket-name/
your-log-bucket-name
は、実際の S3 バケットの名前に置き換えます。
- URI is a: バケット構造に応じて、[ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。
シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3://your-log-bucket-name/
your-log-bucket-name
は、実際の S3 バケットの名前に置き換えます。
- URI is a: バケット構造に応じて、[ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
- Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。
シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- Asset Namespace: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
awsAccountId | target.user.group_identifiers | イベントに関連付けられた AWS アカウント ID。 |
digestPublicKeyFingerprint | target.file.sha1 | ダイジェストの署名に使用される公開鍵のフィンガープリント。 |
digestPublicKeyFingerprint | target.resource.attribute.labels.value | ダイジェストの署名に使用される公開鍵のフィンガープリント。 |
digestS3Bucket | target.resource.name | ダイジェストが保存される S3 バケットの名前。 |
digestS3Object | target.file.full_path | S3 バケット内のダイジェスト オブジェクトのパス。 |
digestSignatureAlgorithm | network.tls.cipher | ダイジェストの署名に使用されるアルゴリズム。 |
digestSignatureAlgorithm | target.resource.attribute.labels.value | ダイジェストの署名に使用されるアルゴリズム。 |
digestStartTime | metadata.event_timestamp | ダイジェスト期間の開始時刻。eventTime が利用できない場合、イベント時間として使用されます。 |
eventCategory | security_result.category_details | イベントのカテゴリ。 |
eventID | metadata.product_log_id | イベントの一意の ID。 |
eventName | metadata.product_event_type | イベントの名前。 |
eventName | security_result.summary | セキュリティ結果の概要の生成に使用されるイベントの名前。 |
eventSource | target.application | イベントのソース。 |
eventTime | metadata.event_timestamp | イベントの発生時間。 |
eventType | additional.fields.value.string_value | イベントのタイプ。 |
logFiles.hashValue | about.file.sha256 | ログファイルの SHA-256 ハッシュ。 |
logFiles.s3Bucket | about.resource.name | ログファイルが保存される S3 バケットの名前。 |
logFiles.s3Object | about.file.full_path | S3 バケット内のログファイル オブジェクトのパス。 |
previousDigestHashValue | target.file.sha256 | 前のダイジェストの SHA-256 ハッシュ。 |
recipientAccountId | target.resource.attribute.labels.value | イベントの受信者の AWS アカウント ID。 |
Records.awsRegion | principal.location.name | イベントが発生した AWS リージョン。 |
Records.errorCode | security_result.rule_id | リクエストに関連付けられたエラーコード(ある場合)。 |
Records.errorMessage | security_result.description | リクエストに関連付けられたエラー メッセージ(ある場合)。 |
Records.eventCategory | security_result.category_details | イベントのカテゴリ。 |
Records.eventID | metadata.product_log_id | イベントの一意の ID。 |
Records.eventName | metadata.product_event_type | イベントの名前。 |
Records.eventName | security_result.summary | セキュリティ結果の概要の生成に使用されるイベントの名前。 |
Records.eventSource | target.application | イベントのソース。 |
Records.eventTime | metadata.event_timestamp | イベントの発生時間。 |
Records.eventType | additional.fields.value.string_value | イベントのタイプ。 |
Records.requestID | target.resource.attribute.labels.value | リクエストの ID。 |
Records.requestParameters.groupName | target.group.group_display_name | リクエストに関連付けられているグループの名前(ある場合)。 |
Records.requestParameters.userName | src.user.userid | リクエストに関連付けられているユーザーの名前(ある場合)。 |
Records.requestParameters.userName | src.user.user_display_name | リクエストに関連付けられているユーザーの名前(ある場合)。 |
Records.responseElements.ConsoleLogin | security_action | コンソール ログイン試行の結果。 |
Records.responseElements.ConsoleLogin | security_result.summary | コンソール ログイン試行の結果。セキュリティ結果の概要の生成に使用されます。 |
Records.sourceIPAddress | principal.hostname | プリンシパルの IP アドレス。有効な IP でない場合はホスト名として使用されます。 |
Records.sourceIPAddress | principal.ip | プリンシパルの IP アドレス。 |
Records.tlsDetails.cipherSuite | network.tls.cipher | TLS 接続に使用される暗号スイート。 |
Records.tlsDetails.tlsVersion | network.tls.version | 接続に使用される TLS バージョン。 |
Records.userAgent | network.http.user_agent | リクエストのユーザー エージェント。 |
Records.userIdentity.accessKeyId | additional.fields.value.string_value | リクエストに使用されるアクセスキー ID。 |
Records.userIdentity.accountId | principal.user.group_identifiers | ユーザーの AWS アカウント ID。 |
Records.userIdentity.arn | principal.user.attribute.labels.value | ユーザーの ARN。 |
Records.userIdentity.arn | target.user.userid | ユーザーの ARN。userName が利用できない場合、userid として使用されます。 |
Records.userIdentity.principalId | principal.user.product_object_id | ユーザーのプリンシパル ID。 |
Records.userIdentity.sessionContext.attributes.mfaAuthenticated | principal.user.attribute.labels.value | リクエストに MFA が使用されたかどうか。 |
Records.userIdentity.sessionContext.sessionIssuer.userName | principal.user.userid | セッションを発行したユーザーのユーザー名。 |
Records.userIdentity.type | principal.resource.type | リクエストに使用される ID のタイプ。 |
Records.userIdentity.userName | target.user.userid | ユーザーのユーザー名。 |
- | extensions.auth.mechanism | 「REMOTE」に設定します。 |
- | metadata.event_type | eventName に基づいて「STATUS_UPDATE」、「USER_RESOURCE_ACCESS」、「USER_LOGIN」、「GENERIC_EVENT」に設定されます。 |
- | metadata.log_type | 「AWS_CONTROL_TOWER」に設定します。 |
- | metadata.product_name | 「AWS Control Tower」に設定します。 |
- | metadata.vendor_name | 「AWS」に設定します。 |
- | principal.asset.attribute.cloud.environment | 「AMAZON_WEB_SERVICES」に設定します。 |
- | security_result.action | errorCode に基づいて「ALLOW」または「BLOCK」に設定されます。 |
- | security_result.severity | 「INFORMATIONAL」に設定します。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。