Snowflake ログを収集する

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

このドキュメントでは、AWS S3 を使用して Snowflake ログを Google Security Operations に取り込む方法について説明します。パーサーは、Snowflake ログ形式を処理するために特別に設計された一連の Grok パターンと KV パターン マッチング ルールを使用して、ログ メッセージからフィールドを抽出します。次に、抽出されたフィールドを統合データモデル(UDM)にマッピングし、追加のコンテキストでデータを拡充して、さらなる分析のために表現を標準化します。

始める前に

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

  • Google SecOps インスタンス
  • AWS への特権アクセス
  • Snowflake への特権アクセス(ACCOUNTADMIN)

Amazon S3 バケットを構成する

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

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. 次のポリシー(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 IAM ロールを構成する

  1. AWS Identity and Access Management(IAM)で、[ロール] を選択します。
  2. [Create role] をクリックします。
  3. 信頼できるエンティティ タイプとして [AWS account] を選択します。
  4. [Another AWS account] を選択します。
  5. [アカウント ID] フィールドに、ご自身の AWS アカウント ID を一時的に入力します。後で、信頼関係を変更して Snowflake へのアクセス権を付与します。
  6. [外部 ID の要求] オプションを選択します。
  7. プレースホルダ ID(0000 など)を入力します。後のステップで、IAM ロールの信頼関係を変更し、ストレージ統合の外部 ID を指定します。
  8. [次へ] をクリックします。
  9. 以前に作成した IAM ポリシーを選択します。
  10. [次へ] をクリックします。
  11. 役割の名前説明を入力します。
  12. [Create role] をクリックします。
  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 Management Console に移動します。
  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 Management Console にログインします。
  2. IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
  3. 作成した [ユーザー] を選択します。
  4. [セキュリティ認証情報] タブを選択します。
  5. [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
  6. [ユースケース] として [サードパーティ サービス] を選択します。
  7. [次へ] をクリックします。
  8. 省略可: 説明タグを追加します。
  9. [アクセスキーを作成] をクリックします。
  10. [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、今後の参照に備えます。
  11. [完了] をクリックします。
  12. [権限] タブを選択します。
  13. [権限ポリシー] セクションの [権限を追加] をクリックします。
  14. [権限を追加] を選択します。
  15. [ポリシーを直接アタッチする] を選択します。
  16. AmazonS3FullAccess ポリシーを検索して選択します。
  17. [次へ] をクリックします。
  18. [権限を追加] をクリックします。

フィードを設定する

Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。

  • [SIEM 設定] > [フィード]
  • [Content Hub] > [Content Packs]

[SIEM 設定] > [フィード] でフィードを設定する

フィードを構成する手順は次のとおりです。

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  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: [ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
    • Source deletion options: 必要に応じて削除オプションを選択します。
    • アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
    • シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
  9. [次へ] をクリックします。

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

コンテンツ ハブからフィードを設定する

次のフィールドに値を指定します。

  • リージョン: Amazon S3 バケットが配置されているリージョン。

    • S3 URI: バケット URI(形式は s3://your-log-bucket-name/ にする必要があります)。次の内容を置き換えます。
      • your-log-bucket-name: バケットの名前。
    • URI is a: [ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
    • Source deletion options: 必要に応じて削除オプションを選択します。
    • アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
    • シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。

詳細オプション

  • フィード名: フィードを識別する事前入力された値。
  • ソースタイプ: Google SecOps にログを収集するために使用される方法。
  • アセットの名前空間: フィードに関連付けられた名前空間。
  • Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。

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