在 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
。
希望这些方法能满足你的需求! 🚀