Snowflake ログを収集する

以下でサポートされています。

このドキュメントでは、Snowflake ログを Google Security Operations に取り込む方法について説明します。取り込みは、Cloud Storage V2(推奨)または Amazon S3 V2 の 2 つの方法で構成できます。どちらの方法も、Snowflake 側で同じメカニズムを使用します。スケジュール設定されたタスクがアカウント使用状況データを外部ステージにアンロードし、Google SecOps がフィードでエクスポートされたファイルを読み取ります。

Snowflake は、アカウント アクティビティを SNOWFLAKE.ACCOUNT_USAGE スキーマに保存するクラウド データ プラットフォームです。LOGIN_HISTORY ビューには、クライアント IP アドレス、認証要素、失敗理由など、認証試行が記録されます。QUERY_HISTORY ビューには、アカウントで実行されたすべてのステートメントが記録されます。これには、ユーザー、ロール、ウェアハウス、アクセスされたオブジェクトが含まれます。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • ストレージ統合(デフォルトでは ACCOUNTADMIN のみがこの権限を持つ)、データベース、ウェアハウス、ステージ、タスクを作成できるロールを持つ Snowflake へのアクセス権
  • Cloud Storage V2 の場合: Cloud Storage API が有効になっている Google Cloud プロジェクトと、バケットの作成、Identity and Access Management(IAM)ロールの作成、バケット IAM ポリシーの管理を行う権限
  • Amazon S3 V2 の場合: S3 バケット、IAM ポリシー、IAM ロール、IAM ユーザーを作成するための AWS への特権アクセス

Snowflake アカウントの使用状況データへのアクセス権を付与する

SNOWFLAKE.ACCOUNT_USAGE ビューは、アクセスが明示的に許可されるまで ACCOUNTADMIN のみが読み取ることができます。エクスポート専用のロールを作成し、このドキュメントでエクスポートするビューを対象とする 2 つのデータベース ロールを付与します。

  1. Snowflake にログインしてワークシートを開きます。
  2. エクスポート ロールを作成し、次のようにアカウント使用状況ビューへの読み取りアクセス権を付与します。

    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE IF NOT EXISTS SECOPS_EXPORTER;
    
    GRANT DATABASE ROLE SNOWFLAKE.SECURITY_VIEWER TO ROLE SECOPS_EXPORTER;
    GRANT DATABASE ROLE SNOWFLAKE.GOVERNANCE_VIEWER TO ROLE SECOPS_EXPORTER;
    
  3. エクスポートで使用するデータベース、スキーマ、ウェアハウスを作成し、次のようにロールに付与します。

    CREATE DATABASE IF NOT EXISTS SECOPS_EXPORT;
    CREATE SCHEMA IF NOT EXISTS SECOPS_EXPORT.ACTIVITY;
    
    CREATE WAREHOUSE IF NOT EXISTS SECOPS_EXPORT_WH
        WITH WAREHOUSE_SIZE = 'XSMALL'
        AUTO_SUSPEND = 60
        AUTO_RESUME = TRUE
        INITIALLY_SUSPENDED = TRUE;
    
    GRANT USAGE ON DATABASE SECOPS_EXPORT TO ROLE SECOPS_EXPORTER;
    GRANT USAGE, CREATE STAGE, CREATE TABLE, CREATE PROCEDURE, CREATE TASK, CREATE FILE FORMAT
        ON SCHEMA SECOPS_EXPORT.ACTIVITY TO ROLE SECOPS_EXPORTER;
    GRANT USAGE, OPERATE ON WAREHOUSE SECOPS_EXPORT_WH TO ROLE SECOPS_EXPORTER;
    GRANT EXECUTE TASK ON ACCOUNT TO ROLE SECOPS_EXPORTER;
    GRANT ROLE SECOPS_EXPORTER TO USER <YOUR_USER>;
    
    • <YOUR_USER> は、エクスポートを所有する Snowflake ユーザーに置き換えます。

Cloud Storage バケットを作成する

  1. Google Cloud コンソールに移動します。
  2. プロジェクトを選択するか、新しいプロジェクトを作成します。
  3. ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
  4. [バケットを作成] をクリックします。
  5. 次の構成情報を提供してください。

    設定 値
    バケットに名前を付ける グローバルに一意の名前(snowflake-activity-logs など)を入力します。
    ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。
    ロケーション 場所を選択します(例: us-central1)。
    ストレージ クラス Standard(アクセス頻度の高いログにおすすめ)
    アクセス制御 均一(推奨)
    保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする
  6. [作成] をクリックします。

Snowflake 用のカスタム Cloud Storage ロールを作成する

  1. Google Cloud コンソールで、[IAM と管理] > [ロール] に移動します。
  2. [ロールを作成] をクリックします。
  3. 次の構成情報を指定します。
    • タイトル: 「Snowflake Unload」と入力します。
    • ID: 「snowflake_unload」と入力します。
    • ロールのリリース段階: [一般提供] を選択します。
  4. [権限を追加] をクリックし、次の権限を追加します。
    • storage.buckets.get
    • storage.objects.create
    • storage.objects.delete
    • storage.objects.list
  5. [作成] をクリックします。

Cloud Storage 用の Snowflake ストレージ統合を作成する

  1. Snowflake ワークシートで、次のようにストレージ統合を作成します。

    USE ROLE ACCOUNTADMIN;
    
    CREATE STORAGE INTEGRATION SECOPS_GCS_INT
        TYPE = EXTERNAL_STAGE
        STORAGE_PROVIDER = 'GCS'
        ENABLED = TRUE
        STORAGE_ALLOWED_LOCATIONS = ('gcs://snowflake-activity-logs/snowflake/');
    
    GRANT USAGE ON INTEGRATION SECOPS_GCS_INT TO ROLE SECOPS_EXPORTER;
    
    • snowflake-activity-logs は、使用するバケット名に置き換えてください。
  2. Snowflake が統合用に作成したサービス アカウントを次のように取得します。

    DESC STORAGE INTEGRATION SECOPS_GCS_INT;
    
  3. STORAGE_GCP_SERVICE_ACCOUNT プロパティの値をコピーします。値の形式は次のとおりです。

    service-account-id@project1-123456.iam.gserviceaccount.com
    

Snowflake サービス アカウントにバケットへのアクセス権を付与する

  1. Google Cloud コンソールで、[Cloud Storage>バケット] に移動します。
  2. 作成したバケット(snowflake-activity-logs など)をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: STORAGE_GCP_SERVICE_ACCOUNT 値を貼り付けます
    • 役割を割り当てる: [Snowflake Unload] を選択します。
  6. [保存] をクリックします。

ファイル形式と外部ステージを作成する

  1. Snowflake ワークシートで、バケットに書き込むファイル形式とステージを次のように作成します。

    USE ROLE SECOPS_EXPORTER;
    USE SCHEMA SECOPS_EXPORT.ACTIVITY;
    
    CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT
        TYPE = JSON;
    
    CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE
        URL = 'gcs://snowflake-activity-logs/snowflake/'
        STORAGE_INTEGRATION = SECOPS_GCS_INT
        FILE_FORMAT = SECOPS_JSON_FORMAT;
    

エクスポート状態テーブルを作成する

エクスポートでは、各ビューで読み取った範囲が追跡されます。この透かしがないと、実行ごとにビュー全体が再エクスポートされ、同じイベントが再度取り込まれます。

  1. 次のように状態テーブルを作成してシードします。

    CREATE TABLE IF NOT EXISTS SECOPS_EXPORT_STATE (
        VIEW_NAME STRING NOT NULL,
        LAST_EXPORTED TIMESTAMP_LTZ NOT NULL,
        WINDOW_END TIMESTAMP_LTZ
    );
    
    INSERT INTO SECOPS_EXPORT_STATE (VIEW_NAME, LAST_EXPORTED)
        SELECT 'LOGIN_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP())
        UNION ALL
        SELECT 'QUERY_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP());
    

エクスポート プロシージャを作成する

  1. 両方のビューをアンロードしてウォーターマークを進めるプロシージャを次のように作成します。

    CREATE OR REPLACE PROCEDURE SECOPS_EXPORT_ACTIVITY()
    RETURNS STRING
    LANGUAGE SQL
    AS
    $$
    BEGIN
        UPDATE SECOPS_EXPORT_STATE
            SET WINDOW_END = DATEADD('hour', -3, CURRENT_TIMESTAMP());
    
        COPY INTO @SECOPS_EXPORT_STAGE/login_history/
            FROM (
                SELECT OBJECT_CONSTRUCT(
                    'application', 'snowflake',
                    '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,
                    'REPORTED_CLIENT_VERSION', REPORTED_CLIENT_VERSION,
                    'FIRST_AUTHENTICATION_FACTOR', FIRST_AUTHENTICATION_FACTOR,
                    'SECOND_AUTHENTICATION_FACTOR', SECOND_AUTHENTICATION_FACTOR,
                    'IS_SUCCESS', IS_SUCCESS,
                    'ERROR_CODE', ERROR_CODE,
                    'ERROR_MESSAGE', ERROR_MESSAGE)
                FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
                WHERE EVENT_TIMESTAMP > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY')
                    AND EVENT_TIMESTAMP <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY')
            )
            FILE_FORMAT = (TYPE = JSON)
            INCLUDE_QUERY_ID = TRUE;
    
        UPDATE SECOPS_EXPORT_STATE
            SET LAST_EXPORTED = WINDOW_END
            WHERE VIEW_NAME = 'LOGIN_HISTORY';
    
        COPY INTO @SECOPS_EXPORT_STAGE/query_history/
            FROM (
                SELECT OBJECT_CONSTRUCT(
                    'application', 'snowflake',
                    'log_type', 'query_history',
                    'START_TIME', START_TIME,
                    'END_TIME', END_TIME,
                    'QUERY_ID', QUERY_ID,
                    'QUERY_TYPE', QUERY_TYPE,
                    'EXECUTION_STATUS', EXECUTION_STATUS,
                    'ERROR_MESSAGE', ERROR_MESSAGE,
                    'USER_NAME', USER_NAME,
                    'ROLE_NAME', ROLE_NAME,
                    'WAREHOUSE_NAME', WAREHOUSE_NAME,
                    'WAREHOUSE_SIZE', WAREHOUSE_SIZE,
                    'DATABASE_NAME', DATABASE_NAME,
                    'SCHEMA_NAME', SCHEMA_NAME,
                    'SESSION_ID', SESSION_ID,
                    'BYTES_SCANNED', BYTES_SCANNED,
                    'ROWS_PRODUCED', ROWS_PRODUCED,
                    'TOTAL_ELAPSED_TIME', TOTAL_ELAPSED_TIME)
                FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
                WHERE START_TIME > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY')
                    AND START_TIME <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY')
            )
            FILE_FORMAT = (TYPE = JSON)
            INCLUDE_QUERY_ID = TRUE;
    
        UPDATE SECOPS_EXPORT_STATE
            SET LAST_EXPORTED = WINDOW_END
            WHERE VIEW_NAME = 'QUERY_HISTORY';
    
        RETURN 'Export completed';
    END;
    $$;
    

手順の各要素には理由があります。

  • ウィンドウは現在の時刻の 3 時間後に閉じます。Snowflake は LOGIN_HISTORY に最大 2 時間のレイテンシ、QUERY_HISTORY に最大 45 分のレイテンシでデータを入力するため、今すぐ終了するウィンドウでは、ビューがまだマテリアライズされていない行がスキップされます。そのため、イベントは発生から約 3 時間後に Google SecOps に到達します。遅延を短縮すると、鮮度と引き換えに取引の完全性が低下します。
  • WINDOW_END はアンロード前にテーブルに書き込まれるため、COPY INTO ステートメントで使用される値と LAST_EXPORTED に書き戻される値は同じになります。2 つ目のステートメントで現在時刻を再計算すると、その間に発生したすべての処理がスキップされます。
  • 各 LAST_EXPORTED 更新は、独自の COPY INTO ステートメントの後に実行されます。アンロードが失敗すると、手順が停止し、透かしは元の位置に残り、次の実行ではそのウィンドウがスキップされずに繰り返されます。
  • INCLUDE_QUERY_ID = TRUE はすべてのファイル名に UUID を追加します。これがないと、アンロードされたファイルの名前は data_0_0_0 になり、同じパスへのエクスポートが繰り返されると競合が発生します。Snowflake は、これをステージ内の重複データの原因として文書化しています。

エクスポート タスクのスケジュールを設定する

  1. 次のようにタスクを作成して開始します。

    CREATE OR REPLACE TASK SECOPS_EXPORT_TASK
        WAREHOUSE = SECOPS_EXPORT_WH
        SCHEDULE = 'USING CRON 0 * * * * UTC'
        AS CALL SECOPS_EXPORT_ACTIVITY();
    
    ALTER TASK SECOPS_EXPORT_TASK RESUME;
    
  2. スケジュールを待たずに設定を検証するには、タスクを 1 回実行します。

    EXECUTE TASK SECOPS_EXPORT_TASK;
    
  3. 実行結果とステージに到達したファイルは、次のように確認します。

    SELECT NAME, STATE, ERROR_MESSAGE, SCHEDULED_TIME
    FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME => 'SECOPS_EXPORT_TASK'))
    ORDER BY SCHEDULED_TIME DESC
    LIMIT 5;
    
    LIST @SECOPS_EXPORT_STAGE;
    

Google SecOps サービス アカウントを取得する

Google SecOps は、一意のサービス アカウントを使用して Cloud Storage バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Snowflake activity logs)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [ログタイプ] として [Snowflake] を選択します。
  7. [サービス アカウントを取得する] をクリックします。
  8. 一意のサービス アカウントのメールアドレスが表示されます(例:)。

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. このメールアドレスをコピーして、次のステップで使用します。

  10. [次へ] をクリックします。

  11. 次の入力パラメータの値を指定します。

    • ストレージ バケット URL: 接頭辞パスを含む Cloud Storage バケット URI を入力します。

      gs://snowflake-activity-logs/snowflake/
      
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • ファイルを削除しない: ソースからファイルを削除しません(テストに推奨)。
      • 転送されたファイルと空のディレクトリを削除する: フェッチが正常に完了した後、ソースからファイルと空のディレクトリを削除します。
    • ファイルの最大経過日数: 過去の日数以内に変更されたファイルを含めます(デフォルトは 180 日)。

    • アセットの名前空間: アセットの名前空間

    • Ingestion labels: このフィードのイベントに適用されるラベル

  12. [次へ] をクリックします。

  13. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

Google SecOps サービス アカウントに IAM 権限を付与する

Google SecOps サービス アカウントには、Cloud Storage バケットに対する 2 つのロールが必要です。ログ オブジェクトを読み取るための Storage Object Viewer と、バケットのメタデータを読み取るためのバケットレベルのロールです。

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
    • ロールを割り当てる: 次の両方を選択します。
      • Storage オブジェクト閲覧者: ログオブジェクトを読み取ります。
      • Storage レガシー バケット読み取り: バケット メタデータを読み取ります。[転送されたファイルと空のディレクトリを削除する] 削除オプションを選択した場合は、代わりに [Storage Legacy Bucket Writer] を選択します。これにより、削除権限も付与されます。
  6. [保存] をクリックします。

方法 2: Amazon S3 V2

ログを Amazon S3 に保存する必要がある場合は、この方法を使用します。Snowflake 側は、ストレージ統合とステージを除いて同じであるため、方法 1 のエクスポート手順とタスクは変更せずに再利用されます。

Amazon S3 バケットを構成する

  1. バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
  2. バケットの名前とリージョンを保存して、後で参照できるようにします。例: snowflake-activity-logs

Snowflake AWS IAM ポリシーを構成する

  1. AWS Management Console にログインします。
  2. [IAM] を検索して選択します。
  3. [Account settings] を選択します。
  4. [エンドポイント] リストの [Security Token Service(STS)] で、アカウントが配置されている Snowflake リージョンを見つけます。
  5. STS のステータスが非アクティブの場合は、切り替えを [有効] に移動します。
  6. [ポリシー] を選択します。
  7. [ポリシーを作成] を選択します。
  8. [ポリシー エディタ] で [JSON] を選択します。
  9. 次のポリシーをコピーして貼り付けます。このポリシーは、1 つのバケットとフォルダパスにデータをアンロードするために必要な権限を Snowflake に付与します。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:GetObjectVersion",
                    "s3:DeleteObject",
                    "s3:DeleteObjectVersion"
                ],
                "Resource": "arn:aws:s3:::snowflake-activity-logs/snowflake/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": "arn:aws:s3:::snowflake-activity-logs",
                "Condition": {
                    "StringLike": {
                        "s3:prefix": [
                            "snowflake/*"
                        ]
                    }
                }
            }
        ]
    }
    
  10. [次へ] をクリックします。

  11. [ポリシー名](snowflake_access など)と、必要に応じて説明を入力します。

  12. [ポリシーを作成] をクリックします。

Snowflake AWS IAM ロールを構成する

  1. [IAM] で、[ロール] を選択します。
  2. [ロールを作成] をクリックします。
  3. 信頼できるエンティティ タイプとして [AWS account] を選択します。
  4. [Another AWS account] を選択します。
  5. [アカウント ID] フィールドに、ご自身の AWS アカウント ID を一時的に入力します。信頼関係は後で変更し、Snowflake へのアクセス権を付与します。
  6. [外部 ID の要求] オプションを選択します。
  7. プレースホルダ ID(0000 など)を入力します。後で、ストレージ統合の外部 ID に置き換えます。
  8. [次へ] をクリックします。
  9. 前に作成した IAM ポリシーを選択します。
  10. [次へ] をクリックします。
  11. ロールの名前と説明を入力します。
  12. [ロールを作成] をクリックします。
  13. ロールの概要ページで、[ロール ARN] の値をコピーして保存します。

Amazon S3 用の Snowflake ストレージ統合を作成する

  1. Snowflake ワークシートで、次のようにストレージ統合を作成します。

    USE ROLE ACCOUNTADMIN;
    
    CREATE STORAGE INTEGRATION SECOPS_S3_INT
        TYPE = EXTERNAL_STAGE
        STORAGE_PROVIDER = 'S3'
        ENABLED = TRUE
        STORAGE_AWS_ROLE_ARN = '<IAM_ROLE_ARN>'
        STORAGE_ALLOWED_LOCATIONS = ('s3://snowflake-activity-logs/snowflake/');
    
    GRANT USAGE ON INTEGRATION SECOPS_S3_INT TO ROLE SECOPS_EXPORTER;
    
    • <IAM_ROLE_ARN> は、保存したロール ARN に置き換えます。
  2. Snowflake が統合用に作成した AWS ID を次のように取得します。

    DESC INTEGRATION SECOPS_S3_INT;
    
  3. 次のプロパティの値をコピーして保存します。

    • STORAGE_AWS_IAM_USER_ARN
    • STORAGE_AWS_EXTERNAL_ID

Snowflake IAM ユーザーにバケットへのアクセス権を付与する

  1. AWS Management Console に移動します。
  2. [IAM] > [ロール] を選択します。
  3. 前に作成したロールを選択します。
  4. [信頼関係] タブを選択します。
  5. [信頼ポリシーを編集] をクリックします。
  6. DESC INTEGRATION の出力値を使用して、ポリシー ドキュメントを次のように更新します。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "<STORAGE_AWS_IAM_USER_ARN>"
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "sts:ExternalId": "<STORAGE_AWS_EXTERNAL_ID>"
                    }
                }
            }
        ]
    }
    
  7. [ポリシーの更新] をクリックします。

ファイル形式、ステージ、エクスポート オブジェクトを作成する

  1. Snowflake ワークシートで、バケットに書き込むファイル形式とステージを次のように作成します。

    USE ROLE SECOPS_EXPORTER;
    USE SCHEMA SECOPS_EXPORT.ACTIVITY;
    
    CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT
        TYPE = JSON;
    
    CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE
        URL = 's3://snowflake-activity-logs/snowflake/'
        STORAGE_INTEGRATION = SECOPS_S3_INT
        FILE_FORMAT = SECOPS_JSON_FORMAT;
    
  2. メソッド 1 の説明に沿って、エクスポート状態テーブルを作成する、エクスポート プロシージャを作成する、エクスポート タスクをスケジュールするの各セクションで説明されているとおりに、状態テーブル、プロシージャ、タスクを作成します。ステートメントはステージを名前で参照するため、変更は必要ありません。

Google SecOps 用に AWS IAM を構成する

  1. AWS Management Console にログインします。
  2. IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
  3. 作成したユーザーを選択します。
  4. [セキュリティ認証情報] タブを選択します。
  5. [アクセスキー] セクションで、[アクセスキーを作成] をクリックします。
  6. [ユースケース] で [サードパーティ サービス] を選択します。
  7. [次へ] をクリックします。
  8. 省略可: 説明タグを追加します。
  9. [アクセスキーを作成] をクリックします。
  10. [.csv ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、今後の参照に備えます。
  11. [完了] をクリックします。
  12. [権限] タブを選択します。
  13. [権限ポリシー] セクションで、[権限を追加] をクリックします。
  14. [権限を追加] を選択します。
  15. [ポリシーを直接アタッチする] を選択します。
  16. AmazonS3FullAccess ポリシーを検索して選択します。
  17. [次へ] をクリックします。
  18. [権限を追加] をクリックします。

Snowflake のログを取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで、[単一のフィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Snowflake activity logs)。
  5. [ソースタイプ] として [Amazon S3 V2] を選択します。
  6. [ログタイプ] として [Snowflake] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を次のように指定します。

    • S3 URI: s3://snowflake-activity-logs/snowflake/
    • Source deletion option: 必要に応じて削除オプションを選択します。
    • ファイルの最大経過日数: 過去の日数以内に変更されたファイルを含めます(デフォルトは 180 日)。
    • アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー
    • シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー
    • アセットの名前空間: アセットの名前空間
    • Ingestion labels: このフィードのイベントに適用されるラベル
  9. [次へ] をクリックします。

  10. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
column4_label additional.fields 統合済み
column7_label additional.fields 統合済み
first_authentication_factor_label additional.fields 統合済み
host_list additional.fields 統合済み
query_text_label additional.fields 統合済み
query_type_label additional.fields 統合済み
roleIds_list additional.fields 統合済み
roleNames_list additional.fields 統合済み
rolecount_label additional.fields 統合済み
user_count_label additional.fields 統合済み
has_principal extensions.auth.type マッピング: true → AUTHTYPE_UNSPECIFIED
START_TIME metadata.event_timestamp yyyy-MM-dd HH:mm:ss.SSS Z として解析済み
column2 metadata.event_timestamp yyyy-MM-dd HH:mm:ss.SSS Z として解析済み
column20 metadata.event_timestamp yyyy-MM-dd HH:mm:ss.SSS Z として解析済み
ts metadata.event_timestamp ISO8601 として解析済み
event_type metadata.event_type 直接マッピングされます。
has_principal metadata.event_type マッピング: true → NETWORK_CONNECTION、true → STATUS_UPDATE、true → USER_LOGIN
has_principal_user metadata.event_type マッピング: true → USER_UNCATEGORIZED
column10 metadata.product_event_type 直接マッピングされます。
QUERY_ID metadata.product_log_id 直接マッピングされます。
column1 metadata.product_log_id 直接マッピングされます。
column6 metadata.product_version 直接マッピングされます。
SESSION_ID network.http.session_id 直接マッピングされます。
RECEIVED_BYTES network.received_bytes 名前変更済み/マッピング済み
BYTES_SENT_OVER_THE_NETWORK network.sent_bytes 名前変更済み/マッピング済み
SENT_BYTES network.sent_bytes 名前変更済み/マッピング済み
APPLICATION principal.application 直接マッピングされます。
data.user_name principal.asset.hostname 直接マッピングされます。
CLIENT_IP principal.asset.ip 統合済み
IP principal.asset.ip 統合済み
column5 principal.asset.ip 統合済み
SOURCE_REGION principal.cloud.availability_zone 直接マッピングされます。
SOURCE_CLOUD principal.cloud.environment マッピング: (?i)azure → MICROSOFT_AZURE、(?i)amazon → AMAZON_WEB_SERVICES、(?i)google ...
data.user_name principal.hostname 直接マッピングされます。
CLIENT_IP principal.ip 統合済み
IP principal.ip 統合済み
column5 principal.ip 統合済み
OS principal.platform マッピング: (?i)Linux → LINUX、(?i)windows → WINDOWS、(?i)mac/ios → MAC
OS_VERSION principal.platform_version 直接マッピングされます。
SOURCE_CLOUD_label principal.resource.attribute.labels 統合済み
roles principal.user.attribute.roles 統合済み
data.role_name principal.user.role_name 直接マッピングされます。
column9 principal.user.user_display_name 直接マッピングされます。
USER_NAME principal.user.userid 直接マッピングされます。
column10 principal.user.userid 直接マッピングされます。
column3 principal.user.userid 直接マッピングされます。
EXECUTION_STATUS security_result.action マッピング: (?i)success → action、(?i)fail → security_result_action_block
STATUS security_result.action マッピング: (?i)success → action、(?i)fail → action
action security_result.action 統合済み
security_result_action_block security_result.action 統合済み
OCSP_MODE security_result.action_details 直接マッピングされます。
column11 security_result.action_details 直接マッピングされます。
column3 security_result.action_details 直接マッピングされます。
BYTES_DELETED_label security_result.detection_fields 統合済み
BYTES_READ_FROM_RESULT_label security_result.detection_fields 統合済み
BYTES_SCANNED_label security_result.detection_fields 統合済み
BYTES_SPILLED_TO_LOCAL_STORAGE_label security_result.detection_fields 統合済み
BYTES_SPILLED_TO_REMOTE_STORAGE_label security_result.detection_fields 統合済み
BYTES_WRITTEN_TO_RESULT_label security_result.detection_fields 統合済み
BYTES_WRITTEN_label security_result.detection_fields 統合済み
CHILD_QUERIES_WAIT_TIME_label security_result.detection_fields 統合済み
CLUSTER_NUMBER_label security_result.detection_fields 統合済み
COMPILATION_TIME_label security_result.detection_fields 統合済み
CREDITS_USED_CLOUD_SERVICES_label security_result.detection_fields 統合済み
DATABASE_ID_label security_result.detection_fields 統合済み
DATABASE_NAME_label security_result.detection_fields 統合済み
END_TIME_label security_result.detection_fields 統合済み
ERROR_MESSAGE_label security_result.detection_fields 統合済み
EXECUTION_TIME_label security_result.detection_fields 統合済み
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS_label security_result.detection_fields 統合済み
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES_label security_result.detection_fields 統合済み
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS_label security_result.detection_fields 統合済み
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES_label security_result.detection_fields 統合済み
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS_label security_result.detection_fields 統合済み
INBOUND_DATA_TRANSFER_BYTES_label security_result.detection_fields 統合済み
IS_CLIENT_GENERATED_STATEMENT_label security_result.detection_fields 統合済み
LIST_EXTERNAL_FILES_TIME_label security_result.detection_fields 統合済み
OUTBOUND_DATA_TRANSFER_BYTES_label security_result.detection_fields 統合済み
PARTITIONS_SCANNED_label security_result.detection_fields 統合済み
PARTITIONS_TOTAL_label security_result.detection_fields 統合済み
PERCENTAGE_SCANNED_FROM_CACHE_label security_result.detection_fields 統合済み
QUERY_ACCELERATION_BYTES_SCANNED_label security_result.detection_fields 統合済み
QUERY_ACCELERATION_PARTITIONS_SCANNED_label security_result.detection_fields 統合済み
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR_label security_result.detection_fields 統合済み
QUERY_HASH_VERSION_label security_result.detection_fields 統合済み
QUERY_HASH_label security_result.detection_fields 統合済み
QUERY_LOAD_PERCENT_label security_result.detection_fields 統合済み
QUERY_PARAMETERIZED_HASH_VERSION_label security_result.detection_fields 統合済み
QUERY_TAG_label security_result.detection_fields 統合済み
QUERY_TYPE_label security_result.detection_fields 統合済み
QUEUED_OVERLOAD_TIME_label security_result.detection_fields 統合済み
QUEUED_PROVISIONING_TIME_label security_result.detection_fields 統合済み
QUEUED_REPAIR_TIME_label security_result.detection_fields 統合済み
RELEASE_VERSION_label security_result.detection_fields 統合済み
ROLE_TYPE_label security_result.detection_fields 統合済み
ROWS_DELETED_label security_result.detection_fields 統合済み
ROWS_INSERTED_label security_result.detection_fields 統合済み
ROWS_PRODUCED_label security_result.detection_fields 統合済み
ROWS_UNLOADED_label security_result.detection_fields 統合済み
ROWS_UPDATED_label security_result.detection_fields 統合済み
ROWS_WRITTEN_TO_RESULT_label security_result.detection_fields 統合済み
SCHEMA_ID_label security_result.detection_fields 統合済み
SCHEMA_NAME_label security_result.detection_fields 統合済み
TOTAL_ELAPSED_TIME_label security_result.detection_fields 統合済み
TRANSACTION_BLOCKED_TIME_label security_result.detection_fields 統合済み
TRANSACTION_ID_label security_result.detection_fields 統合済み
WAREHOUSE_ID_label security_result.detection_fields 統合済み
WAREHOUSE_NAME_label security_result.detection_fields 統合済み
WAREHOUSE_SIZE_label security_result.detection_fields 統合済み
WAREHOUSE_TYPE_label security_result.detection_fields 統合済み
authentication_factor_label security_result.detection_fields 統合済み
column4_label security_result.detection_fields 統合済み
column6_label security_result.detection_fields 統合済み
column7_label security_result.detection_fields 統合済み
column8_label security_result.detection_fields 統合済み
event_id_label security_result.detection_fields 統合済み
event_type_label security_result.detection_fields 統合済み
is_success_label security_result.detection_fields 統合済み
python_compiler_label security_result.detection_fields 統合済み
python_runtime_label security_result.detection_fields 統合済み
python_version_label security_result.detection_fields 統合済み
reported_client_type_label security_result.detection_fields 統合済み
reported_client_version_label security_result.detection_fields 統合済み
tracing_label security_result.detection_fields 統合済み
EXECUTION_STATUS security_result.summary 直接マッピングされます。
STATUS security_result.summary 直接マッピングされます。
column17 security_result.summary 直接マッピングされます。
TARGET_REGION target.cloud.availability_zone 直接マッピングされます。
TARGET_CLOUD target.cloud.environment マッピング: (?i)azure → MICROSOFT_AZURE、(?i)amazon → AMAZON_WEB_SERVICES、(?i)google ...
TARGET_CLOUD_label target.resource.attribute.labels 統合済み
column2_label target.resource.attribute.labels 統合済み
column7_label target.resource.attribute.labels 統合済み
USER_NAME target.user.userid 直接マッピングされます。
column4 target.user.userid 直接マッピングされます。
なし extensions.auth.type 定数: AUTHTYPE_UNSPECIFIED
なし metadata.event_type 定数: NETWORK_CONNECTION
なし metadata.product_name 定数: SNOWFLAKE
なし metadata.vendor_name 定数: SNOWFLAKE
なし principal.cloud.environment 定数: MICROSOFT_AZURE
なし principal.platform 定数: LINUX
なし target.cloud.environment 定数: MICROSOFT_AZURE

変更ログ

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。