

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

# 使用進階事件選取器篩選資料事件
<a name="filtering-data-events"></a>

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

例如：
+ 您可以在 `eventName` 欄位中新增篩選條件，以包含或排除特定 API 呼叫。
+ 您可以在 `resources.ARN` 欄位中新增篩選條件，以包含或排除特定資源的記錄。例如，如果您正在記錄 S3 資料事件，您可以排除追蹤的 S3 儲存貯體記錄。
+ 您可以在 `readOnly` 欄位上新增篩選條件，以選擇僅記錄唯讀事件或唯讀事件。

下表說明篩選資料事件的支援欄位。如需每個 CloudTrail 事件類型的支援欄位清單，請參閱 *AWS CloudTrail API 參考*中的 [AdvancedEventSelector](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedEventSelector.html)。


| 欄位 | 必要 | 有效運算子 | Description | 
| --- | --- | --- | --- | 
|  **`eventCategory` **  |  是  |  `Equals`  |  此欄位設定為 `Data`以記錄資料事件。  | 
|  **`resources.type`**  |  是  |  `Equals`  |  此欄位用於選取您要記錄資料事件的資源類型。[資料事件](logging-data-events-with-cloudtrail.md#logging-data-events)資料表會顯示可能的值。  | 
|  **`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](cloudtrail-event-reference-record-contents.md#ct-event-type)。例如，您可以將此欄位設定為 `NotEquals``AwsServiceEvent`以排除[AWS 服務 事件](non-api-aws-service-events.md)。  | 
|  **`sessionCredentialFromConsole`**  |  否  |  `Equals` `NotEquals`  |  包含或排除源自 AWS 管理主控台 工作階段的事件。此欄位可以設定為 `Equals`或`NotEquals`值為 `true`。  | 
|  **`userIdentity.arn`**  |  否  |  `EndsWith` `Equals` `NotEndsWith` `NotEquals` `NotStartsWith` `StartsWith`  |  包含或排除特定 IAM 身分所採取動作的事件。如需更多詳細資訊，請參閱 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。  | 

若要使用 CloudTrail 主控台記錄資料事件，請選擇**資料事件**選項，然後在建立或更新追蹤或事件資料存放區時選取感興趣的**資源類型**。[資料事件](logging-data-events-with-cloudtrail.md#logging-data-events)資料表顯示您可以在 CloudTrail 主控台中選擇的可能資源類型。

![\[在主控台上選擇 SNS 主題資源類型。\]](http://docs.aws.amazon.com/zh_tw/awscloudtrail/latest/userguide/images/cloudtrail-data-event-type.png)


若要使用 記錄資料事件 AWS CLI，請設定 `--advanced-event-selector` 參數來設定`eventCategory`等於 `Data`且`resources.type`值等於您要記錄資料事件的資源類型值。[資料事件](logging-data-events-with-cloudtrail.md#logging-data-events)資料表列出可用的資源類型。

例如，如果您想要記錄所有 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 如何評估欄位的多項條件](#filtering-data-events-conditions)。

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

**注意**  
線索可以使用基本事件選取器或進階事件選取器，但不能同時使用兩者。如果您將進階事件選取器套用至追蹤，則會覆寫任何現有的基本事件選取器。  
選取器不支援使用萬用字元，例如 `*` 。若要以單一條件比對多個值，您可以使用 `StartsWith`、`NotStartsWith`、 `EndsWith`或 `NotEndsWith`來明確比對事件欄位的開頭或結尾。

**Topics**
+ [CloudTrail 如何評估欄位的多項條件](#filtering-data-events-conditions)
+ [AWS CLI 用於篩選資料事件的範例](#filtering-data-events-examples)

## CloudTrail 如何評估欄位的多項條件
<a name="filtering-data-events-conditions"></a>

對於進階事件選取器，CloudTrail 會評估欄位的多個條件，如下所示：
+ DESELECT 運算子是 AND'd 在一起的。如果符合任何 DESELECT 運算子條件，則不會交付事件。以下是進階事件選取器的有效 DESELECT 運算子：
  + `NotEndsWith`
  + `NotEquals`
  + `NotStartsWith`
+ SELECT 運算子是 OR'd 在一起。以下是進階事件選取器的有效 SELECT 運算子：
  + `EndsWith`
  + `Equals`
  + `StartsWith`
+ SELECT 和 DESELECT 運算子的組合遵循上述規則，兩個群組是 AND'd 在一起。

### 顯示 `resources.ARN` 欄位多個條件的範例
<a name="filtering-data-events-conditions-ex"></a>

下列範例事件選取器陳述式會收集`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`

1. 至少符合下列其中一個 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`運算子的任何值。

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

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

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

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

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

## AWS CLI 用於篩選資料事件的範例
<a name="filtering-data-events-examples"></a>

本節提供 AWS CLI 範例，示範如何篩選不同欄位的資料事件。如需其他 AWS CLI 範例，請參閱 [使用進階事件選取器記錄線索的資料事件](logging-data-events-with-cloudtrail.md#creating-data-event-selectors-advanced)和 [使用 記錄事件資料存放區的資料事件 AWS CLI](logging-data-events-with-cloudtrail.md#logging-data-events-CLI-eds-examples)。

如需如何使用 主控台記錄資料事件的資訊，請參閱 [使用 記錄資料事件 AWS 管理主控台](logging-data-events-with-cloudtrail.md#logging-data-events-console)。

**Topics**
+ [範例 1：篩選 `eventName` 欄位](#filtering-data-events-eventname)
+ [範例 2：篩選 `resources.ARN`和 `userIdentity.arn` 欄位](#filtering-data-events-useridentityarn)
+ [範例 3：篩選 `resources.type`和 `eventName` 欄位以排除由 Amazon S3 DeleteObjects 事件刪除的個別物件](#filtering-data-events-deleteobjects)

### 範例 1：篩選 `eventName` 欄位
<a name="filtering-data-events-eventname"></a>

在第一個範例中，線索`--advanced-event-selectors`的 設定為僅記錄一般用途儲存貯體中 Amazon S3 物件的 `GetObject``PutObject`、 和 `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 呼叫。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/update-event-data-store.html](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/update-event-data-store.html)命令來更新現有的事件資料存放區。

```
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` 欄位
<a name="filtering-data-events-useridentityarn"></a>

下列範例顯示如何在特定一般用途 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 事件刪除的個別物件
<a name="filtering-data-events-deleteobjects"></a>

下列範例顯示如何在特定的一般用途 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)
```