第六章:MinIO Client
深入学习 MinIO Client (mc) 的高级功能,包括别名管理、策略配置、SQL 查询和加密操作。
最后更新: 2024-01-15
页面目录
第六章:MinIO Client
6.1 别名管理
6.1.1 别名配置
# 添加别名
mc alias set myminio http://localhost:9000 admin password123
# 添加带 API 签名的别名
mc alias set s3backup https://s3.amazonaws.com \
AKIAIOSFODNN7EXAMPLE \
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# 列出所有别名
mc alias list
# 删除别名
mc alias remove myminio
# 导出别名配置
mc alias list > aliases.json
# 导入别名配置
mc alias import < aliases.json
6.1.2 多环境配置
# 开发环境
mc alias set minio-dev http://dev.minio.local:9000 admin devpass
# 测试环境
mc alias set minio-test http://test.minio.local:9000 admin testpass
# 生产环境
mc alias set minio-prod https://minio.company.com admin prodpass
# 快速切换
export MC_HOST_minio=admin:password@http://localhost:9000
6.2 策略管理
6.2.1 IAM 策略概述
MinIO 使用与 AWS S3 兼容的 IAM 策略进行访问控制。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}
6.2.2 创建策略
# 创建只读策略文件
cat > read-only-policy.json << 'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::mybucket"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}
EOF
# 应用策略
mc admin policy create myminio/read-only read-only-policy.json
# 列出所有策略
mc admin policy list myminio/
# 查看策略详情
mc admin policy info myminio/read-only
6.2.3 用户和组管理
# 创建用户
mc admin user add myminio newuser newpassword
# 创建带策略的用户
mc admin user add myminio readonlyuser --policy read-only
# 查看用户列表
mc admin user list myminio/
# 查看用户信息
mc admin user info myminio/newuser
# 禁用用户
mc admin user disable myminio/newuser
# 启用用户
mc admin user enable myminio/newuser
# 删除用户
mc admin user remove myminio/newuser
6.2.4 组管理
# 创建组
mc admin group add myminio developers newuser1 newuser2
# 查看组信息
mc admin group info myminio/developers
# 为组设置策略
mc admin policy attach myminio/read-only --group developers
# 从组中移除用户
mc admin group remove myminio developers newuser1
# 列出所有组
mc admin group list myminio/
6.2.5 策略附加
# 附加策略到用户
mc admin policy attach myminio/read-only --user newuser
# 附加策略到组
mc admin policy attach myminio/read-only --group developers
# 分离策略
mc admin policy detach myminio/read-only --user newuser
6.3 SQL 查询
6.3.1 SQL Select 概述
MinIO 支持使用 SQL 语句查询对象内容,适用于 JSON、CSV 等格式的数据。
# SQL 查询 JSON 文件
mc sql --recursive --storage-class STANDARD \
--query "select * from S3Object" \
myminio/mybucket/data.json
6.3.2 查询示例
# 查询 CSV 文件
mc sql --query "SELECT * FROM S3Object WHERE age > 25" \
myminio/mybucket/users.csv
# 查询 JSON 文件
mc sql --query "SELECT name, email FROM S3Object WHERE active = true" \
myminio/mybucket/users.json
# 递归查询目录
mc sql --recursive \
--query "SELECT count(*) FROM S3Object" \
myminio/mybucket/logs/
# 带条件的查询
mc sql \
--query "SELECT _1.name, _1.price FROM S3Object WHERE _1.category = 'electronics'" \
myminio/mybucket/products.ndjson
6.4 加密操作
6.4.1 服务端加密类型
| 类型 | 说明 |
|---|---|
| SSE-S3 | 使用 MinIO 管理的密钥加密 |
| SSE-KMS | 使用外部 KMS 密钥加密 |
| SSE-C | 使用客户提供的密钥加密 |
6.4.2 SSE-S3 加密
# 设置存储桶加密
mc encryption set sse-s3 myminio/mybucket
# 查看加密状态
mc encryption info myminio/mybucket
# 禁用加密
mc encryption set none myminio/mybucket
# 上传时指定加密
mc cp encrypted-file.txt myminio/mybucket/ \
--enc-sse-s3
6.4.3 SSE-KMS 加密
# 配置 KMS (使用 Vault 作为示例)
export MINIO_KMS_KES_ENDPOINT=https://kes.minio.local:7373
export MINIO_KMS_KES_KEY_NAME=my-minio-key
export MINIO_KMS_KES_CERT_FILE=kes-cert.pem
export MINIO_KMS_KES_KEY_FILE=kes-key.pem
export MINIO_KMS_KES_CAPATH=kes-ca.pem
# 设置存储桶加密
mc encryption set sse-kms myminio/mybucket
# 使用特定密钥加密
mc cp file.txt myminio/mybucket/ \
--enc-sse-kms=my-key-name
6.4.4 SSE-C 加密
# 使用客户密钥加密上传
mc cp file.txt myminio/mybucket/ \
--enc-sse-c=my-32-byte-key-1234567890 \
--enc-sse-c-file=keyfile
# 下载加密文件
mc cp myminio/mybucket/file.txt /tmp/ \
--decryption-key file.key
6.5 标签管理
6.5.1 对象标签
# 为对象设置标签
mc tag set myminio/mybucket/file.txt "project=analytics" "env=production"
# 列出对象标签
mc tag list myminio/mybucket/file.txt
# 删除对象标签
mc tag remove myminio/mybucket/file.txt project
# 批量设置标签
mc tag set --recursive myminio/mybucket/*.txt "backup=true"
# 按标签查询对象
mc ls --tag "project=analytics" myminio/mybucket/
6.5.2 存储桶标签
# 设置存储桶标签
mc tag set myminio/mybucket "project=analytics" "cost-center=engineering"
# 列出存储桶标签
mc tag list myminio/mybucket
# 删除存储桶标签
mc tag remove myminio/mybucket project
6.6 通知配置
6.6.1 通知类型
| 类型 | 说明 |
|---|---|
| Webhook | HTTP POST 通知 |
| RabbitMQ | 消息队列通知 |
| Kafka | Kafka 通知 |
| MQTT | IoT 通知 |
| Elasticsearch | ES 通知 |
| Redis | Redis 通知 |
6.6.2 Webhook 通知
{
"arn": "minioio:sqs:us-east-1:1:webhook",
"config": {
"endpoint": "http://webhook.example.com/notify",
"authToken": "Bearer TOKEN"
},
"event": ["s3:ObjectCreated:*", "s3:ObjectRemoved:*"]
}
# 添加 webhook 通知
mc event add myminio/mybucket \
arn:minioio:sqs::1:webhook \
--event put,get,delete
# 列出通知规则
mc event list myminio/mybucket
# 删除通知规则
mc event remove myminio/mybucket arn:minioio:sqs::1:webhook
6.7 审计日志
6.7.1 启用审计
# 配置审计日志
mc admin config set myminio audit_webhook \
endpoint=http://audit-server:8080/audit \
auth_token=YOUR_AUTH_TOKEN
# 重启服务生效
mc admin service restart myminio
6.7.2 审计配置
# 查看审计配置
mc admin config get myminio audit_webhook
# 设置审计过滤
mc admin config set myminio \
audit_webhook=endpoint=http://audit-server:8080/audit \
audit_webhook/auth_token=YOUR_TOKEN \
audit_webhook/client_cert=/path/to/cert.pem \
audit_webhook/client_key=/path/to/key.pem
6.8 高级操作
6.8.1 diff 操作
# 比较本地和远程差异
mc diff myminio/mybucket /local/path/
# 示例输出
# Comparing "/local/path/" to "myminio/mybucket/"
# upload: file1.txt -> file1.txt
# missing: file2.txt
# extra: file3.txt
6.8.2 find 操作
# 查找文件
mc find myminio/mybucket --name "*.log"
# 按大小查找
mc find myminio/mybucket --size +1G
# 按时间查找
mc find myminio/mybucket --newer 2024-01-01
# 执行操作
mc find myminio/mybucket --name "*.tmp" --exec "mc rm {}"
6.8.3 encrypt/decrypt
# 批量加密
mc encrypt encrypt --suffix ".conf" myminio/mybucket/
# 批量解密
mc decrypt decrypt --suffix ".conf" myminio/mybucket/
# 重新加密
mc encrypt re-encrypt myminio/mybucket/old-key myminio/mybucket/new-key
6.9 总结
本章深入介绍了 MinIO Client 的高级功能,包括策略管理、SQL 查询、加密操作和通知配置等。熟练掌握这些功能可以更高效地管理 MinIO 存储。下一章将学习 S3 SDK 的使用。