Add MinIO Quota Enforcement Script - minio_quota_checker.py
commit
4d44f96e0d
1 changed files with 65 additions and 0 deletions
65
MinIO Quota Enforcement Script - minio_quota_checker.py.-.md
Normal file
65
MinIO Quota Enforcement Script - minio_quota_checker.py.-.md
Normal file
|
@ -0,0 +1,65 @@
|
|||
# MinIO Quota Enforcement Script
|
||||
|
||||
This script monitors and enforces user-based storage quotas on a MinIO object storage instance. It periodically aggregates disk usage per user, logs warnings for overages, and sets a Redis key when a user exceeds their quota.
|
||||
|
||||
## Features
|
||||
- Fetches MinIO buckets and groups them by user.
|
||||
- Calculates total storage usage for each user.
|
||||
- Logs warnings when a user exceeds their quota.
|
||||
- Uses Redis to store quota exceedance status (`quota_exceeded:username`).
|
||||
- Supports configurable quotas, whitelisted users, and customizable intervals.
|
||||
|
||||
## Configuration
|
||||
The script loads its configuration from environment variables or from `/etc/minio_quota.conf`. Available settings:
|
||||
|
||||
| Variable | Description | Default Value |
|
||||
|--------------------|------------------------------------------------|--------------|
|
||||
| `MINIO_ENDPOINT` | MinIO server endpoint | `play.min.io` |
|
||||
| `MINIO_ACCESS_KEY` | MinIO access key | `your-access-key` |
|
||||
| `MINIO_SECRET_KEY` | MinIO secret key | `your-secret-key` |
|
||||
| `TOTAL_SIZE_LIMIT` | Storage quota per user (e.g., `1G`, `500M`) | `1G` |
|
||||
| `WHITELIST` | Comma-separated list of users exempt from quotas | `admin,superuser` |
|
||||
| `AGGREGATE_INTERVAL` | Interval (seconds) for disk usage aggregation | `600` (10 minutes) |
|
||||
| `REDIS_HOST` | Redis server hostname | `localhost` |
|
||||
| `REDIS_PORT` | Redis server port | `6379` |
|
||||
| `REDIS_DB` | Redis database ID | `0` |
|
||||
| `LOG_FILE` | Log file location | `minio_quota.log` |
|
||||
|
||||
## Installation
|
||||
1. Install dependencies:
|
||||
```sh
|
||||
pip install minio redis
|
||||
```
|
||||
2. (Optional) Create a configuration file at `/etc/minio_quota.conf`:
|
||||
```ini
|
||||
MINIO_ENDPOINT=minio.example.com
|
||||
MINIO_ACCESS_KEY=my-access-key
|
||||
MINIO_SECRET_KEY=my-secret-key
|
||||
TOTAL_SIZE_LIMIT=500M
|
||||
WHITELIST=admin,superuser
|
||||
AGGREGATE_INTERVAL=600
|
||||
REDIS_HOST=localhost
|
||||
REDIS_PORT=6379
|
||||
REDIS_DB=1
|
||||
LOG_FILE=/var/log/minio_quota.log
|
||||
```
|
||||
3. Run the script:
|
||||
```sh
|
||||
python minio_quota.py
|
||||
```
|
||||
|
||||
## How It Works
|
||||
- The script runs in an infinite loop, executing every `AGGREGATE_INTERVAL` seconds.
|
||||
- It fetches all MinIO buckets and groups them by username.
|
||||
- It calculates total storage usage per user and compares it with `TOTAL_SIZE_LIMIT`.
|
||||
- If a user exceeds their quota, a warning is logged and a Redis key `quota_exceeded:username` is set.
|
||||
- Users in the `WHITELIST` are ignored.
|
||||
|
||||
## Handling Quota Enforcement
|
||||
Other services (e.g., Nginx or an API gateway) can check Redis for quota exceedance and enforce restrictions accordingly.
|
||||
|
||||
## Signals & Graceful Shutdown
|
||||
The script handles `SIGINT` and `SIGTERM` signals to allow a clean exit.
|
||||
|
||||
## License
|
||||
This script is provided as-is under an open-source license.
|
Loading…
Add table
Reference in a new issue