

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

# 從 Security Lake 中的自訂來源收集資料
<a name="custom-sources"></a>

Amazon Security Lake 可以從第三方自訂來源收集日誌和事件。Security Lake 自訂來源是一種第三方服務，可將安全日誌和事件傳送至 Amazon Security Lake。傳送資料之前，自訂來源必須將日誌和事件轉換為開放網路安全結構描述架構 (OCSF)，並符合 Security Lake 的來源需求，包括分割、parquet 檔案格式和物件大小和速率需求。

對於每個自訂來源，Security Lake 會處理下列項目：
+ 為 Amazon S3 儲存貯體中的來源提供唯一的字首。
+ 在 AWS Identity and Access Management (IAM) 中建立角色，允許自訂來源將資料寫入資料湖。此角色的許可界限是由名為 的 AWS 受管政策所設定[`AmazonSecurityLakePermissionsBoundary`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSecurityLakePermissionsBoundary)。
+ 建立 AWS Lake Formation 資料表來組織來源寫入 Security Lake 的物件。
+ 設定 AWS Glue 爬蟲程式來分割來源資料。爬蟲程式 AWS Glue Data Catalog 會將資料表填入 。它也會自動探索新的來源資料並擷取結構描述定義。

**注意**  
您最多可以在 帳戶中新增 50 個自訂日誌來源。

若要將自訂來源新增至 Security Lake，必須符合下列要求。不滿足這些要求可能會影響效能，並可能影響分析使用案例，例如查詢。
+ **目的地** – 自訂來源必須能夠將資料寫入 Security Lake，做為指派給來源的字首下方的一組 S3 物件。對於包含多個資料類別的來源，您應該將每個唯一的[開放網路安全結構描述架構 (OCSF) 事件類別](https://schema.ocsf.io/classes?extensions=)作為單獨的來源交付。Security Lake 會建立 IAM 角色，允許自訂來源寫入 S3 儲存貯體中的指定位置。
+ **格式** – 從自訂來源收集的每個 S3 物件都應格式化為 Apache Parquet 檔案。
+ **結構描述** – 相同的 OCSF 事件類別應套用至 Parquet 格式物件中的每個記錄。Security Lake 支援 Parquet 1.x 和 2.x 版。資料頁面大小應限制為 1 MB （未壓縮）。資料列群組大小不應大於 256 MB （壓縮）。對於 Parquet 物件內的壓縮，建議使用 zstandard。
+ **分割** – 物件必須依區域、 AWS 帳戶、 eventDay 進行分割。物件的字首應該是 `{{source location}}/region={{region}}/accountId={{accountID}}/eventDay={{yyyyMMdd}}/`。
+ **物件大小和速率** – 傳送至 Security Lake 的檔案應以 5 分鐘到 1 個事件日的增量傳送。如果檔案的大小大於 256MB 分鐘。物件和大小需求是最佳化 Security Lake for Query Performance。未遵循自訂來源需求可能會影響 Security Lake 效能。
+ **排序** – 在每個 Parquet 格式的物件中，記錄應按時間排序，以減少查詢資料的成本。

**注意**  
使用 [OCSF 驗證工具](https://github.com/aws-samples/amazon-security-lake-ocsf-validation)來驗證自訂來源是否與 相容`OCSF Schema`。對於自訂來源，Security Lake 支援 OCSF 1.3 版和更早版本。

## 在 Security Lake 中擷取自訂來源的分割區需求
<a name="custom-sources-best-practices"></a>

為了促進有效率的資料處理和查詢，在將自訂來源新增至 Security Lake 時，我們需要符合分割和物件和大小要求：

**分割**  
物件應依來源位置 AWS 區域、 AWS 帳戶、 和日期進行分割。  
+ 分割區資料路徑的格式為

   `/ext/{{custom-source-name}}/region={{region}}/accountId={{accountID}}/eventDay={{YYYYMMDD}}`.

  具有範例儲存貯體名稱的範例分割區為 `aws-security-data-lake-{{us-west-2-lake-uid}}/ext/{{custom-source-name}}/region={{us-west-2}}/accountId={{123456789012}}/eventDay={{20230428}}/`。

下列清單說明 S3 路徑分割區中使用的參數：
+ Security Lake 存放自訂來源資料的 Amazon S3 儲存貯體名稱。
+ `source-location` – S3 儲存貯體中自訂來源的字首。Security Lake 會將指定來源的所有 S3 物件存放在此字首下，且該字首對指定來源是唯一的。
+ `region` –上傳資料 AWS 區域 的目標。例如，您必須使用 `US East (N. Virginia)` 將資料上傳至美國東部 （維吉尼亞北部） 區域的 Security Lake 儲存貯體。
+ `accountId` –來源分割區中記錄相關的 AWS 帳戶 ID。對於與 外部帳戶相關的記錄 AWS，建議使用字串，例如 `external`或 `external_externalAccountId`。透過採用此命名對流，您可以避免在命名外部帳戶 IDs 時模棱兩可，使其不會與其他身分管理系統維護 AWS 的帳戶 IDs 或外部帳戶 IDs 衝突。
+ `eventDay` – 記錄的 UTC 時間戳記，截斷為小時，格式為八個字元字串 (`YYYYMMDD`)。如果記錄在事件時間戳記中指定不同的時區，您必須將此分割區索引鍵的時間戳記轉換為 UTC。

## 在 Security Lake 中新增自訂來源的先決條件
<a name="iam-roles-custom-sources"></a>

新增自訂來源時，Security Lake 會建立 IAM 角色，允許來源將資料寫入資料湖中的正確位置。角色的名稱遵循格式 `AmazonSecurityLake-Provider-{name of the custom source}-{region}`，其中 `region`是 AWS 區域 您要新增自訂來源的 。Security Lake 會將政策連接至允許存取資料湖的角色。如果您已使用客戶受管 AWS KMS 金鑰加密資料湖，Security Lake 也會將具有 `kms:Decrypt`和 `kms:GenerateDataKey`許可的政策連接至角色。此角色的許可界限是由名為 的 AWS 受管政策所設定[`AmazonSecurityLakePermissionsBoundary`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSecurityLakePermissionsBoundary)。

**Topics**
+ [驗證許可](#add-custom-sources-permissions)
+ [建立 IAM 角色以允許對 Security Lake 儲存貯體位置的寫入存取權 (API AWS CLI和僅限步驟）](#iam-roles-glue-crawler)

### 驗證許可
<a name="add-custom-sources-permissions"></a>

新增自訂來源之前，請確認您具有執行下列動作的許可。

若要驗證您的許可，請使用 IAM 檢閱連接至 IAM 身分的 IAM 政策。然後，將這些政策中的資訊與下列必須允許您執行的動作清單進行比較，以新增自訂來源。
+ `glue:CreateCrawler`
+ `glue:CreateDatabase`
+ `glue:CreateTable`
+ `glue:StopCrawlerSchedule`
+ `iam:GetRole`
+ `iam:PutRolePolicy`
+ `iam:DeleteRolePolicy`
+ `iam:PassRole`
+ `lakeformation:RegisterResource`
+ `lakeformation:GrantPermissions`
+ `s3:ListBucket`
+ `s3:PutObject`

這些動作可讓您從自訂來源收集日誌和事件、將其傳送至正確的 AWS Glue 資料庫和資料表，並將它們存放在 Amazon S3 中。

如果您使用 AWS KMS 金鑰進行資料湖的伺服器端加密，您也需要 `kms:CreateGrant`、 `kms:DescribeKey`和 的許可`kms:GenerateDataKey`。

**重要**  
如果您打算使用 Security Lake 主控台新增自訂來源，您可以略過下一個步驟並繼續 [在 Security Lake 中新增自訂來源](adding-custom-sources.md)。Security Lake 主控台提供簡化的入門程序，並建立所有必要的 IAM 角色，或代表您使用現有的角色。  
如果您打算使用 Security Lake API AWS CLI 或新增自訂來源，請繼續下一個步驟來建立 IAM 角色，以允許 Security Lake 儲存貯體位置的寫入存取權。

### 建立 IAM 角色以允許對 Security Lake 儲存貯體位置的寫入存取權 (API AWS CLI和僅限步驟）
<a name="iam-roles-glue-crawler"></a>

如果您使用 Security Lake API 或 AWS CLI 來新增自訂來源，請新增此 IAM 角色來授予許可 AWS Glue ，以抓取自訂來源資料並識別資料中的分割區。這些分割區是組織資料以及在 Data Catalog 中建立和更新資料表的必要分割區。

建立此 IAM 角色之後，您將需要角色的 Amazon Resource Name (ARN)，才能新增自訂來源。

您必須連接 `arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole` AWS 受管政策。

若要授予必要的許可，您還必須在角色中建立和嵌入下列內嵌政策，以允許 從自訂來源 AWS Glue 編目程式 讀取資料檔案，並在 AWS Glue Data Catalog 中建立/更新資料表。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3WriteRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
            "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*"
            ]
        }
    ]
}
```

------

連接下列信任政策， AWS 帳戶 以允許 使用 ，它可以根據外部 ID 擔任角色：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "glue.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

如果您要新增自訂來源的區域中的 S3 儲存貯體是以客戶管理的加密 AWS KMS key，您還必須將下列政策連接至角色和 KMS 金鑰政策：

```
{
    "Effect": "Allow",
    "Action": [
        "kms:GenerateDataKey"
        "kms:Decrypt"
    ],
    "Condition": {
        "StringLike": {
            "kms:EncryptionContext:aws:s3:arn": [
                "arn:aws:s3:::{{{{name of S3 bucket created by Security Lake}}}"
            ]
        }
    },
    "Resource": [
        "{{ARN of customer managed key}}"
    ]
}
```