AWS ElasticSearch no acepta determinados documentos de CloudTrail

Oct 20 2020

Actualización2

Me señalaron este proyecto. Lo implementaré como me gusta la solución.

https://github.com/chariotsolutions/aws-examples/tree/trunk/cloudtrail_to_elasticsearch


Pregunta original:

Ciertos tipos de eventos de AWS CloudTrail no llegan a AWS ElasticSearch. Finalmente, me limité a un documento JSON muy simplificado que falla, y en este punto, podría usar algunas ideas.

Entonces, a pesar de eso, hago POST some-random-index-every-time / _doc

POST ddd/_doc
{
  "eventVersion": "1.05",
  "eventTime": "2020-10-21T00:37:26Z",
  "eventSource": "s3.amazonaws.com",
  "eventName": "PutBucketPolicy",
  "awsRegion": "eu-central-1",
  "errorCode": "AccessDenied",
  "errorMessage": "Access Denied",
  "requestParameters": {
    "bucketPolicy": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Principal": {
            "Service": "logs.eu-central-1.amazonaws.com"
          }
        },
        {
          "Principal": {
            "Service": "logs.eu-central-1.amazonaws.com"
          }
        },
        {
          "Principal": {
            "AWS": [
              "arn:aws:iam::1234567890:root"
            ]
          }
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:iam::1234567890:root"
            ]
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::whatever/*"
        },
        {
          "Sid": "ProtectLogs",
          "Effect": "Deny",
          "Principal": "*"
        }
      ]
    }
  }
}

Recibo el mismo error todo el tiempo:

{
  "type": "illegal_argument_exception",
  "reason": "mapper [requestParameters.bucketPolicy.Statement.Principal] of different type, current_type [text], merged_type [ObjectMapper]"
}

Si elimino este bloque de JSON, el documento se acepta:

{
  "Sid": "ProtectLogs",
  "Effect": "Deny",
  "Principal": "*"
}

Actualización 1 :

Yo creo que debería crear una plantilla y definir una asignación para este campo tan ES no se mezcle

Respuestas

1 ElasticsearchNinja Oct 21 2020 at 02:31

El problema ocurre debido a un Principalcampo que está presente en el mismo nivel, pero en su primer bloque es del tipo objectsiguiente

   {
          "Principal": {
            "Service": "logs.eu-central-1.amazonaws.com"
          }
        },

Y en el último bloque, que cuando lo eliminó funcionó, es de tipo text, lo que crea el problema y el mensaje de error también es muy claro y se queja de tipos de combinación incompatibles, textpara objectescribir.

En lugar de eliminar el bloque, puede intentar cambiar el nombre del campo a Principal_newy funcionará; de lo contrario, cree un mapeo / plantilla estática para todos sus campos de índice para que estos campos no se mezclen, lo que ya adivinó