Sonntag, 23. Dezember 2012

Sicherheit in der GAE - Teil 2

Funkionsweise der GAE

Die GAE ist ein verteiltes System zum Bereitstellen von Webanwendungen. Die GAE liegt z.Z. in drei Versionen vor: Python (wahlweise in den Versionen 2.5 oder 2.7), Java oder in der von Google selbst entwickelten Programmiersprache Go. Anwendungen werden zunächst lokal mittels einem von Google bereitgestellten Software development Kit (SDK) erstellt. Dieses simuliert die von der GAE bereitgestellten Application programming interfaces (APIs) und stellt einen lokalen Webserver bereit, auf dem die Anwendung getestet werden kann. Anschließend wird die Anwendung „deployed“, d.h. mittels eines mit dem SDK mitgelieferten Programms in die GAE hochgeladen. Hierbei werden die Anwendungsdaten in einem Container zusammengefasst, der beim Aufruf der Anwendung von einem Server der GAE geladen und die Anwendung hieraus ausgeführt wird. Für den Betrieb der Anwendung stellt Google verschiedene Dienste wie Datenbanken oder einen Dienst zum versenden von E-Mails bereit. Für die Nutzung dieser Dienste entstehen entsprechend dem Nutzungsvolumen Kosten. Allerdings stellt Google jeder Anwendung einen gewisse Menge an Ressoucen pro Tag kostenlos zur Verfügung, sodass die Appengine risikofrei getestet werden kann. Weiterhin gelten für verschiedene Dienste sogenannte Safety Quotas [1], die verhindern, dass einzelne Anwendungen einen Dienst überlasten und dieser so für andere Anwendungen der GAE vorübergehend nicht zur Verfügung steht. Diese Limits dienen ausschließlich zur Planung der benötigten Ressourcen und stellen keine technischen Beschränkungen dar, sodass diese auf Anfrage [2] erhöht werden können. Konkret sind folgende Ressourcen von Bedeutung, da diese von den meisten Webanwendungen verwendet werden.

  • Ein- und ausgehender Traffic: Für freie Anwendungen gelten Limits von je 1GB Traffic/Tag sowie maximal 56MB/Minute. Bezahlte Anwendungen haben z.Z. unbegrenzten, kostenlos eingehenden Traffic sowie ausgehenden Traffic für 0.12$/GB (je 1GB/Tag kostenlos; Maximum 10GB/Minute).
  • Datenbank: Freie Anwendungen erhalten je 50.000 Schreib-, Lese- und Small-Ops1 pro Tag. Bezahlte Anwendungen können diesen Dienst beliebig für 0,1$/100k Schreiboperationen, 0,07$/100k Leseoperationen und 0,01$ 100k Smallops nutzen. Dies sind jedoch low-level Operationen; das Einfügen eines Eintrags benötigt ggf. mehrere dieser Schreiboperationen [3].
  • URL-Fetch: Freie Anwendungen können diesen Dienst zum Abruf entfernter URLs höchstens 657.000 mal pro Tag nutzen. Weiterhin gelten für sie Beschränkungen von maximal 3.000 Zugriffen/Minute mit je maximal 22MB/Minute gesendete oder empfangene Daten. Die über diesen Dienst übertragenen Daten zählen ebenfalls zum ein- und ausgehenden Traffic der Anwendung. Für bezahlte Anwendungen gelten die gleichen Vorraussetzungen, jedoch besteht hier ein Tageslimit von 46.000.000 Zugriffen/Tag sowie maximal 32.000 Zugriffe/Minute mit je maximal 740MB übertragenen Daten pro Minute.
  • Instanzstunden: Die GAE startet Instanzen der Anwendung nach Bedarf. Sinkt der Bedarf, wird eine Instanz 15 Minuten nach dem letzten Zugriff auf sie entweder abgeschaltet oder weiterhin vorgehalten, jedoch bis zum nächsten Zugriff nicht weiter angerechnet. Freie Anwendungen erhalten 28 Instanzstunden/Tag, bezahlte Anwendungen können darüber hinaus weitere Instanzstunden für 0.08$/Stunde nutzen.

[1] Quotas and Safetylimits
https://developers.google.com/appengine/docs/quotas

[2] Quota Increase Request
http://support.google.com/code/bin/request.py?\&contact_type=AppEngineCPURequest

[3] Billing and Budgeting Resources
https://developers.google.com/appengine/docs/billing