AWS ElasticSearch non accetta determinati documenti CloudTrail

Oct 20 2020

Aggiorna 2

Mi è stato indicato questo progetto. Lo implementerò come mi piace la soluzione.

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


Domanda originale:

Alcuni tipi di eventi AWS CloudTrail non arrivano ad AWS ElasticSearch. Infine, mi sono limitato a un documento JSON molto semplificato che fallisce e, a questo punto, ho potuto utilizzare alcune informazioni.

Quindi, nonostante ciò, POST qualche indice-casuale-ogni-volta / _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": "*"
        }
      ]
    }
  }
}

Ricevo sempre lo stesso errore:

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

Se rimuovo questo blocco da JSON, il documento viene accettato:

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

Update1 :

Io penso che dovrei creare un modello e definire una mappatura per questo campo in modo ES non venga confuso

Risposte

1 ElasticsearchNinja Oct 21 2020 at 02:31

Il problema si verifica a causa del Principalcampo che è presente allo stesso livello ma nel primo blocco è di tipo objectcome di seguito

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

E nell'ultimo blocco, che quando hai rimosso ha funzionato, è di tipo text, il che crea il problema e il messaggio di errore è anche molto chiaro e si lamenta di tipi di unione incompatibili, textda objectdigitare.

Invece di rimuovere il blocco, puoi provare a rinominare il campo in Principal_newe funzionerà, altrimenti crea una mappatura / modello statico per tutti i tuoi campi indice in modo che questi campi non siano confusi, come hai già indovinato