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

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

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

http://www.xdnf.cn/news/680653.html

相关文章:

  • 常用流程审批OA系统推荐,三款产品对比分析
  • 【AI面试秘籍】| 第22期:进行SFT时,基座模型选用Chat还是Base模型?
  • 罗技优联接收器如何配对,如何让一个接收器配对多个无线设备
  • Kruskal-Wallis检验 vs. 多次Wilcoxon检验:多次两两比较为什么会增加I类错误-spss
  • 创意编程:用Python打造粒子爱心烟花秀
  • 微信小程序获取手机号
  • 商用密码 vs 普通密码:安全加密的核心区别
  • ISO 20000体系:软件配置管理中的功能基线、分配基线以及产品基线的解释,以及与WBS分解对应关系
  • python和java差异:关键数据类型与容器
  • 探秘 OSPF 协议:从拓扑到实战的网络工程进阶之路
  • DMA STM32H7 Domains and space distrubution
  • Android11 访问所有文件
  • 数字孪生技术前沿探索:与5G/6G、区块链的深度融合及伦理治理框架构建
  • 配置文件元数据
  • 【赵渝强老师】HBase的体系架构
  • 从“学术杠精”到“学术创新”
  • 数据结构测试模拟题(2)
  • 改进yolo11模型学习
  • 真话与假话
  • #跟着Lucky学鸿蒙# HarmonyOS NEXT 工程介绍
  • jenkins-jenkins简介
  • 【Redis】Redis使用规范
  • 鸿蒙OSUniApp 制作带有分页功能的列表组件#三方框架 #Uniapp
  • Python实战:打造高效通讯录管理系统
  • 汽车副水箱液位传感器介绍
  • 项目中的流程管理之Power相关流程管理
  • 牛客周赛 Round 94
  • Linux中磁盘分区与挂载
  • c#基础08(数组)
  • 数据结构-散列表查找(哈希表)