添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在使用对象存储的过程中我们了解了“ ”的概念,他通常是某类资源的一个管理访问,访问平面。从实际角度触发尽管将其比喻成文件夹中的“根路径” 非常不正确,但是此处如此的理解,可以更方便的让你看懂接下来的内容。

基本上在所有对象存储中,某个用户创建的桶,创建的对象都 默认地 归他自己所有,别人想访问必须经过他的验证,更准确地说要通过他的授权或者分享,如何不经过认证就访问存储桶中的资源的过程,我们称之为 存储桶的匿名访问 ,我们知道minio是S3存储规范的一个实现(尽管很多地方还是有些小区别的,而存储桶的匿名访问正式其中之一)

S3的存储桶策略比较繁琐,通过json语法对桶中的资源进行管理,尽管其含义相对定义的比较详细的,但不好使用。

Minio客户端提供的存储桶策略是AWS S3提供的相同存储桶策略的抽象版本。

minio匿名访问策略

从官网我们可以看到有以下几种

  • read only 允许未经认证的访问
  • write only 允许未经认证的上传
  • read+write 允许读写
  • none 默认值,必须经过认证
  • 匿名访问策略对应的java客户端枚举

    以上4种权限对应的java客户端种的枚举类为 PolicyType

    public enum PolicyType {
      NONE("none"), READ_ONLY("readonly"), READ_WRITE("readwrite"), WRITE_ONLY("writeonly");
      private final String value;
      private PolicyType(final String value) {
        this.value = value;
    

    抽象访问对应mc客户端策略

    通过官网我们知道minio有一个名字叫做 mc的命令行客户端,在mc种对桶策略设置对应分别是 none, download, upload, public ,与minio的匿名访问策略一一对应:

  • read only download
  • write only upload
  • read+write public
  • none none
  • 通过mc设置匿名访问

    # 配置你的服务器地址: mc alias set alias {host} {username} {password} {signature} 
    mc alias set 别名 http://127.0.0.1:9000 用户名 密码 api版本(可选)[s3v2或者s3v4]
    # 在指定地址创建一个mybucket的桶
    mc mb local/mybucket 
    #更改桶权限为public(简单操作,对桶进行全局操作,无论桶中文件名前缀是什么)
    mc policy public local/mybucket 
    

    通过java 设置匿名访问

  • 8.0 以前
  • public class SetBucketPolicy { 
        public static void main(String[] args) 
        throws IOException, NoSuchAlgorithmException, InvalidKeyException, XmlPullParserException { 
        try { 
         // 新建客户端
         MinioClient minioClient = new MinioClient("地址", "用户名", 
                   "密码"); 
         // 如果对整个桶设置,路径直接设置 *
         // 如果对指定前缀设置 前缀/路径
         minioClient.setBucketPolicy("桶名", "前缀/路径", PolicyType.READ_ONLY); 
        } catch (MinioException e) { 
         System.out.println("Error occurred: " + e); 
    
  • 8.0以后新API
  • public class SetBucketPolicy { 
        public static void main(String[] args) 
        throws IOException, NoSuchAlgorithmException, InvalidKeyException, XmlPullParserException { 
        try { 
         // 新建客户端
         MinioClient minioClient = new MinioClient("地址", "用户名", 
                   "密码"); 
         try {
             // 如何获取对应json字符串
        String config = "  [\n" +
                    "            {\n" +
                    "                \"Action\": [\n" +
                    "                    \"s3:GetBucketLocation\",\n" +
                    "                    \"s3:ListBucket\"\n" +
                    "                ],\n" +
                    "                \"Effect\": \"Allow\",\n" +
                    "                \"Principal\": \"*\",\n" +
                    "                \"Resource\": \"arn:aws:s3:::my-bucketname\"\n" +
                    "            },\n" +
                    "            {\n" +
                    "                \"Action\": \"s3:GetObject\",\n" +
                    "                \"Effect\": \"Allow\",\n" +
                    "                \"Principal\": \"*\",\n" +
                    "                \"Resource\": \"arn:aws:s3:::my-bucketname/myobject*\"\n" +
                    "            }\n" +
                    "        ],\n" +
                    "        \"Version\": \"2012-10-17\"\n" +
                    "    }"
             this.minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(config).build());
            } catch (ErrorResponseException | InsufficientDataException
                    | InternalException | InvalidKeyException 
                    | InvalidResponseException | IOException
                    | NoSuchAlgorithmException | ServerException 
                    | XmlParserException e) {
                log.error("[seed] [minio] 设置桶:{}策略失败", bucketName, e);
    

    通过简单web客户端设设置匿名访问(简单)

    通过浏览器直接访问minio配置好的地址,输入用户密码,即可进入控制台。

    在控制台中新添加一个桶,最左边一列会出现你新增的桶名,此时默认权限为none,点击新增的桶名右边的’···‘ 符号>点击edit policy 会打开一个下拉列表,在此处你可以选择给桶中不同前缀的存储资源设置匿名访问权限,例如下拉框默认选中 readonly,前缀为空。直接点击add 新增一条规则 会发现 前缀为 ***** 的资源新增了一条readobly的权限。

    此时通过http:// minio地址/端口/桶名/桶中路径名,例如http://paly.minio.io:9000/mybucket/my-resource.jpg即可 直接通过浏览器访问桶中资源,而不需要通过认证生成临时访问路径。

  • 注意点:如果某些你不想浏览器直接下载,而是浏览器预览,建议上传时不要设置上传文件的头信息为pplication/octet-stream, 而是明确对应其对应的mime类型 。
  • 如何得到匿名访问的json串

  • 一.通过S3的官方文档的学习,自己书写存储桶策略(但是minio只支持简版,问题在于如何得到简版策略对应的json串)
  • 二.【推荐】通过mc 客户端 或者简单web客户端设置桶策略后,通过S3 brower软件 (S3的桌面客户端)软件连接minio。选中对应的桶>右键>编辑桶策略,即可查看该桶目前的桶策略json串
  • 三.在使用S3 brower查看桶策略时,弹窗的右上角有policies-examples,和policy generator 连接 ,在此处可以更加快速和方便的学习存储桶语法的学习和生成。
  • 赞(8)
    未经允许不得转载:国研数字 » minio的桶匿名访问策略
    上一篇
    下一篇

    评论 抢沙发

    评论前必须登录!