收集 Snowflake 記錄

支援的國家/地區:

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

事前準備

請確認您已完成下列事前準備事項:

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

設定 Amazon S3 儲存貯體

  1. 按照這份使用者指南建立 Amazon S3 值區建立值區
  2. 儲存 bucket 的「Name」(名稱) 和「Region」(區域),以供日後參考。

設定 Snowflake AWS IAM 政策

  1. 登入 AWS 管理主控台。
  2. 搜尋並選取「IAM」IAM
  3. 選取「帳戶設定」
  4. 在「Endpoints」(端點) 清單的「Security Token Service」(安全權杖服務) (STS) 下方,找出帳戶所在的 Snowflake 區域
  5. 如果 STS 狀態為「未啟用」,請將切換鈕移至「已啟用」
  6. 選取「政策」
  7. 選取「建立政策」
  8. 在「政策編輯器」中,選取「JSON」
  9. 複製並貼上下列政策 (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>/*"
                        ]
                    }
                }
            }
        ]
    }
    
  10. 點選「下一步」

  11. 輸入「政策名稱」 (例如 snowflake_access),並視需要輸入「說明」

  12. 按一下「建立政策」

設定 Snowflake AWS IAM 角色

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

設定 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. 依序選取「IAM」>「角色」
  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 政策。
  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 is a」:選取「Directory」或「Directory which includes subdirectories」
    • 來源刪除選項:根據偏好設定選取刪除選項。
    • 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
    • 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
  9. 點選「下一步」

  10. 在「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 存取權的使用者私密金鑰。

進階選項

  • 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
  • 來源類型:將記錄收集到 Google SecOps 的方法。
  • 資產命名空間:與動態饋給相關聯的命名空間。
  • 擷取標籤:套用至這個動態饋給所有事件的標籤。

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