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.
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).
Versuchen Sie getBucketACL(String bucketName)
, was eine Methode von AmazonS3
ist.
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.
Tags und Links java permissions amazon-s3 amazon-web-services