前言 

Amazon Simple Storage Service (Amazon S3) 是一种面向 Internet 的存储服务。该服务旨在降低网络规模计算的难度(接口协议)

MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。 它是与 Amazon S3 云存储服务兼容的 API 

亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。 MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 

需求

         minio特定的桶需要只对外开放下载,不用校验身份

方案一

        默认情况下,只有资源所有者可以访问这些资源。并且资源是私有的

我们可以将桶策略设置为public,就可以永久访问了,但是这种方式不安全,不推荐,因为下载链接和上传链接相同,而且都不需要验证身份,那么你的数据就不安全了

 方案二

        minio开放的python sdk(也可以使用别的语言的sdk,都是一样的)

from minio import Minio


client = Minio(service, access_key=access_key, secret_key=secret_key)
# 自定义的策略 开放所有人可以下载指定桶下的资源
policy = '{"Version":"2012-10-17","Statement":[{"Effect":"Allow",\
        "Principal":{"AWS":["*"]},"Action":["s3:GetBucketLocation","s3:ListBucket"],\
            "Resource":["arn:aws:s3:::%s"]},{"Effect":"Allow","Principal":{"AWS":["*"]},\
                "Action":["s3:GetObject"],"Resource":["arn:aws:s3:::%s/*"]}]}'

bucket_name = xxx
policy = policy % (bucket_name, bucket_name)
client.set_bucket_policy(bucket_name=bucket_name, policy=policy)

 方案三

        minio mc (management console) 管理控制台修改策略

        MinIO客户端快速入门指南| Minio中文文档  mc客户端的安装就不再说了,自己参考一下文档

        我用的是windows--http://dl.minio.org.cn/client/mc/release/linux-amd64/mc

 

咱们用policy的命令来实现自定义策略

 .\mc.exe policy --help 

 用json的方式来设置策略,贴一下我自己用的策略

也可以直接使用 mc policy set download minio/bucketName  默认就是以下策略

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"AWS": [
					"*"
				]
			},
			"Action": [
				"s3:GetBucketLocation",
				"s3:ListBucket"
			],
			"Resource": [
				"arn:aws:s3:::yourbucketname"
			]
		},
		{
			"Effect": "Allow",
			"Principal": {
				"AWS": [
					"*"
				]
			},
			"Action": [
				"s3:GetObject"
			],
			"Resource": [
				"arn:aws:s3:::yourbucketname/*"
			]
		}
	]
}

但是 action里的 "s3:ListBucket" 要去掉 

因为"s3:ListBucket"可以在浏览器里访问你的桶内元素列表 很不安全

 如果介意任何人都可以在浏览器中看到你的文件列表,就用下面的json来定义你的可下载策略

{
 "Statement": [
  {
   "Action": [
    "s3:GetBucketLocation"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3:::bucketName"
   ]
  },
  {
   "Action": [
    "s3:GetObject"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3:::bucketName/*"
   ]
  }
 ],
 "Version": "2012-10-17"
}

保存到 C:\Users\19874\mc\app_b.json 并执行以下命令

 .\mc.exe policy set-json "C:\Users\19874\mc\app_b.json" minio/bucketName

ok,搞定

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐