Recoger registros de Snowflake

Disponible en:

En este documento se explica cómo ingerir registros de Snowflake en Google Security Operations mediante AWS S3. El analizador extrae campos de los mensajes de registro mediante una serie de reglas de coincidencia de patrones Grok y KV, diseñadas específicamente para gestionar el formato de registro de Snowflake. A continuación, asigna los campos extraídos al modelo de datos unificado (UDM), enriquece los datos con contexto adicional y estandariza la representación para su posterior análisis.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps
  • Acceso privilegiado a AWS
  • Acceso privilegiado a Snowflake (ACCOUNTADMIN)

Configurar un segmento de Amazon S3

  1. Crea un segmento de Amazon S3 siguiendo esta guía del usuario: Crear un segmento.
  2. Guarda el nombre y la región del segmento para consultarlos más adelante.

Configurar la política de gestión de identidades y accesos de AWS de Snowflake

  1. Inicia sesión en la consola de administración de AWS.
  2. Busca y selecciona IAM.
  3. Selecciona Configuración de la cuenta.
  4. En Security Token Service (STS) de la lista Endpoints (Endpoints), busca la región de Snowflake en la que se encuentra tu cuenta.
  5. Si el estado de STS es inactivo, activa el interruptor Activo.
  6. Selecciona Políticas.
  7. Selecciona Crear política.
  8. En Editor de políticas, selecciona JSON.
  9. Copia y pega la siguiente política (en formato JSON) para proporcionar a Snowflake los permisos necesarios para cargar o descargar datos mediante una única ruta de acceso a un bucket y una carpeta. También puedes eliminar archivos de datos con la opción de copia 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. Haz clic en Siguiente.

  11. Introduce un nombre de política (por ejemplo, snowflake_access) y una descripción (opcional).

  12. Haz clic en Crear política.

Configurar el rol de gestión de identidades y accesos de AWS de Snowflake

  1. En Gestión de Identidades y Accesos (IAM) de AWS, selecciona Roles.
  2. Haz clic en Crear rol.
  3. Seleccione Cuenta de AWS como tipo de entidad de confianza.
  4. Selecciona Otra cuenta de AWS.
  5. En el campo ID de cuenta, introduce temporalmente tu ID de cuenta de AWS. Más adelante, modificará la relación de confianza y concederá acceso a Snowflake.
  6. Selecciona la opción Requerir ID externo.
  7. Introduce un ID de marcador de posición, como 0000. En un paso posterior, modificará la relación de confianza de su rol de gestión de identidades y accesos y especificará el ID externo de su integración de almacenamiento.
  8. Haz clic en Siguiente.
  9. Selecciona la política de gestión de identidades y accesos que has creado anteriormente.
  10. Haz clic en Siguiente.
  11. Asigne un nombre y una descripción al rol.
  12. Haz clic en Crear rol.
  13. En la página de resumen del rol, copia y guarda el valor del ARN del rol.

Configurar la integración de Snowflake con S3

  1. Conéctate a la base de datos Snowflake.
  2. Sustituye los siguientes campos y ejecuta el comando:

    • <integration_name> es el nombre de la nueva integración (por ejemplo, s3_integration).
    • <iam_role> es el nombre de recurso de Amazon (ARN) del rol que has creado anteriormente.
    • <aws_s3_bucket_path> es la ruta al segmento que has creado antes (por ejemplo, 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>')
    

Configurar los permisos de usuario de gestión de identidades y accesos de AWS para acceder al contenedor

  1. Obtén el ARN del usuario de gestión de identidades y accesos que se ha creado automáticamente para tu cuenta de Snowflake y sustituye <integration_name> por el nombre real de la integración que has creado anteriormente: none DESC INTEGRATION <integration_name>;
  • Por ejemplo: 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. Copia y guarda los valores de las siguientes propiedades:
    • STORAGE_AWS_IAM_USER_ARN
    • STORAGE_AWS_EXTERNAL_ID
  2. Ve a la consola de administración de AWS.
  3. Selecciona IAM > Roles.
  4. Selecciona el rol que has creado antes.
  5. Selecciona la pestaña Relaciones de confianza.
  6. Haz clic en Editar política de confianza.
  7. Actualiza el documento de la política con los valores de salida de 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. Sustituye:

    • snowflake_user_arn es el valor de STORAGE_AWS_IAM_USER_ARN que has registrado.
    • snowflake_external_id es el valor de STORAGE_AWS_EXTERNAL_ID que has registrado.
  9. Haz clic en Actualizar política.

Configurar el formato de archivo JSON en Snowflake

  1. En Snowflake, introduce el siguiente comando:

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

Crear un área de stage de S3 en Snowflake

  1. En Snowflake, sustituye los siguientes campos e introduce el comando:

    • <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;
    

Configurar Snowflake para exportar datos

  1. Ejecuta el comando UNLOAD para exportar datos de las tablas a la fase y, a su vez, a 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. Repite el proceso de exportación para todas las tablas siguientes en las que Snowflake almacena registros y datos relacionados con auditorías:

    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 ;
    

Configurar la gestión de identidades y accesos de AWS para Google SecOps

  1. Inicia sesión en la consola de administración de AWS.
  2. Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
  3. Selecciona el Usuario creado.
  4. Selecciona la pestaña Credenciales de seguridad.
  5. En la sección Claves de acceso, haz clic en Crear clave de acceso.
  6. Selecciona Servicio de terceros en Caso práctico.
  7. Haz clic en Siguiente.
  8. Opcional: añade una etiqueta de descripción.
  9. Haz clic en Crear clave de acceso.
  10. Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para futuras consultas.
  11. Haz clic en Listo.
  12. Selecciona la pestaña Permisos.
  13. Haz clic en Añadir permisos en la sección Políticas de permisos.
  14. Selecciona Añadir permisos.
  15. Seleccione Adjuntar políticas directamente.
  16. Busca y selecciona la política AmazonS3FullAccess.
  17. Haz clic en Siguiente.
  18. Haz clic en Añadir permisos.

Configurar feeds

Para configurar un feed, sigue estos pasos:

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Añadir feed.
  3. En la página siguiente, haga clic en Configurar un solo feed.
  4. En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de Snowflake).
  5. Selecciona Amazon S3 V2 como Tipo de fuente.
  6. Seleccione Snowflake como Tipo de registro.
  7. Haz clic en Siguiente.
  8. Especifique los valores de los siguientes parámetros de entrada:

    • URI de S3: el URI del contenedor (el formato debe ser s3://your-log-bucket-name/). Sustituye lo siguiente:
      • your-log-bucket-name: el nombre del segmento.
    • Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
  9. Haz clic en Siguiente.

  10. Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.