第六章: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 的使用。