Wie ermitteln Sie Ihre Berechtigungen in AWS S3 über das Java SDK?

8

Ich weiß, dass Sie versuchen können, die ACLs oder Bucket-Richtlinien über das Java SDK zu lesen, aber gibt es eine einfache Möglichkeit, einfach zu überprüfen, ob Sie Lese- und / oder Schreibberechtigungen für einen Bucket und / oder seinen Inhalt haben? Ich sehe keine "haveReadPermissions ()" - Methode oder irgendetwas in der Amazon S3-Klasse, aber vielleicht fehlt mir etwas? Ich kann es kaum glauben, dass es keine einfache Möglichkeit gibt, Berechtigungen zu überprüfen.

    
Dasmowenator 27.07.2012, 16:58
quelle

4 Antworten

9

Ich denke, die Antwort ist, dass es keine narrensichere Möglichkeit gibt, dies zu tun, zumindest nicht zu diesem Zeitpunkt. Es gibt ein paar andere Methoden, die Sie verwenden können, um dies zu umgehen. Ich habe ursprünglich versucht, die getBucketLocation () -Methode zu verwenden, um zu bestimmen, ob mein gegebener Benutzer Lesezugriff auf den Bucket hatte, aber es stellt sich heraus, dass Sie der Besitzer des Buckets sein müssen, um diese Methode zu verwenden das hat nicht funktioniert.

Für Lesezugriff gibt es einen weiteren Hack, den Sie verwenden können. Verwenden Sie einfach etwas in der Art von getObject(bucketName, UUID.randomUUID().toString()) - das wird eine Ausnahme auslösen, weil Sie versuchen, einen Schlüssel abzurufen, der nicht existiert. Fangen Sie die AmazonServiceException (oder AmazonS3Exception) ab und überprüfen Sie, ob e.getErrorCode() gleich "NoSuchKey" ist. Wenn dies der Fall ist, haben Sie Lesezugriff auf den Bucket. Wenn es ein anderer Fehlercode ist, dann haben Sie keinen Zugriff, oder der Bucket existiert nicht, usw. (es könnte eine beliebige Anzahl von Dingen sein). Stellen Sie sicher, dass Sie explizit den ErrorCode nicht StatusCode überprüfen, da Sie auch einen 404 StatusCode erhalten, wenn der Bucket nicht existiert (der gleiche StatusCode, den Sie erhalten, wenn der Schlüssel nicht existiert). Hier ist die vollständige Liste der S3 Fehler / Status-Codes: Ссылка

Für den Schreibzugriff ist das nicht so einfach. Der beste Weg ist, eine kleine Testdatei in den Bucket zu schreiben (und dann vielleicht zu löschen). Wenn Sie nach generischeren Berechtigungen suchen möchten, ermitteln Sie mit einer Methode wie PutObjectAcl, ob Ihr Benutzer über "s3:Put*" -Berechtigungen verfügt (Sie können die ACL genau wie die aktuelle ACL festlegen, indem Sie sie zuerst lesen und dann verwenden um es einzustellen).

    
Dasmowenator 24.06.2013, 20:36
quelle
0

Versuchen Sie getBucketACL(String bucketName) , was eine Methode von AmazonS3 ist.

    
Mustafa Genç 19.09.2012 07:53
quelle
0

Die Verwendung von getBucketACL ist in Ordnung, wenn keine Bucket-Richtlinien definiert sind, die Richtlinie die ACL jedoch überschreiben kann.

Sie sind möglicherweise auch nicht berechtigt, die ACL anzuzeigen. Wenn Sie also nicht READACL Zugriff auf die Buckets benötigen und keine Richtlinien zulassen, müssen Sie eine Kombination aus getBucketACL und getBucketPolicy verwenden.

Und an diesem Punkt ist es wahrscheinlich einfacher, die Operationen zu testen, die Sie benötigen, um nach diesen Berechtigungen zu suchen.

    
Jimmy 08.06.2016 20:09
quelle
-1

Ich glaube nicht, dass es einen einfacheren Weg gibt, wenn Sie nicht Ihre eigenen Klassen erstellt haben, die die AWS-API erweitert haben. Das ist vielleicht keine schlechte Idee, wenn Sie ein größeres Programm mit Amazon S3 machen.

    
Brinnis 27.07.2012 18:32
quelle