在使用对象存储的过程中我们了解了“
桶
”的概念,他通常是某类资源的一个管理访问,访问平面。从实际角度触发尽管将其比喻成文件夹中的“根路径” 非常不正确,但是此处如此的理解,可以更方便的让你看懂接下来的内容。
基本上在所有对象存储中,某个用户创建的桶,创建的对象都
默认地
归他自己所有,别人想访问必须经过他的验证,更准确地说要通过他的授权或者分享,如何不经过认证就访问存储桶中的资源的过程,我们称之为
存储桶的匿名访问
,我们知道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)
上一篇
记一次VM虚拟机上的CentOS 7系统重置root用户密码
下一篇
宁宁学JVM-记指针,句柄,returnAddress