当前位置: 首页 > article >正文

linux 通过命令将 MinIO 桶的权限设置为 Custom(自定义策略)

在 Ubuntu 下,如果要通过命令将 MinIO 桶的权限设置为 Custom(自定义策略),可以使用 mc(MinIO Client)、AWS CLI 或直接调用 MinIO API(如 curl)。以下是几种方法:


方法 1:使用 mc 设置自定义策略

mc 是 MinIO 官方命令行工具,支持直接设置自定义策略(JSON 格式)。

1. 安装 mc(如果未安装)

执行完wget,会告知mc的下载地址在哪,如无特殊限制,一般在root下,执行执行下方命令就行,如果不是,赋权限时记得修改路径,例如:sudo chmod +x /home/soft/mc

wget https://dl.min.io/client/mc/release/linux-amd64/mc -O ~/mc
chmod +x ~/mc
sudo mv ~/mc /usr/local/bin/

2. 配置 MinIO 服务器别名

mc alias set ALIAS SERVER_URL ACCESS_KEY SECRET_KEY
  • ALIAS:自定义别名(如 myminio
  • SERVER_URL:MinIO 服务器地址(如 http://localhost:9000

3. 创建自定义策略 JSON 文件

新建一个 JSON 文件(如 custom-policy.json),定义自定义权限:

{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": "*","Action": ["s3:GetObject"],"Resource": ["arn:aws:s3:::BUCKET_NAME/*"],"Condition": {"IpAddress": {"aws:SourceIp": ["192.168.1.0/24"]}}}]
}
  • 此示例允许 192.168.1.0/24 网段的用户下载文件,其他 IP 拒绝访问。

4. 应用自定义策略

mc policy set-json custom-policy.json ALIAS/BUCKET_NAME
  • ALIAS:MinIO 别名(如 myminio
  • BUCKET_NAME:桶名称(如 mybucket
# 示例
mc policy set-json /home/soft/minio/policy.json minio/test_bucket

5. 验证策略

mc policy get ALIAS/BUCKET_NAME

方法 2:使用 AWS CLI(兼容 MinIO)

如果已安装 AWS CLI,可以直接修改桶策略。

1. 安装 AWS CLI

sudo apt update
sudo apt install awscli

2. 配置 AWS CLI 连接 MinIO

aws configure set aws_access_key_id YOUR_ACCESS_KEY
aws configure set aws_secret_access_key YOUR_SECRET_KEY
aws configure set default.region us-east-1
aws configure set default.s3.endpoint_url http://localhost:9000

3. 设置自定义策略

BUCKET_NAME="your-bucket"
POLICY_JSON='{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"AWS": ["arn:aws:iam::123456789012:user/user1"]},"Action": ["s3:GetObject"],"Resource": ["arn:aws:s3:::'"$BUCKET_NAME"'/*"]}]
}'aws s3api put-bucket-policy --bucket "$BUCKET_NAME" --policy "$POLICY_JSON"
  • 此示例仅允许特定 IAM 用户访问。

4. 验证策略

aws s3api get-bucket-policy --bucket "$BUCKET_NAME"

方法 3:使用 curl 调用 MinIO API

直接通过 HTTP API 设置自定义策略。

1. 生成签名请求

BUCKET_NAME="your-bucket"
MINIO_SERVER="http://localhost:9000"
ACCESS_KEY="your-access-key"
SECRET_KEY="your-secret-key"
DATE_ISO=$(date -u +"%Y%m%dT%H%M%SZ")
DATE_SHORT=$(date -u +"%Y%m%d")# 自定义策略 JSON
POLICY_JSON='{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": "*","Action": ["s3:GetObject"],"Resource": ["arn:aws:s3:::'"$BUCKET_NAME"'/*"],"Condition": {"IpAddress": {"aws:SourceIp": ["192.168.1.100/32"]}}}]
}'# 计算签名(简化版,实际需完整 AWS Signature v4)
curl -X PUT "$MINIO_SERVER/$BUCKET_NAME/?policy" \-H "Host: $(echo $MINIO_SERVER | sed 's|^http[s]://||')" \-H "x-amz-date: $DATE_ISO" \-H "Authorization: AWS4-HMAC-SHA256 Credential=$ACCESS_KEY/$DATE_SHORT/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=$(echo -n "AWS4-HMAC-SHA256\n$DATE_ISO\n$DATE_SHORT/us-east-1/s3/aws4_request\n$(echo -en "PUT\n/$BUCKET_NAME/\npolicy=\nhost:$(echo $MINIO_SERVER | sed 's|^http[s]://||')\nx-amz-date:$DATE_ISO\n\nhost;x-amz-date\n$(echo -n "$POLICY_JSON" | sha256sum | cut -d' ' -f1)" | sha256sum | cut -d' ' -f1)" | openssl dgst -sha256 -mac HMAC -macopt "hexkey:$(echo -n "AWS4$SECRET_KEY" | od -A n -t x1 | tr -d ' \n')" | cut -d' ' -f2)" \-d "$POLICY_JSON"

方法 4:使用 Python (boto3)

如果已安装 Python,可以用 boto3 设置自定义策略。

1. 安装 boto3

pip install boto3

2. Python 脚本

import boto3
import json
from botocore.client import ConfigENDPOINT = "http://localhost:9000"
ACCESS_KEY = "your-access-key"
SECRET_KEY = "your-secret-key"
BUCKET_NAME = "your-bucket"s3 = boto3.client("s3",endpoint_url=ENDPOINT,aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,config=Config(signature_version="s3v4"),
)policy = {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"AWS": ["arn:aws:iam::123456789012:user/user1"]},"Action": ["s3:GetObject"],"Resource": [f"arn:aws:s3:::{BUCKET_NAME}/*"]}]
}s3.put_bucket_policy(Bucket=BUCKET_NAME, Policy=json.dumps(policy))
print("Custom policy applied!")

运行:

python3 set_custom_policy.py

注意事项
版本兼容性:MinIO 新版本(≥ RELEASE.2023-01-25T16-20-52Z)推荐使用 mc anonymous,旧版本可能仍支持 mc policy。

总结

方法适用场景推荐指数
mc policy set-json最简单,官方推荐⭐⭐⭐⭐⭐
AWS CLI兼容 AWS S3⭐⭐⭐⭐
curl + MinIO API无需额外工具⭐⭐
Python (boto3)编程方式⭐⭐⭐

推荐

  • 优先使用 mc policy set-json(最简单可靠)。
  • 如果已熟悉 AWS CLI,可以用 aws s3api put-bucket-policy
  • 需要编程控制时,选择 Python + boto3

希望这些方法能满足你的需求! 🚀

相关文章:

linux 通过命令将 MinIO 桶的权限设置为 Custom(自定义策略)

在 Ubuntu 下,如果要通过命令将 MinIO 桶的权限设置为 Custom(自定义策略),可以使用 mc(MinIO Client)、AWS CLI 或直接调用 MinIO API(如 curl)。以下是几种方法: 方法 …...

模型评价指标介绍

模型评价指标介绍 **在机器学习与数据科学领域,构建模型仅是工作的一部分,更为关键的是要精准评估模型的性能。模型评价指标作为衡量模型表现的标准,有助于数据科学家、分析师等从业者判断模型的优劣,进而进行优化与改进。不同类…...

ElasticSearch整合SpringBoot

ElasticSearch 整合SpringBoot ES官方提供了各种不同语言的客户端。用来操作ES。这些客户端的本质就是组装DSL语句,通过HTTP请求发送给ES。 设计索引库 跟据数据库的表结构进行ES索引库的创建时。如果字段需要进行倒排索引的时候请为它指定分词器。如果该字段不是…...

ArcGIS Pro 3.4 二次开发 - 知识图谱

环境:ArcGIS Pro SDK 3.4 + .NET 8 文章目录 知识图谱1 知识图谱数据存储1.1 打开与知识图谱的连接1.2 从KnowledgeGraphLayer获取连接1.3 检索GDB要素类和定义1.4 检索GDB表和定义1.5 从知识图谱数据存储中获取服务 Uri1.6 将一组对象ID转换为实体的ID1.7 将一组ID转换为实体…...

2025上半年软考高级系统架构设计师经验分享

笔者背景 笔者在成都工作近7年, 一直担任研发大头兵,平日工作主要涵盖应用开发(Java)与数仓开发,对主流数据库、框架等均有涉猎,但谈不上精通。 最近有一些职业上的想法,了解到软考有那么一丁点…...

uni-app学习笔记十二-vue3中创建组件

通过组件,可以很方便地实现页面复用,减少重复页面的创建,减少重复代码。一个页面可以引入多个组件。下面介绍在HBuilder X中创建组件的方法: 一.组件的创建 1.选中项目,右键-->新建目录(文件夹),并将文…...

React 虚拟dom

虚拟dom react核心机制 内存中轻量级JS对象树模拟真实DOM,主要目的是减少操作真实dom的开销 具体是通过diff算法计算最小的变更,批处理更新真实dom元素 diff算法 特点 同级去进行比较,不涉及跨层的一个比较 使用key值优化列表遍历过程 …...

互联网大厂Java求职面试:AI与大模型应用集成中的架构难题与解决方案-1

互联网大厂Java求职面试:AI与大模型应用集成中的架构难题与解决方案-1 场景描述 郑薪苦,一个看似不靠谱但技术潜力巨大的程序员,在一次针对AI与大模型应用集成的面试中,被一位技术总监级别的人物提问。面试官以严肃专业的态度&a…...

《算法笔记》13.2小节——专题扩展->树状数组(BIT) 问题 D: 数列-训练套题T10T3

数列(sequence.pas/c/cpp) - 问题描述 一个简单的数列问题&#xff1a;给定一个长度为n的数列&#xff0c;求这样的三个元素ai, aj, ak的个数&#xff0c;满足ai < aj > ak&#xff0c;且i < j < k。 - 输入数据 第一行是一个整数n(n < 50000)。 第二行n个整…...

一键启动多个 Chrome 实例并自动清理的 Bash 脚本分享!

目录 一、&#x1f4e6; 脚本功能概览 二、&#x1f4dc; 脚本代码一览 三、&#x1f50d; 脚本功能说明 &#xff08;一&#xff09;✅ 支持批量启动多个 Chrome 实例 &#xff08;二&#xff09;✅ 每个实例使用独立用户数据目录 &#xff08;三&#xff09;✅ 启动后自…...

4 月 62100 款 App 被谷歌下架!环比增长 28%

大家好&#xff0c;我是牢鹅&#xff01;上周刚刚结束的 2025 年 Google I/O 开发者大会&#xff0c; Google Play 带来了一系列的更新&#xff0c;主要围绕提升优质 App 的"发现"、"互动"和"收入"三大核心内容。 这或许正是谷歌生态的一个侧影…...

图像分割全路线学习(结合论文)

本篇文章参考自开源大佬的文章并结合自己的思考而来&#xff0c;欢迎大家提出意见&#xff0c;论文代码同样来自开源&#xff0c;文中已注明 文章目录 图像分割图像分割算法分类&#xff1f;传统的基于CNN的分割方法缺点&#xff1f;FCN详解FCN改变了什么?FCN网络结构&#x…...

Go语言之定义结构体(Struct)-《Go语言实战指南》

结构体&#xff08;struct&#xff09;是 Go 中的一种复合数据类型&#xff0c;它允许你将多个不同类型的字段组合成一个类型&#xff0c;类似于 C 语言的结构体或面向对象语言中的类。 一、结构体的基本定义 type 结构体名 struct {字段名 字段类型... } 示例&#xff1a; …...

mediapipe标注视频姿态关键点(基础版加进阶版)

前言 手语视频流的识别有两种大的分类&#xff0c;一种是直接将视频输入进网络&#xff0c;一种是识别了关键点之后再进入网络。所以这篇文章我就要来讲讲如何用mediapipe对手语视频进行关键点标注。 代码 需要直接使用代码的&#xff0c;我就放这里了。环境自己配置一下吧&…...

PCtoLCD2002如何制作6*8字符

如何不把“等比缩放”前的打勾取消&#xff0c;则无法修改为对应英文字符为6*8。 取消之后就可以更改了&#xff01;...

SmartPlayer与VLC播放RTMP:深度对比分析延迟、稳定性与功能

随着音视频直播技术的发展&#xff0c;RTMP&#xff08;实时消息传输协议&#xff09;成为了广泛应用于实时直播、在线教育、视频会议等领域的重要协议。为了确保优质的观看体验&#xff0c;RTMP播放器的选择至关重要。大牛直播SDK的SmartPlayer和VLC都是在行业中广受欢迎的播放…...

Qt QPaintEvent绘图事件painter使用指南

绘制需在paintEvent函数中实现 用图片形象理解 如果加了刷子再用笔就相当于用笔画过的区域用刷子走 防雷达&#xff1a; 源文件 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QPainter> Widget::Widget(QWidget…...

伪创新-《软件方法》全流程引领AI-第1章 04

《软件方法》全流程引领AI-第1章 ABCD工作流-01 对PlantUML们的评价-《软件方法》全流程引领AI-第1章 02 AI辅助的建模步骤-《软件方法》全流程引领AI-第1章 03 第1章 ABCD工作流 1.5 警惕和揭秘伪创新 初中数学里要学习全等三角形、相似三角形、SSS、SAS……&#xff0c;到…...

win11如何重启

在 Windows 11 中重启电脑有多种方法&#xff0c;以下是其中几种常见方法&#xff1a; 开始菜单重启&#xff1a; 点击屏幕左下角的“开始”按钮&#xff08;Windows 图标&#xff09;。 在开始菜单中&#xff0c;点击“电源”图标。 选择“重启”选项。 使用快捷键&#xf…...

【iOS】 锁

iOS 锁 文章目录 iOS 锁前言线程安全锁互斥锁pthread_mutexsynchronized (互斥递归锁)synchronized问题:小结 NSLockNSRecursiveLockNSConditionNSConditionLock 自旋锁OSSpinLock(已弃用)atomicatomic修饰的属性绝对安全吗?os_unfair_lock 读写锁互斥锁和自旋锁的对比 小结使…...

uni-app学习笔记十五-vue3页面生命周期(一)

页面生命周期概览 vue3页面生命周期如下图所示&#xff1a; onLoad 此时页面还未显示&#xff0c;没有开始进入的转场动画&#xff0c;页面dom还不存在。 所以这里不能直接操作dom&#xff08;可以修改data&#xff0c;因为vue框架会等待dom准备后再更新界面&#xff09;&am…...

Flink核心概念小结

文章目录 前言引言数据流API基于POJO的数据流基本源流配置示例基本流接收器数据管道与ETL(提取、转换、加载)一对一映射构建面向流映射的构建键控流进行分组运算RichFlatMapFunction对于流的状态管理连接流的使用流式分析水位的基本概念和示例侧道输入的基本概念和示例Process …...

《软件工程》第 14 章 - 持续集成

在软件工程的开发流程中&#xff0c;持续集成是保障代码质量与开发效率的关键环节。本章将围绕持续集成的各个方面展开详细讲解&#xff0c;结合 Java 代码示例与可视化图表&#xff0c;帮助读者深入理解并实践相关知识。 14.1 持续集成概述 14.1.1 持续集成的相关概念 持续集…...

大模型 Agent 中的通用 MCP 机制详解

1. 引言 大模型(Large Language Model,LLM)技术的迅猛发展催生了一类全新的应用范式:LLM Agent(大模型 Agent)。简单来说,Agent 是基于大模型的自治智能体,它不仅能理解和生成自然语言,还能通过调用工具与环境交互,从而自主地完成复杂任务。ChatGPT 的出现让人们看到…...

Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。

&#x1f9d1;‍&#x1f4bb; 用户 Navicat 17 SQL 预览时表名异常右键表名&#xff0c;点击设计表->SQL预览->另存为的SQL预览时&#xff0c;表名都是 Untitled。 &#x1f9d1;‍&#x1f527; 官方技术中心 了解到您的问题&#xff0c;这个显示是正常的&#xff0c…...

Orpheus-TTS:AI文本转语音,免费好用的TTS系统

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、Orpheus-TTS&#xff1a;重新定义语音合成的标准1. 什么是Orpheus-TTS&#xff…...

Python爬虫实战:研究Goose框架相关技术

一、引言 随着互联网的迅速发展,网络上的信息量呈爆炸式增长。从海量的网页中提取有价值的信息成为一项重要的技术。网络爬虫作为一种自动获取网页内容的程序,在信息收集、数据挖掘、搜索引擎等领域有着广泛的应用。本文将详细介绍如何使用 Python 的 Goose 框架构建一个完整…...

webpack优化方法

以下是Webpack优化的系统性策略&#xff0c;涵盖构建速度、输出体积、缓存优化等多个维度&#xff0c;配置示例和原理分析&#xff1a; 一、构建速度优化 1. 缩小文件搜索范围 module.exports {resolve: {// 明确第三方模块的路径modules: [path.resolve(node_modules)],// …...

STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09

STM32 Keil工程搭建 (手动搭建)流程 觉得麻烦跳转到最底部看总配置图 1.获取官方标准外设函数库 内部结构如下: 文件夹功能分别为 图标(用不上)库函数(重点) Libraries/ ├── CMSIS/ # ARM Cortex-M Microcontroller Software Interface Standard…...

MyBatis 框架使用与 Spring 集成时的使用

MyBatis 创建项目mybatis项目&#xff0c;首先需要使用maven导入mybatis库 poml.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema…...