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

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

相关推荐
郝学胜-神的一滴1 分钟前
Linux的pthread_self函数详解:多线程编程中的身份标识器
linux·运维·服务器·开发语言·c++·程序人生
小立爱学习5 分钟前
ARM64 指令 --- CCMP/CSEL
linux·c语言
阿方索5 分钟前
OpenStack 实验指导手册
服务器·openstack
jimy111 分钟前
程序崩溃free(): double free detected in tcache 2
linux·开发语言·数据结构·链表
不染尘.21 分钟前
传输层协议头分析
服务器·网络·tcp/ip·计算机网络·udp·tcp
松涛和鸣24 分钟前
37、UDP网络编程入门
linux·服务器·前端·网络·udp·php
坐吃山猪25 分钟前
Python命令行工具Click
linux·开发语言·python
宠..25 分钟前
为单选按钮绑定事件
运维·服务器·开发语言·数据库·c++·qt·microsoft
QC七哥27 分钟前
基于vnstat监控服务器的网卡流量
运维·服务器·监控·vnstat
Lueeee.29 分钟前
FFMPEG核心结构体
linux·ffmpeg