收集 Snowflake 記錄

支援以下發布途徑:

本文件說明如何使用 AWS S3 將 Snowflake 記錄匯入 Google Security Operations。剖析器會使用一系列 Grok 和 KV 模式比對規則,從記錄訊息中擷取欄位,這些規則專門用於處理 Snowflake 記錄格式。接著,系統會將擷取的欄位對應至統一資料模型 (UDM),為資料增添額外脈絡,並將表示方式標準化,以利進一步分析。

事前準備

請確認您已具備下列必要條件:

  • Google SecOps 執行個體
  • AWS 特權存取權
  • 對 Snowflake 的特殊存取權 (ACCOUNTADMIN)

設定 Amazon S3 值區

  1. 按照這份使用者手冊的說明建立 Amazon S3 值區建立值區
  2. 請記下值區的「名稱」和「地區」,以供日後參考。

設定 Snowflake AWS 身分與存取權管理政策

  1. 登入 AWS 管理主控台。
  2. 搜尋並選取「IAM」
  3. 選取「帳戶設定」
  4. 在「端點」清單的「Security Token Service」 (STS) 下方,找出帳戶所在的 Snowflake 區域
  5. 如果 STS 狀態為「未啟用」,請將切換鈕設為「已啟用」
  6. 選取「政策」
  7. 選取「建立政策」
  8. 在「政策編輯器」中,選取「JSON」
  9. 複製並貼上以下政策 (JSON 格式),為 Snowflake 提供必要權限,以便使用單一儲存格和資料夾路徑載入或卸載資料。您也可以使用「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>/*"
                        ]
                    }
                }
            }
        ]
    }
    
  10. 點選「下一步」

  11. 輸入「政策名稱」 (例如 snowflake_access) 和選填的「說明」

  12. 按一下「建立政策」

設定 Snowflake AWS 身分與存取權管理角色

  1. 在 AWS Identity and Access Management (IAM) 中,選取「Roles」
  2. 按一下「建立角色」
  3. 選取「AWS 帳戶」做為信任實體類型。
  4. 選取「其他 AWS 帳戶」
  5. 在「帳戶 ID」欄位中,暫時輸入自己的 AWS 帳戶 ID。稍後,您將修改信任關係並授予 Snowflake 存取權。
  6. 選取「Require external ID」選項。
  7. 輸入預留位置 ID,例如 0000。在後續步驟中,您將修改 IAM 角色的信任關係,並指定儲存空間整合作業的外部 ID。
  8. 點選「下一步」
  9. 選取先前建立的 IAM 政策
  10. 點選「下一步」
  11. 輸入角色的名稱說明
  12. 按一下「建立角色」
  13. 在角色摘要頁面上,複製並儲存「Role ARN」值。

設定 Snowflake S3 整合

  1. 連線至 Snowflake 資料庫。
  2. 請替換下列欄位並執行指令:

    • <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 使用者存取值區的權限

  1. 擷取為 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= | | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+
  1. 複製並儲存下列屬性的值:
    • STORAGE_AWS_IAM_USER_ARN
    • STORAGE_AWS_EXTERNAL_ID
  2. 前往 AWS 管理主控台
  3. 依序選取「身分與存取權管理」>「角色」
  4. 選取先前建立的角色
  5. 選取「信任關係」分頁標籤。
  6. 按一下「編輯信任政策」
  7. 請使用 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>"
            }
          }
        }
      ]
    }
    
  8. 取代:

    • snowflake_user_arn 是您記錄的 STORAGE_AWS_IAM_USER_ARN 值。
    • snowflake_external_id 是您記錄的 STORAGE_AWS_EXTERNAL_ID 值。
  9. 按一下「更新政策」

在 Snowflake 中設定 JSON 檔案格式

  1. 在 Snowflake 中輸入下列指令:

    CREATE OR REPLACE FILE FORMAT my_json_format
      type = json
      COMPRESSION = 'gzip'
      null_if = ('NULL', 'null');
    

在 Snowflake 中建立 S3 階段

  1. 在 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 匯出資料

  1. 執行卸載指令,將資料從資料表匯出至階段,再匯出至 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);
    
  2. 針對 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

  1. 登入 AWS 管理主控台。
  2. 按照建立 IAM 使用者中的使用者手冊建立使用者
  3. 選取已建立的「使用者」
  4. 選取「安全性憑證」分頁標籤。
  5. 在「Access Keys」部分,按一下「Create Access Key」
  6. 將「用途」選項設為「第三方服務」
  7. 點選「下一步」
  8. 選用:新增說明標記。
  9. 按一下「建立存取金鑰」
  10. 按一下「下載 CSV 檔案」,即可儲存「存取金鑰」和「密式存取金鑰」,供日後參考。
  11. 按一下 [完成]
  12. 選取「權限」分頁標籤。
  13. 在「權限政策」部分中,按一下「新增權限」
  14. 選取「新增權限」
  15. 選取「直接附加政策」
  16. 搜尋並選取「AmazonS3FullAccess」AmazonS3FullAccess政策。
  17. 點選「下一步」
  18. 按一下「新增權限」

設定動態饋給

在 Google SecOps 平台中,有兩個不同的入口可用來設定動態消息:

  • SIEM 設定 > 動態饋給
  • 內容中心 > 內容包

依序前往「SIEM 設定」>「動態饋給」,設定動態饋給

如要設定動態饋給,請按照下列步驟操作:

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 在下一頁中,按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如「Snowflake Logs」)。
  5. 選取「Amazon S3」做為「來源類型」
  6. 選取「Snowflake」做為「記錄類型」
  7. 點選「下一步」
  8. 指定下列輸入參數的值:

    • 區域:Amazon S3 值區所在的區域。
    • S3 URI:值區 URI (格式應為:s3://your-log-bucket-name/)。 請替換下列項目:
      • your-log-bucket-name:值區名稱。
    • URI 是:選取「目錄」或「包含子目錄的目錄」
    • 來源刪除選項:根據偏好選取刪除選項。
    • 存取金鑰 ID:可存取 S3 值區的使用者存取金鑰。
    • 私密存取金鑰:具有 S3 值區存取權的使用者私密金鑰。
  9. 點選「下一步」

  10. 在「完成」畫面中查看新的動態饋給設定,然後按一下「提交」

透過內容中心設定動態饋給

指定下列欄位的值:

  • 區域:Amazon S3 值區所在的區域。

    • S3 URI:值區 URI (格式應為:s3://your-log-bucket-name/)。 請替換下列項目:
      • your-log-bucket-name:值區名稱。
    • URI 是:選取「目錄」或「包含子目錄的目錄」
    • 來源刪除選項:根據偏好選取刪除選項。
    • 存取金鑰 ID:可存取 S3 值區的使用者存取金鑰。
    • 私密存取金鑰:具有 S3 值區存取權的使用者私密金鑰。

進階選項

  • 動態饋給名稱:預先填入的值,用於識別動態饋給。
  • 來源類型:用於收集記錄並匯入 Google SecOps 的方法。
  • 素材資源命名空間:與動態饋給相關聯的命名空間。
  • 攝入標籤:套用至這個動態饋給中所有事件的標籤。

還有其他問題嗎?向社群成員和 Google SecOps 專家尋求解答。