Social Software powered by Instant Communities
Springe direkt: zur Navigationzum Inhaltzur Sidebar

Archiv für 'aws'

Erweitertes Logging für Amazon Webservices S3

29.05.2009

Amazon bietet standardmäßig eine einfache Übersicht des angefallenen S3-Traffics über das eigene Webinterface an. Um genauer zu überprüfen wo die Daten hingehen, besteht die Möglichkeit erweiterte Logfiles anzufordern. Dies geschieht über den Amazon Simple Storage Service, sprich die S3-API. Die Logfiles werden dabei wiederum in einem Bucket auf S3 gespeichert und beinhalten, wie man es von apache-üblichen Logfiles kennt, die zugreifende IP, Zeit, etc. . S3 bietet seit einiger Zeit die Möglichkeit Buckets in Europa zu hosten. Leider haben es die Infos dazu bzw. zu den Unterschieden zu den US gehosteten Buckets bisher nicht in die Dokumentation geschafft.
Im folgenden beschreibe ich wie man das erweiterte Logging für ein Bucket, das in Europa gehostet ist aktiviert.

Zunächst benötigt man das perl-Script s3curl.pl, welches im Amazon Developer Portal heruntergeladen werden kann.
Dabei ist gleich der erste Fallstrick eingebaut. Die Authentifizierung benutzt den String des englischen Datums, also z.B. “Tue, 26 May 2009 14:47:42 GMT”. Möchte man s3curl auf einer deutschen Installation nutzen wird dies nicht funktionieren, da das Datum vom Skript als “Die, 26 Mai…” errechnet wird und folglich der Zugang verweigert wird. Schnelle Abhilfe bringt die Anpassung der entsprechenden Zeile im Skript von

my $httpDate = POSIX::strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime );

zu

my $httpDate = POSIX::strftime("Tue, 26 May "."%Y %H:%M:%S"." GMT", gmtime);

Dies ist ein schneller Hotfix und hilft für einen Tag. Sinnvoller wäre ein Vergleich des UNIX-Timestamps im s3-curl Script, das hoffentlich bald diesbezüglich angepasst wird.

Nun fehlen noch 4 Schritte um das erweiterte Logging zu aktivieren:

1. Um nicht jedesmal seine Credentials angeben zu müssen, kann man die Login-Informationen in einer Datei namens .s3curl (im Verzeichnis in dem s3curl liegt) ablegen und ihnen dabei einen Alias-Namen geben. Näheres dazu steht in der README-Anleitung zum Script. Im folgenden werden die Credentials referenziert mit “company”.

2. Wir möchten ein EU based bucket überwachen, also muss das Bucket für die logfiles auch in Europa liegen. “logbucketname” im folgenden bitte ersetzen durch das Bucket, das die Logfiles halten soll.

./s3curl.pl --id company --createBucket=EU -- http://s3.amazonaws.com/logbucketname

3. Das Bucket benötigt erweiterte Rechte um Logfiles empfangen zu dürfen. Dafür  muss die Accescontrollist modifiziert werden

3.1 Accescontrollist holen. Bitte beachten, dass dies abweicht von der Amazon Dokumentation, die nur die spezifische URL für US Buckets angibt.

./s3curl.pl --id company -- -s -v 'http://logbucketname.s3.amazonaws.com?acl' > logbucketname.acl

3.2 Die geholte Datei logbucketname.acl ergänzen zu:

<grant>
  <grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
    <uri>http://acs.amazonaws.com/groups/s3/LogDelivery</uri>
  </grantee>
  <permission>WRITE</permission>
</grant>
<grant>
  <grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
    <uri>http://acs.amazonaws.com/groups/s3/LogDelivery</uri>
  </grantee>
  <permission>READ_ACP</permission>
</grant>

3.3 Zurückschreiben
./s3curl.pl –id company –put logbucketname.acl — -s -v ‘http://logbucketname.s3.amazonaws.com/?acl’

4. Das Zielbucket für die Logfiles ist nun erstellt, also kann das Logging für das zu überwachende Bucket aktiviert werden.

4.1 Die logging Einstellungen holen. Bitte im folgenden “monitorbucketname” ersetzen durch den Namen des zu überwachenden Buckets.

./s3curl.pl –id company — -s -v ‘http://monitorbucketname.s3.amazonaws.com/?logging’ > monitorbucketname.logging

4.2 In der geholten Datei monitorbucketname.logging TargetBucket und TargetPrefix ergänzen, bzw. einkommentieren.

<?xml version="1.0" encoding="UTF-8"?>
<BucketLoggingStatus xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <LoggingEnabled>
    <TargetBucket>logbucketname</TargetBucket>
    <TargetPrefix>monitorbucketname-access_log-</TargetPrefix>
  </LoggingEnabled>
</BucketLoggingStatus>

4.3 zurückschreiben

./s3curl.pl --id company --put monitorbucketname.logging -- -s -v 'http://monitorbucketname.s3.amazonaws.com/?logging'

Fertig! Es kann einige Minuten dauern, bis die ersten Logfiles in das neue Bucket geschrieben werden.

Viel Erfolg beim Analysieren der erweiterten Logs!

Quellen:
http://docs.amazonwebservices.com/AmazonS3/latest/index.html?ServerLogs.html
http://blog.erichsen.net/2007/11/06/experimenting-with-amazon-s3-eu-edition/
http://solutions.amazonwebservices.com/connect/thread.jspa?messageID=51691

You are currently browsing the archives for the aws category.

Creative Commons License
This work is licensed under a
Creative Commons Attribution-Share Alike 2.5 License.
t8d blogged mit WordPress