Das*_*tor 9 java permissions amazon-s3 amazon-web-services
我知道您可以尝试通过Java SDK读取ACL或存储桶策略,但是有没有简单的方法来检查您是否对存储桶和/或其内容具有读取和/或写入权限?我没有看到任何"haveReadPermissions()"方法或AmazonS3类中的任何内容,但也许我错过了什么?我发现很难相信没有简单的方法来检查权限.
Das*_*tor 10
我认为答案是没有万无一失的方法可以做到这一点,至少目前还没有.您可以使用其他几种方法来尝试解决此问题.我最初尝试使用getBucketLocation()方法来确定我的给定用户是否具有对该存储桶的读取权限,但事实证明您必须是存储桶的所有者才能使用此方法...因此无效.
对于读取访问,您可以使用另一个hack.只是使用类似的东西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完全相同) ).
归档时间: |
|
查看次数: |
2816 次 |
最近记录: |