View a markdown version of this page

使用進階事件選取器篩選資料事件 - AWS CloudTrail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用進階事件選取器篩選資料事件

本節說明如何使用進階事件選取器來建立用於記錄資料事件的精細選取器,這可協助您僅記錄感興趣的特定資料事件來控制成本。

例如:

  • 您可以在 eventName 欄位中新增篩選條件,以包含或排除特定 API 呼叫。

  • 您可以在 resources.ARN 欄位中新增篩選條件,以包含或排除特定資源的記錄。例如,如果您記錄 S3 資料事件,您可以排除追蹤的 S3 儲存貯體記錄。

  • 您可以在 readOnly 欄位上新增篩選條件,以選擇僅記錄唯讀事件或唯讀事件。

下表說明篩選資料事件的支援欄位。如需每個 CloudTrail 事件類型的支援欄位清單,請參閱 AWS CloudTrail API 參考中的 AdvancedEventSelector。

欄位 必要 有效運算子 說明

eventCategory

是

Equals

此欄位設定為 Data以記錄資料事件。

resources.type

是

Equals

此欄位用於選取您要記錄資料事件的資源類型。資料事件資料表會顯示可能的值。

readOnly

否

Equals

這是選用欄位,用於根據 readOnly值包含或排除資料事件。僅true記錄讀取事件的值。false 僅日誌寫入事件的值。如果您未新增此欄位,CloudTrail 會同時記錄讀取和寫入事件。

eventName

否

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

這是選用的封存檔,用於篩選或篩選記錄到 CloudTrail 的任何資料事件,例如 PutBucket或 GetSnapshotBlock。

如果您使用的是 AWS CLI,則可以使用逗號分隔每個值來指定多個值。

如果您使用的是 主控台,您可以為eventName要篩選的每個 建立條件,以指定多個值。

resources.ARN

否

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

這是選用欄位,用於透過提供 來排除或包含特定資源的資料事件resources.ARN。您可以搭配 使用任何運算子resources.ARN,但如果您使用 Equals或 NotEquals,該值必須完全符合您resources.type指定之 的有效資源 ARN。若要記錄特定 S3 儲存貯體中所有物件的所有資料事件,請使用 StartsWith 運算子,並僅包含儲存貯體 ARN 作為相符值。

如果您使用的是 AWS CLI,則可以使用逗號分隔每個值來指定多個值。

如果您使用的是 主控台,您可以為resources.ARN要篩選的每個 建立條件來指定多個值。

eventSource

否

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

您可以使用它來包含或排除特定事件來源。eventSource 通常是簡短形式的服務名稱,不含空格加 .amazonaws.com。例如,您可以將 eventSource Equals 設定為 ec2.amazonaws.com,以僅記錄 Amazon EC2 資料事件。

eventType

否

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

要包含或排除的 eventType。例如,您可以將此欄位設定為 NotEqualsAwsServiceEvent以排除AWS 服務 事件。

sessionCredentialFromConsole

否

Equals

NotEquals

包含或排除源自 AWS 管理主控台 工作階段的事件。此欄位可以設定為 Equals或NotEquals值為 true。

userIdentity.arn

否

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

包含或排除特定 IAM 身分所採取動作的事件。如需更多詳細資訊,請參閱 CloudTrail userIdentity 元素。

若要使用 CloudTrail 主控台記錄資料事件,請選擇資料事件選項,然後在建立或更新追蹤或事件資料存放區時選取感興趣的資源類型。資料事件資料表顯示您可以在 CloudTrail 主控台中選擇的可能資源類型。

在主控台上選擇 SNS 主題資源類型。

若要使用 記錄資料事件 AWS CLI,請設定 --advanced-event-selector 參數,將 設定為eventCategory等於 ,Data並將 resources.type值設定為您要記錄資料事件的資源類型值。資料事件資料表列出可用的資源類型。

例如,如果您想要記錄所有 Cognito Identity 集區的資料事件,請將 --advanced-event-selectors 參數設定為如下所示:

--advanced-event-selectors '[ { "Name": "Log Cognito data events on Identity pools", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Cognito::IdentityPool"] } ] } ]'

上述範例會記錄身分集區上的所有 Cognito 資料事件。您可以進一步精簡進階事件選取器,以篩選 eventName、 和 resources.ARN 欄位readOnly,以記錄感興趣的特定事件,或排除不感興趣的事件。

您可以設定進階事件選取器,根據多個欄位篩選資料事件。例如,您可以設定進階事件選取器來記錄所有 Amazon S3 PutObject和 DeleteObject API 呼叫,但排除特定 S3 儲存貯體的事件記錄,如下列範例所示。將 amzn-s3-demo-bucket 取代為您的儲存貯體名稱。

--advanced-event-selectors '[ { "Name": "Log PutObject and DeleteObject events for all but one bucket", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventName", "Equals": ["PutObject","DeleteObject"] }, { "Field": "resources.ARN", "NotStartsWith": ["arn:aws:s3:::amzn-s3-demo-bucket/"] } ] } ]'

您也可以為欄位包含多個條件。如需如何評估多個條件的資訊,請參閱 CloudTrail 如何評估欄位的多項條件。

您可以使用進階事件選取器來記錄管理和資料事件。若要記錄多個資源類型的資料事件,請為您要記錄資料事件的每個資源類型新增欄位選擇器陳述式。

注意

線索可以使用基本事件選取器或進階事件選取器,但不能同時使用兩者。如果您將進階事件選取器套用至追蹤,則會覆寫任何現有的基本事件選取器。

選取器不支援使用萬用字元,例如 * 。若要將多個值與單一條件比對,您可以使用 StartsWith、NotStartsWith、 EndsWith或 NotEndsWith來明確比對事件欄位的開頭或結尾。

CloudTrail 如何評估欄位的多項條件

對於進階事件選取器,CloudTrail 會評估欄位的多個條件,如下所示:

  • DESELECT 運算子是 AND'd 在一起的。如果符合任何 DESELECT 運算子條件,則不會交付事件。以下是進階事件選取器的有效 DESELECT 運算子:

    • NotEndsWith

    • NotEquals

    • NotStartsWith

  • SELECT 運算子是 OR'd 在一起。以下是進階事件選取器的有效 SELECT 運算子:

    • EndsWith

    • Equals

    • StartsWith

  • SELECT 和 DESELECT 運算子的組合遵循上述規則,兩個群組是 AND'd 在一起。

顯示 resources.ARN 欄位多個條件的範例

下列範例事件選取器陳述式會收集AWS::S3::Object資源類型的資料事件,並在 resources.ARN 欄位上套用多個條件。

{ "Name": "S3Select", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "resources.ARN", "Equals": [ "arn:aws:s3:::amzn-s3-demo-bucket/object1" ], "StartsWith": [ "arn:aws:s3:::amzn-s3-demo-bucket/" ], "EndsWith": [ "object3" ], "NotStartsWith": [ "arn:aws:s3:::amzn-s3-demo-bucket/deselect" ], "NotEndsWith": [ "object5" ], "NotEquals": [ "arn:aws:s3:::amzn-s3-demo-bucket/object6" ] } ] }

在上述範例中,如果符合下列條件,則會交付AWS::S3::Object資源的 Amazon S3 資料事件:

  1. 不符合這些 DESELECT 運算子條件:

    • resources.ARN 欄位 NotStartsWith 值 arn:aws:s3:::amzn-s3-demo-bucket/deselect

    • resources.ARN 欄位 NotEndsWith 值 object5

    • resources.ARN 欄位 NotEquals 值 arn:aws:s3:::amzn-s3-demo-bucket/object6

  2. 至少符合下列其中一個 SELECT 運算子條件:

    • resources.ARN 欄位 Equals 值 arn:aws:s3:::amzn-s3-demo-bucket/object1

    • resources.ARN 欄位 StartsWith 值 arn:aws:s3:::amzn-s3-demo-bucket/

    • resources.ARN 欄位 EndsWith 值 object3

根據評估邏輯:

  1. 的資料事件amzn-s3-demo-bucket/object1將交付,因為它符合Equals運算子的值,且不符合 NotStartsWith、 NotEndsWith和 NotEquals運算子的任何值。

  2. 的資料事件amzn-s3-demo-bucket/object2將交付,因為它符合StartsWith運算子的值,且不符合 NotStartsWith、 NotEndsWith和 NotEquals運算子的任何值。

  3. 的資料事件amzn-s3-demo-bucket1/object3將交付,因為它符合EndsWith運算子,且不符合 NotStartsWith、 NotEndsWith和 NotEquals運算子的任何值。

  4. 的資料事件arn:aws:s3:::amzn-s3-demo-bucket/deselectObject4將不會交付,因為它符合 的條件,NotStartsWith即使它符合StartsWith運算子的條件。

  5. 的資料事件arn:aws:s3:::amzn-s3-demo-bucket/object5將不會交付,因為它符合 的條件,NotEndsWith即使它符合StartsWith運算子的條件。

  6. 的資料事件arn:aws:s3:::amzn-s3-demo-bucket/object6將不會交付,因為它符合NotEquals運算子的條件,即使它符合StartsWith運算子的條件。

AWS CLI 用於篩選資料事件的範例

本節提供 AWS CLI 範例,示範如何篩選不同欄位的資料事件。如需其他 AWS CLI 範例,請參閱 使用進階事件選取器記錄線索的資料事件和 使用 記錄事件資料存放區的資料事件 AWS CLI。

如需如何使用 主控台記錄資料事件的資訊,請參閱 使用 記錄資料事件 AWS 管理主控台。

範例 1:篩選 eventName 欄位

在第一個範例中,線索--advanced-event-selectors的 設定為僅記錄一般用途儲存貯體中 Amazon S3 物件的 PutObject、 GetObject和 DeleteObject API 呼叫。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors '[ { "Name": "Log GetObject, PutObject and DeleteObject S3 data events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventName", "Equals": ["GetObject","PutObject","DeleteObject"] } ] } ]'

下一個範例會建立新的事件資料存放區,記錄 EBS Direct APIs 的資料事件,但排除 ListChangedBlocks API 呼叫。您可以使用 update-event-data-store命令來更新現有的事件資料存放區。

aws cloudtrail create-event-data-store \ --name "eventDataStoreName" --advanced-event-selectors '[ { "Name": "Log all EBS Direct API data events except ListChangedBlocks", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::EC2::Snapshot"] }, { "Field": "eventName", "NotEquals": ["ListChangedBlocks"] } ] } ]'

範例 2:篩選 resources.ARN和 userIdentity.arn 欄位

下列範例顯示如何在特定一般用途 Amazon S3 S3 物件的所有資料事件,但排除 bucket-scanner-role 所產生的事件userIdentity。resources.type 欄位的 S3 事件的值是 AWS::S3::Object。由於 S3 物件和 S3 儲存貯體的 ARN 值略有不同,您必須新增 的StartsWith運算子resources.ARN。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ '[ { "Name": "S3EventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "resources.ARN", "StartsWith": ["arn:partition:s3:::amzn-s3-demo-bucket/"] }, { "Field": "userIdentity.arn", "NotStartsWith": ["arn:aws:sts::123456789012:assumed-role/bucket-scanner-role"]} ] } ]'

範例 3:篩選 resources.type和 eventName 欄位以排除由 Amazon S3 DeleteObjects 事件刪除的個別物件

下列範例顯示如何在特定的一般用途 Amazon S3 儲存貯體中包含所有 Amazon S3 物件的所有資料事件,但排除 DeleteObject操作刪除的個別物件。resources.type 欄位的 S3 事件的值是 AWS::S3::Object。事件名稱的值為 DeleteObject。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ { "Name": "Exclude Events for DeleteObject operation", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "eventName", "NotEquals": [ "DeleteObject" ] } ] }, { "Name": "Exclude DeleteObject Events for individual objects deleted by DeleteObjects Operation", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "eventName", "Equals": [ "DeleteObject" ] }, { "Field": "eventType", "NotEquals": [ "AwsServiceEvent" ] } ] } ] (edited)

範例 4:篩選 eventSource 欄位以排除 Amazon S3 生命週期資料事件

下列範例示範如何記錄所有 Amazon S3 資料事件,但排除 Amazon S3 生命週期操作。這些操作包括物件過期、刪除標記建立、儲存類別轉換和分段上傳中止。Amazon S3 生命週期事件使用s3lifecycle.amazonaws.com事件來源。透過使用 NotEquals運算子篩選s3lifecycle.amazonaws.com事件來源,您可以排除這些服務起始的事件,同時繼續記錄所有使用者起始的 Amazon S3 資料事件。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ '[ { "Name": "Log S3 data events but exclude lifecycle operations", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventSource", "NotEquals": ["s3lifecycle.amazonaws.com"] } ] } ]'

範例 5:篩選 eventSource 欄位以排除 Amazon S3 身分驗證失敗資料事件

下列範例顯示如何記錄所有 Amazon S3 資料事件,但排除 Amazon S3 身分驗證失敗事件,例如 AuthenticateSignatureDoesNotMatch、 AuthenticateInvalidAccessKeyId和 AuthenticateExpiredToken。Amazon S3 身分驗證失敗事件使用s3-authn-errors.amazonaws.com事件來源。透過使用 NotEquals運算子篩選s3-authn-errors.amazonaws.com事件來源,您可以排除這些事件,同時繼續記錄所有成功的 Amazon S3 資料事件。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ '[ { "Name": "Log S3 data events but exclude authentication failure events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventSource", "NotEquals": ["s3-authn-errors.amazonaws.com"] } ] } ]'

此進階事件選取器會篩選掉 eventSource為 的所有事件s3-authn-errors.amazonaws.com。身分驗證失敗事件遵循命名模式,Authenticate後面接著錯誤代碼 (例如,、AuthenticateSignatureDoesNotMatchAuthenticateInvalidAccessKeyId、AuthenticateExpiredToken、AuthenticateInvalidToken)。如果您不需要針對 Amazon S3 資源稽核失敗的身分驗證嘗試,排除這些事件有助於降低成本。