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

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

相关推荐
songyuc14 小时前
【Ubuntu】请问,『kill -9』跟『kill -15』有区别吗?
linux·ubuntu
iconball14 小时前
个人用云计算学习笔记 --15. (Linux 系统启动原理、Linux 防火墙管理))
linux·运维·笔记·学习·云计算
dragoooon3414 小时前
[Linux基础——Lesson2.Linux的基本指令使用]
linux·运维·服务器
NiKo_W14 小时前
Linux 基础IO与系统IO
linux·io·文件系统
深思慎考14 小时前
LinuxC++——spdlog日志使用入门
linux·数据库·c++
半梦半醒*14 小时前
keepalived部署
运维·服务器·nginx·架构·centos·apache
hweiyu0014 小时前
从0手写自己的Linux x86操作系统(视频教程)
linux·运维·数据库
铭哥的编程日记14 小时前
《Linux 基础 IO 完全指南:从文件描述符到缓冲区》
android·linux·运维
yangzx的网工日常15 小时前
IP子网掩码的计算
服务器·网络协议·tcp/ip
kikikidult15 小时前
ubuntu中卸载软件的几种方法
笔记·ubuntu