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

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

2. 配置 MinIO 服务器别名

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

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

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

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. 应用自定义策略

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

5. 验证策略

bash 复制代码
mc policy get ALIAS/BUCKET_NAME

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

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

1. 安装 AWS CLI

bash 复制代码
sudo apt update
sudo apt install awscli

2. 配置 AWS CLI 连接 MinIO

bash 复制代码
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. 设置自定义策略

bash 复制代码
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. 验证策略

bash 复制代码
aws s3api get-bucket-policy --bucket "$BUCKET_NAME"

方法 3:使用 curl 调用 MinIO API

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

1. 生成签名请求

bash 复制代码
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

bash 复制代码
pip install boto3

2. Python 脚本

python 复制代码
import boto3
import json
from botocore.client import Config

ENDPOINT = "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!")

运行:

bash 复制代码
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。

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

相关推荐
其实防守也摸鱼11 小时前
Cylab在线靶场——挑战图书馆初学者指南
服务器·前端·数据库·chrome·安全·网络安全·靶场
邪修king12 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
2301_7779983413 小时前
ARP协议进阶:ARP缓存、RARP与ARP欺骗原理解析
linux·服务器·网络·网络协议·缓存
运维行者_14 小时前
应用性能监控怎么选?从调用链到用户体验的五个能力维度
运维·服务器·数据库·人工智能·mysql·性能优化·应用性能监控
Zenova EdgeOS20 小时前
Linux 内核日志 dmesg 进阶实战:从现场过滤到持久化闭环
linux·运维·服务器
郝亚军20 小时前
ec_private.pem的生成方法
linux·运维·服务器
NendoZen21 小时前
Arch Linux解决Grub无法SAVEDEFAULT问题(uki启动问题)
linux·运维·服务器
Elastic 中国社区官方博客1 天前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
忆挽篱笙歌1 天前
进程控制管理
linux·运维·服务器
Escalating_xu1 天前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip