我知道您可以尝试通过Java SDK读取ACL或存储桶策略,但是有什么简单的方法可以仅检查您是否具有存储桶和/或其内容的读取和/或写入权限?我没有看到任何“ haveReadPermissions()”方法或AmazonS3类中的任何内容,但是也许我遗漏了一些东西?我发现很难相信没有简单的方法来检查权限。
我认为答案是,目前还没有万无一失的方法,至少目前还没有。您可以使用其他几种方法来解决此问题。我最初尝试使用getBucketLocation()方法来确定我的给定用户是否具有对存储桶的读取访问权限,但事实证明您必须是存储桶的所有者才能使用此方法...因此不起作用。
对于读取访问,还有另一种可以使用的技巧。只需使用类似的东西getObject(bucketName, UUID.randomUUID().toString())
-这将引发异常,因为您试图获取不存在的密钥。捕获AmazonServiceException(或AmazonS3Exception)并检查是否e.getErrorCode()
等于"NoSuchKey"
。如果是这种情况,则您对存储桶具有读取权限。如果是其他任何错误代码,则说明您无权访问,或者存储桶不存在,等等(可能有很多东西)。确保您明确检查ErrorCode 而不是 StatusCode,因为如果存储桶不存在,您还将获得404 StatusCode(这与密钥不存在时获得的StatusCode相同)。这是S3错误/状态代码的完整列表:http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
对于写访问,并不是那么简单。最好的方法是实际上将一个小的测试文件写入存储桶(然后尝试删除它)。除此之外,如果您想检查更多通用权限,则使用PutObjectAcl之类的方法将确定您的用户是否具有"s3:Put*"
权限(您可以先读取ACL并将其设置为与当前ACL完全相同,然后再使用该ACL进行设置)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句