Berechtigungen für den Zugriff auf ElasticSearch von Lambda?
Ich versuche, Elasticsearch für Datenhaltung für eine Lambda-Funktion verbunden Alexa Fähigkeiten-Kit. Die Lambda funktioniert gut ohne Elasticsearch, aber ES bietet die dringend benötigten fuzzy-matching.
Nur so, ich habe Zugriff auf die von Lambda ist von Elasticsearch ermöglicht global access, aber das ist eine wirklich schlechte Idee. Ich habe auch in der Lage gewesen, um Zugriff von meinem computer über die open-access-policy oder die IP-Adresse der Politik. Gibt es eine Möglichkeit zu tun, nur-lese-Zugriff über Lambda und Lesen-schreiben-über-IP?
Auf IAM gewährt ich meine Lambda Rolle AmazonESReadOnlyAccess. Auf der ES-Seite, die ich versuchte dieses aber es funktioniert nur für IP-Adresse:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::NUMBER:root",
"arn:aws:iam::NUMBER:role/lambda_basic_execution"
]
},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:NUMBER:domain/NAME/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:NUMBER:domain/NAME/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "MY IP"
}
}
}
]
}
Diese forum post fragt die gleiche Frage aber unbeantwortet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einzige Möglichkeit, die ich kenne, um dies zu tun, ist die Verwendung einer Ressource-based policy oder eine IAM-basierte Politik auf Ihre ES-domain. Dies würde den Zugriff zu einem bestimmten IAM-Benutzer oder einer Rolle. Jedoch, um diese Arbeit zu machen, müssen Sie auch melden Sie Ihre Wünsche, um ES mit SigV4.
Gibt es Bibliotheken, die dies tun, die Unterzeichnung für Sie, zum Beispiel diese eine erweitert die beliebte Python-requests-Bibliothek zu melden ElasticSearch-Anfragen über SigV4. Ich glaube ähnlich und es gibt Bibliotheken für andere Sprachen.
Es ist nun möglich, aus Ihrem code mit elasticsearch.js. Bevor Sie versuchen, es zu installieren, müssen Sie http-aws-es Modul.
Natürlich, bevor Sie es verwenden, konfigurieren Sie den Zugriff auf elasticsearch domain:
Müssen Sie auf die access-policy der Lambda und bieten die AWS ARN zu verbinden
http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-aws-integrations.html#es-aws-integrations-s3-lambda-es-authorizations
Für externe (außerhalb AWS) Zugang zu Ihrer Elasticsearch-cluster, die Sie wollen, um den cluster zu erstellen, die mit einem IP-basierten access-policy. So etwas wie die folgenden:
Für Ihre Lambda-Funktion erstellen Sie die Rolle, die die Lambda-Funktion übernehmen wird, mit den unten Politik snippet.
Ich denke, man kann sich leichter verdichten die beiden oben genannten politischen Aussagen in die folgenden:
Habe ich es geschafft, das Stück der oben genannten zusammen aus den folgenden Quellen:
https://aws.amazon.com/blogs/security/how-to-control-access-to-your-amazon-elasticsearch-service-domain/
Wie Sie Zugang zu Kibana von Amazon elasticsearch service?
https://forums.aws.amazon.com/thread.jspa?threadID=217149
AWS Lambda führt auf öffentlichen EC2-Instanzen. So einfach das hinzufügen einer whitelist der IP-Adressen an die Elasticsearch-access-policy wird nicht funktionieren. Eine Möglichkeit, dies zu tun wird sein, dass die Lambda-Ausführung Rolle entsprechenden Berechtigungen für den Elasticsearch-Domäne. Stellen Sie sicher, dass die Lambda-Ausführung Rolle hat Berechtigungen, um die ES-Domäne und die ES-domain-access-policy hat eine Aussage, die dies ermöglicht, Lambda Rolle ARN zu tun, die entsprechende Aktionen. Sobald dies geschehen ist alles was Sie tun müssen ist, melden Sie Ihre Anfrage per SigV4 beim Zugriff auf das LiveCycle ES-Endpunkt
Hoffe, das hilft!