收集 Snowflake 記錄
本文說明如何使用 AWS S3,將 Snowflake 記錄擷取至 Google Security Operations。剖析器會使用一系列 Grok 和 KV 模式比對規則,從記錄訊息中擷取欄位,這些規則專門用於處理 Snowflake 記錄格式。接著,系統會將擷取的欄位對應至整合式資料模型 (UDM),並以額外脈絡資訊擴充資料,以及將表示法標準化,以利進一步分析。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- AWS 的特殊存取權
- Snowflake 的特殊存取權 (ACCOUNTADMIN)
設定 Amazon S3 儲存貯體
- 按照這份使用者指南建立 Amazon S3 值區:建立值區
- 儲存 bucket 的「Name」(名稱) 和「Region」(區域),以供日後參考。
設定 Snowflake AWS IAM 政策
- 登入 AWS 管理主控台。
- 搜尋並選取「IAM」IAM。
- 選取「帳戶設定」。
- 在「Endpoints」(端點) 清單的「Security Token Service」(安全權杖服務) (STS) 下方,找出帳戶所在的 Snowflake 區域。
- 如果 STS 狀態為「未啟用」,請將切換鈕移至「已啟用」。
- 選取「政策」。
- 選取「建立政策」。
- 在「政策編輯器」中,選取「JSON」。
複製並貼上下列政策 (JSON 格式),為 Snowflake 提供必要權限,以便使用單一 bucket 和資料夾路徑載入或卸載資料。您也可以使用 PURGE 複製選項清除資料檔案。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::<bucket>/<prefix>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<bucket>", "Condition": { "StringLike": { "s3:prefix": [ "<prefix>/*" ] } } } ] }
點選「下一步」。
輸入「政策名稱」 (例如 snowflake_access),並視需要輸入「說明」。
按一下「建立政策」。
設定 Snowflake AWS IAM 角色
- 在 AWS Identity and Access Management (IAM) 中,選取「Roles」。
- 按一下「建立角色」。
- 選取「AWS 帳戶」做為信任的實體類型。
- 選取「Another AWS account」(其他 AWS 帳戶)。
- 在「帳戶 ID」欄位中,暫時輸入您自己的 AWS 帳戶 ID。稍後,您會修改信任關係,並授予 Snowflake 存取權。
- 選取「需要外部 ID」選項。
- 輸入預留位置 ID,例如 0000。在後續步驟中,您將修改 IAM 角色的信任關係,並指定儲存空間整合的外部 ID。
- 點選「下一步」。
- 選取您先前建立的 IAM 政策。
- 點選「下一步」。
- 輸入角色的「名稱」和「說明」。
- 按一下「建立角色」。
- 在角色摘要頁面中,複製並儲存「Role ARN value」。
設定 Snowflake S3 整合
- 連線至 Snowflake 資料庫。
取代下列欄位並執行指令:
<integration_name>
是新整合的名稱 (例如 s3_integration)。<iam_role>
是您先前建立的角色 Amazon Resource Name (ARN)。<aws_s3_bucket_path>
是您先前建立的值區路徑 (例如s3://your-log-bucket-name/
)。
CREATE OR REPLACE STORAGE INTEGRATION <integration_name> TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'S3' ENABLED = TRUE STORAGE_AWS_ROLE_ARN = '<iam_role>' STORAGE_ALLOWED_LOCATIONS = ('<aws_s3_bucket_path>')
設定 AWS IAM 使用者存取值區的權限
- 擷取為 Snowflake 帳戶自動建立的 IAM 使用者 ARN,並將
<integration_name>
替換為先前建立的整合實際名稱:none DESC INTEGRATION <integration_name>;
- 例如:
none DESC INTEGRATION s3_integration; +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+ | property | property_type | property_value | property_default | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/ | [] | | STORAGE_AWS_IAM_USER_ARN | String | arn:aws:iam::123456789001:user/abc1-b-self1234 | | | STORAGE_AWS_ROLE_ARN | String | arn:aws:iam::001234567890:role/myrole | | | STORAGE_AWS_EXTERNAL_ID | String | MYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq= | | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+
- 複製並儲存下列屬性的值:
- STORAGE_AWS_IAM_USER_ARN
- STORAGE_AWS_EXTERNAL_ID
- 前往 AWS 管理主控台。
- 依序選取「IAM」>「角色」。
- 選取您先前建立的角色。
- 選取「信任關係」分頁標籤。
- 按一下「編輯信任政策」。
使用 DESC INTEGRATION 輸出值更新政策文件:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<snowflake_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<snowflake_external_id>" } } } ] }
取代:
snowflake_user_arn
是您記下的STORAGE_AWS_IAM_USER_ARN
值。snowflake_external_id
是您記下的STORAGE_AWS_EXTERNAL_ID
值。
按一下「更新政策」。
在 Snowflake 中設定 JSON 檔案格式
在 Snowflake 中輸入下列指令:
CREATE OR REPLACE FILE FORMAT my_json_format type = json COMPRESSION = 'gzip' null_if = ('NULL', 'null');
在 Snowflake 中建立 S3 階段
在 Snowflake 中,取代下列欄位並輸入指令:
<DB_NAME>
<DB_SCHEMA_NAME>
<AWS_S3_BUCKET_PATH>
use database '<DB_NAME>'; use schema '<DB_SCHEMA_NAME>'; CREATE OR REPLACE STAGE my_s3_stage storage_integration = s3_integration url = '<AWS_S3_BUCKET_PATH>' file_format = my_json_format;
設定 Snowflake 匯出資料
執行卸載指令,將資料從資料表匯出至暫存區,然後匯出至 AWS S3:
use database '<DB_NAME>'; use WAREHOUSE '<WAREHOUSE_NAME>'; copy into @my_s3_stage/login_history from (SELECT OBJECT_CONSTRUCT('application', 'snowflake' ,'environment', '<PUT_HERE_ENV_NAME>', 'log_type', 'login_history', 'EVENT_TIMESTAMP', EVENT_TIMESTAMP, 'EVENT_TYPE', EVENT_TYPE, 'USER_NAME', USER_NAME, 'CLIENT_IP', CLIENT_IP, 'REPORTED_CLIENT_TYPE', REPORTED_CLIENT_TYPE, 'FIRST_AUTHENTICATION_FACTOR',FIRST_AUTHENTICATION_FACTOR, 'IS_SUCCESS', IS_SUCCESS, 'ERROR_CODE', ERROR_CODE, 'ERROR_MESSAGE', ERROR_MESSAGE) from snowflake.account_usage.Login_history) FILE_FORMAT = (TYPE = JSON) ; copy into @my_s3_stage/access_history from (SELECT OBJECT_CONSTRUCT('application', 'snowflake' ,'environment', '<PUT_HERE_DB_NAME>', 'log_type', 'access_history', 'QUERY_START_TIME',QUERY_START_TIME, 'USER_NAME', USER_NAME, 'DIRECT_OBJECTS_ACCESSED',DIRECT_OBJECTS_ACCESSED, 'BASE_OBJECTS_ACCESSED', BASE_OBJECTS_ACCESSED, 'OBJECTS_MODIFIED', OBJECTS_MODIFIED) from snowflake.account_usage.Access_History ) FILE_FORMAT = (TYPE = JSON);
針對 Snowflake 儲存記錄和稽核相關資料的所有下列表格,重複執行匯出程序:
Databases ; WAREHOUSE_EVENTS_HISTORY ; WAREHOUSE_LOAD_HISTORY ; WAREHOUSE_METERING_HISTORY ; DATABASE_STORAGE_USAGE_HISTORY ; DATA_TRANSFER_HISTORY ; GRANTS_TO_ROLES ; GRANTS_TO_USERS ; METERING_DAILY_HISTORY ; PIPE_USAGE_HISTORY ; REPLICATION_USAGE_HISTORY ; STAGE_STORAGE_USAGE_HISTORY ; STORAGE_USAGE ; TASK_HISTORY ; COPY_HISTORY ;
為 Google SecOps 設定 AWS IAM
- 登入 AWS 管理主控台。
- 請按照這份使用者指南建立使用者:建立 IAM 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「Access Keys」部分中,按一下「Create Access Key」。
- 選取「第三方服務」做為「用途」。
- 點選「下一步」。
- 選用:新增說明標記。
- 按一下「建立存取金鑰」。
- 按一下「下載 CSV 檔案」,儲存「存取金鑰」和「私密存取金鑰」,以供日後參考。
- 按一下 [完成]。
- 選取「權限」分頁標籤。
- 在「權限政策」部分中,按一下「新增權限」。
- 選取「新增權限」。
- 選取「直接附加政策」。
- 搜尋並選取 AmazonS3FullAccess 政策。
- 點選「下一步」。
- 按一下「新增權限」。
設定動態饋給
在 Google SecOps 平台中,有兩種不同的進入點可設定動態饋給:
- 「SIEM 設定」>「動態消息」
- 內容中心 > 內容包
依序前往「SIEM 設定」>「動態饋給」,設定動態饋給
如要設定動態消息,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中,輸入動態饋給的名稱 (例如「Snowflake Logs」)。
- 選取「Amazon S3」做為「來源類型」。
- 選取「Snowflake」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
- 區域:Amazon S3 值區所在的區域。
- S3 URI:值區 URI (格式應為
s3://your-log-bucket-name/
)。 取代下列項目:your-log-bucket-name
:值區名稱。
- 「URI is a」:選取「Directory」或「Directory which includes subdirectories」。
- 來源刪除選項:根據偏好設定選取刪除選項。
- 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
點選「下一步」。
在「Finalize」畫面上檢查新的動態饋給設定,然後按一下「Submit」。
從內容中心設定動態饋給
為下列欄位指定值:
區域:Amazon S3 值區所在的區域。
- S3 URI:值區 URI (格式應為
s3://your-log-bucket-name/
)。 取代下列項目:your-log-bucket-name
:值區名稱。
- 「URI is a」:選取「Directory」或「Directory which includes subdirectories」。
- 來源刪除選項:根據偏好設定選取刪除選項。
- 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
- S3 URI:值區 URI (格式應為
進階選項
- 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
- 來源類型:將記錄收集到 Google SecOps 的方法。
- 資產命名空間:與動態饋給相關聯的命名空間。
- 擷取標籤:套用至這個動態饋給所有事件的標籤。
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。