3

Ich möchte ein CodeBuild-Projekt starten, um meine Integrationstests auszuführen. Meine Anwendung verwendet den AWS ElasticSearch-Dienst als Index für den Hibernate-Suchspeicher.AWS Elastisearch-Zugriffsrichtlinie für CodeBuild-Integrationstests mit Hibernate-Suche mithilfe eines ElasticSearch-Indexspeichers

Ich habe meiner ES-Domäne eine Richtlinie hinzugefügt, die privaten ec2-Instanzen den Zugriff auf ES über ein NAT-Gateway ermöglicht. Leider kann ich die richtige Richtlinie nicht finden, um CodeBuild Zugriff ES zu erlauben. Wenn ich CodeBuild-Projekt ausführe, erhalte ich einen Fehler 403, wenn Hibernate versucht, ein Indexexistenz zu überprüfen.

Caused by: org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed. 
Request: 
Operation: IndicesExists 
URI:com.mycompany.myproject.model.tenant 
Data: 
null 
Response: 
========= 
Status: 403 
Error message: 403 Forbidden 
Cluster name: null 
Cluster status: null 

Ich habe versucht, konfiguriert ES Access Policy offenen Zugriff auf die Domäne zu ermöglichen, prüft dann läuft ok ("AWS": "*").

Dies ist die ES-Richtlinie

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::AWS_ACCOUNT_ID:role/CodeBuildRole-XXXXXXXX" 
     }, 
     "Action": "es:*", 
     "Resource": "arn:aws:es:eu-west-1:AWS_ACOUNT_ID:domain/elastic-search-domain/*"  
    }, 
    { 
    "Effect": "Allow", 
    "Principal": { 
     "AWS": "*" 
    }, 
    "Action": "es:*", 
    "Resource": "arn:aws:es:eu-west-1:AWS_ACCOUNT_ID:domain/elastic-search-domain/*", 
    "Condition": { 
     "IpAddress": { 
     "aws:SourceIp": "NAT_GW_IP" 
     } 
    } 
    } 
    ] 
} 

Als Haupt habe ich auch die folgende versucht:

wird

"arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/CodeBuildRole-XXXXXXXXX/*" "arn:aws:iam::AWS_ACCOUNT_ID:role/CodeBuildRole-XXXXXXXXX" "arn:aws:iam::AWS_ACCOUNT_ID:root" "arn:aws:iam::AWS_ACCOUNT_ID:user/MI_USER_ADMIN"

Jede Hilfe sehr geschätzt.

Danke

+0

Wir haben in der Hibernate-Suche einige gute Fortschritte gemacht: http://in.relation.to/2017/06/13/hibernate-search-5-8-0-Beta3/ – Sanne

Antwort

1

Möglicherweise müssen Sie Ihre ES-Anfragen unterschreiben.

Ich bin nicht mit CodeBuild vertraut, aber die Regel ist im Allgemeinen: Wenn Sie IAM-Rollen für den Zugriff auf Elasticsearch verwenden, müssen Ihre Anforderungen mit dieser IAM-Rolle signiert sein.

z. Für Python würden Sie ein Tool wie folgt verwenden: https://github.com/DavidMuller/aws-requests-auth

Weitere Informationen: http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html

+0

Vielen Dank. Ich werde es versuchen. – bertie

2

würde Ich mag die VME Antwort erweitern um genauer zu sein.

Um mit einer Rolle auf ElasticSearch zuzugreifen, muss die Anfrage sicher signiert sein.

Diese Lösung ist im Allgemeinen korrekt, aber in meinem speziellen Fall ist dies nicht geeignet, da die Anforderungen an AWS ES von Hibernate Search ElasticSearch generiert werden. (Könnten wir eine andere Lösung mit AOP finden?)

Ich endlich eine Umgehung für dieses Problem gefunden. Auf CodeBuild-Buildspezifikation habe ich die folgenden Schritte hinzugefügt:

  • Konfigurieren Sie AWS-CLI mithilfe eines Benutzers mit einer Richtlinie, die es ihm ermöglicht, ES-Domäne zu lesen und zu aktualisieren.
  • lesen und speichern Sie die aktuelle ES Domain Access Policy
  • Ich erhalte die CodeBuild EC2 IP
  • Update-ES-Domäne-Richtlinie Zugang Zugang zu ermöglichen, von CodeBuild IP
  • Warten Sie, bis die Änderungen gilt (15 min ca.)
  • Führen Sie den Test
  • Wiederherstellen der vorherigen Konfiguration

ich diese Lösung nicht sehr gerne, weil die Domain Policy-Updates zu nimmt lon G. Dieser Schritt ist Teil einer CodePipeline für Continuous Integration und die Ausführung sollte nicht länger als 15 oder 20 Minuten dauern.

Irgendwelche Ideen, wie man das verbessert?

+0

Ja: Wenn Sie uns aus dem Hibernate Search-Team helfen, eine geeignete Schnittstelle zu definieren, würden wir uns sehr freuen, eine Form der Erweiterung "Request Signer" zuzulassen. Fühlen Sie sich frei, an dem Brainstorming teilzunehmen, indem Sie auf https://hibernate.atlassian.net/browse/HSEARCH-2714 kommentieren – Sanne

Verwandte Themen