Estoy intentando firmar todas nuestras llamadas de AWS a ElasticSearch, sin embargo, la respuesta es siempre;
User: anonymous is not authorized to perform: es:ESHttpGet on resource:
Probé varios pares de claves y usuarios de IAM.
Las llamadas dentro de nuestro PHP se realizan utilizando el cliente oficial de elasticsearch-php y todas las solicitudes se firman utilizando el conector que se encuentra aquí .
A continuación se muestra cómo construimos el cliente de ElasticSearch y aplicamos el middleware de firma;
$credentials = new Credentials('<KEY>', '<SECRET>'); $signature = new SignatureV4('es', 'eu-central-1'); $middleware = new AwsSignatureMiddleware($credentials, $signature); $defaultHandler = ESClientBuilder::defaultHandler(); $awsHandler = $middleware($defaultHandler); $clientBuilder = ESClientBuilder::create(); $clientBuilder ->setHandler($awsHandler) ->setHosts(['<URL>']); $this->_client = $clientBuilder->build();Como referencia, la política adjunta a la instancia de elasticsearch a la que intentamos acceder es;
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<IAM_USER>" }, "Action": "es:*", "Resource": "<RESOURCE>/*" } ] }Otra información;
Es difícil responder algo específico sin una comprensión completa de lo que está sucediendo con la solicitud en particular, pero aquí hay algunas sugerencias sobre dónde comenzar la búsqueda de una solución.
Esto me ayudó cuando tuve un problema similar:
Para solucionar este problema, compruebe lo siguiente:
Verifique que esté utilizando un cliente que admita la firma de credenciales y que sus solicitudes se firmen correctamente . AWS utiliza el proceso de firma Signature Version 4 para agregar información de autenticación a las solicitudes de AWS; las solicitudes de clientes que no son compatibles con Signature Version 4 se rechazan con un error de "anónimo no autorizado". Para ver ejemplos de solicitudes bien formadas a Elasticsearch, consulte Firma de una solicitud de búsqueda de Amazon Elasticsearch Service.
Verifique que los usuarios y los recursos especificados en la política de acceso tengan el Nombre de recurso de Amazon (ARN) correcto especificado . Para obtener información general sobre los ARN, consulte Nombres de recursos de Amazon (ARN) y espacios de nombres de servicios de AWS.
Asegúrese de que las direcciones IP especificadas en la política de acceso utilicen la notación CIDR . Las políticas de acceso utilizan la notación CIDR cuando comparan su dirección IP con las direcciones IP especificadas por la política.
Verifique que las direcciones IP especificadas en su política de acceso coincidan con las direcciones IP que está utilizando para acceder a su clúster de Elasticsearch . Es posible que su IP haya cambiado desde que se configuró originalmente la política de acceso. Puede determinar la dirección IP pública de cualquier instancia en http://checkip.amazonaws.com/ .
Revise las políticas de solución de problemas de IAM para obtener información adicional sobre la solución de problemas.
Para más detalles echa un vistazo a esto ...