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

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

相关推荐
?!7142 分钟前
多线程和并发之线程
linux·c语言·c++
sha10246 分钟前
GitLab CI流水线权限隔离
linux·ci/cd·gitlab
世事如云有卷舒7 分钟前
Linux驱动学习笔记(十)
linux·笔记·学习
新时代牛马41 分钟前
linux使用服务添加一个开机启动脚本
linux·运维·服务器
aitav01 小时前
⚡ Linux 系统安装与配置 Vim 编辑器(包括 Vim 插件管理器)
linux·编辑器·vim
AWS官方合作商1 小时前
AWS EC2 实例告警的创建与删除
运维·服务器·云计算·aws
小阳睡不醒1 小时前
小白成长之路-计算机网络(二)
linux·计算机网络
皓月盈江1 小时前
阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF
服务器·阿里云·crontab·雷池waf·linux宝塔面板·acme.h·续签ssl证书
病树前头1 小时前
服务器tty2终端如何关机
linux·运维·服务器
凡沙-Fanrncho1 小时前
同一机器下通过HTTP域名访问其他服务器进程返回504问题记录
服务器·网络协议·http