2016-07-28 16 views
0

Ich versuche eine Lambda-Funktion zu schreiben, die von Daten abhängt, die in einem AWS-Datenspeicher (DynamoDB/Redshift/RDS) gespeichert sind. Ich hatte gehofft, dass die Autorisierung dafür von IAM gehandhabt werden könnte - d. H. Wenn ich die Lambda-Funktion unter einer Rolle ausführte, die zum Lesen des Datenspeichers berechtigt war, brauchte ich keine Anmeldeinformationen für den Zugriff anzugeben.AWS-Rolle zum Autorisieren der Lambda-Abfrage des AWS-Datenspeichers verwenden

Jedoch erfordert this code (die Teil eines Beispiels auf "Configuring a Lambda Function to Access Resources in an Amazon VPC" ist) immer noch Benutzername und Kennwort.

Ist es möglich, eine IAM-Rolle zu verwenden, um Lambda zu autorisieren, einen AWS-Datenspeicher abzufragen?

Antwort

1

Es hängt ganz davon ab, welchen Datastore Sie verwenden möchten. Der Zugriff auf DynamoDB wird von IAM gesteuert, da es sich um einen proprietären Amazon-Dienst handelt. RDS-Datenbanken und ElastiCache verwenden alle das Autorisierungsschema der Datenbank-Engine, die Sie beim Erstellen eines RDS-Servers oder ElastiCache-Clusters gewählt haben. In jedem Fall handelt es sich dabei um eine Form von Benutzername/Passwort. Auch Aurora verwendet wie MySQL ein Login und ein Passwort, da es MySQL-kompatibel ist, und Redshift verwendet Login/Passwort wie PostgreSQL, da es PostgreSQL-kompatibel ist.

Ich empfehle Ihnen, einen Datenspeicher zu wählen, der auf Ihren tatsächlichen Datenspeicheranforderungen basiert. Wählen Sie RDS, wenn Sie eine relationale OLTP-Datenbank benötigen, Redshift, wenn Sie eine OLAP-Datenbank benötigen, ElastiCache, wenn Sie einen Redis- oder Memcached-Cache benötigen, eine NoSQL-Datenbank wie mLab/MongoDB oder verwenden Sie DynamoDB als NoSQL-Datenbank funktioniert und DynamoDB passt zu Ihren Anforderungen.

+0

OK - so klingt es wie jedes Nicht-Dynamo-System erfordert Benutzername/Passwort im Code selbst (oder eine Konfigurationsdatei zusammen mit dem Code). Interessant - ist das nicht ein Sicherheitsrisiko? Idealerweise würden wir Elasticache verwenden, da sich die fraglichen Daten langsam ändern und sofortige Konsistenz kein großes Problem darstellt. Das heißt, ich habe (anekdotisch) gehört, dass Elasticache ziemlich teuer ist, was auch ein Problem sein wird. – scubbo

+0

Wenn Sie Ihrem EC2-Server eine IAM-Rolle zuweisen, die den Zugriff auf eine Datenbank ermöglicht, dann kann jeder, der Zugriff auf den EC2-Server erhält, auch auf Ihre Datenbank zugreifen. Wie ist das sicherer als das Speichern der Datenbank-Benutzername/Passwort-Anmeldeinformationen auf dem Server? Und ich empfehle nicht, diese Zugangsdaten in Ihrem Code zu speichern, da dies in der Tat ein Sicherheitsrisiko darstellt. Wenn Sie sich darüber im Klaren sind, sollten Sie den AWS KMS-Dienst verwenden, um Ihre Anmeldeinformationen zu speichern. –

+0

Auch würde ich die anekdotischen Informationen überspringen und direkt zur Quelle gehen. https://aws.amazon.com/elasticache/pricing/ ElastiCache ist möglicherweise etwas teurer als Redis auf einem EC2-Server manuell auszuführen, aber es behandelt viele Verwaltungsaufgaben für Sie. Und es ist definitiv billiger als ein RDBMS auf RDS. Sie sollten sich auch RedisLabs ansehen, wenn der Preis ein Problem darstellt, aber ElastiCache ist im Allgemeinen sicherer, da es vollständig innerhalb Ihrer VPC ausgeführt wird. –