所有文章 > 学习各类API > 如何在向MinIO发出的REST请求中验证身份
如何在向MinIO发出的REST请求中验证身份

如何在向MinIO发出的REST请求中验证身份

MinIO是一种基于Apache License v2.0开源协议的对象存储服务,兼容亚马逊S3云存储服务接口,适用于存储大容量非结构化数据。本文详细介绍了在向MinIO发出的REST请求中如何验证身份,包括MinIO的基本运行方式、签名方法、通过不同编程语言进行操作以及匿名访问策略的设置。通过这些步骤,用户能够在MinIO环境中有效地进行身份验证和数据管理。

开始运行

MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务,兼容亚马逊 S3 云存储服务接口,非常适合存储大容量非结构化数据,如图片、视频、日志文件等。为了快速启动 MinIO,可以直接下载二进制文件运行,无需额外配置。

Linux:
    wget https://dl.min.io/server/minio/release/linux-ppc64le/minio
    chmod +x minio
    ./minio server /data
Windows:
    https://dl.min.io/server/minio/release/windows-amd64/minio.exe
    minio.exe server D:Photos

安装后,使用浏览器访问 http://127.0.0.1:9000 以验证安装成功。MinIO 提供一个嵌入的 Web 对象浏览器,可以通过该页面或 MinIO 客户端进行操作。

单块传输的签名方法

MinIO 与 Amazon S3 兼容,因此可以使用相同的 SDK 和 REST API 方法。为了进行身份验证,采用 AWS Signature Version 4 签名方法。此方法涉及对请求进行签名以确保安全性。以下是计算签名的函数:

签名计算过程

public static String UriEncode(CharSequence input, boolean encodeSlash) {
    StringBuilder result = new StringBuilder();
    for (int i = 0; i = 'A' && ch = 'a' && ch = '0' && ch <= '9')
        || ch == '_' || ch == '-' || ch == '~' || ch == '.') {
            result.append(ch);
        } else if (ch == '/') {
            result.append(encodeSlash ? "%2F" : ch);
        } else {
            result.append(toHexUTF8(ch));
        }
    }
    return result.toString();
}

在单块传输中,可以选择将 payload 的哈希包含在签名计算中。对于未签名的 payload,使用字符串 “UNSIGNED-PAYLOAD”。

通过 shell 操作

为了实现 MinIO 的 GET 和 PUT 操作,可以使用 shell 脚本进行简单的自动化操作。以下是示例代码:

#!/bin/bash

usage() {
    echo $0 [method] [uri] [file]
    echo $0 GET /bucket/object output_file
    echo $0 PUT /bucket/object input_file
}

method=$1
uri=$2
file=$3

secret_id="minioadmin"
secret_key="minioadmin"
host="154.8.199.216:9000"
region=""

x_amz_date=date --date="8 hour ago" "+%Y%m%dT%H%M%SZ"
date_day=date --date="8 hour ago" "+%Y%m%d"
signed_headers="host;x-amz-date"

send_request() {
    # 创建和发送请求的代码略
}

send_request

默认情况下,MinIO 的 region 为空,因此在请求时需要处理时区问题。

通过 C++ 操作

为了在 C++ 中操作 MinIO,可以使用 aws-sigv4-c 和 cpp-httplib 库。以下是示例代码:

#include "aws_sigv4.h"
#include "httplib.h"
#include 

int main(void) {
    // 初始化代码及请求代码略
    return 0;
}

编译时需要注意链接正确的库文件。

匿名访问存储桶和对象

MinIO 允许为 buckets 和 objects 设置匿名访问策略,可以设置为 none, download, upload, public。

# mc alias set minio http://154.8.199.216:9000 minioadmin minioadmin
# mc mb minio/images
# mc policy set public minio/images/

使用 Webhook 发布 MinIO 事件

通过存储桶事件通知,MinIO 支持将事件发布到 Webhook。以下是配置示例:

# mc admin config set minio notify_webhook:1 endpoint="http://127.0.0.1:8090"
# mc admin service restart minio
# mc event add minio/images arn:minio:sqs::1:webhook --event put,delete

可以通过简单的 Python Web 服务接收并处理这些事件。

from wsgiref.simple_server import make_server

def app(environ, start_response):
    # 获取请求数据并打印
    pass

httpd = make_server('', 8090, app)
httpd.serve_forever()

FAQ

问:如何快速启动 MinIO 并验证安装是否成功?

  • 答:为了快速启动 MinIO,可以直接下载二进制文件运行,无需额外配置。在 Linux 上,使用 wget 下载 MinIO 的二进制文件,然后通过 chmod +x 命令赋予执行权限,并运行 ./minio server /data 来启动服务。在 Windows 上,下载可执行文件后,运行 minio.exe server D:Photos。安装后,使用浏览器访问 http://127.0.0.1:9000 以验证安装成功。

问:如何在向 MinIO 发出的 REST 请求中验证身份?

  • 答:MinIO 采用与 Amazon S3 兼容的 AWS Signature Version 4 签名方法来进行身份验证。此方法涉及对请求进行签名以确保安全性。在签名计算过程中,可以选择将 payload 的哈希包含在签名中,对于未签名的 payload,使用字符串 “UNSIGNED-PAYLOAD”。

问:如何通过 shell 脚本对 MinIO 执行 GET 和 PUT 操作?

  • 答:可以使用 shell 脚本自动化 MinIO 的 GET 和 PUT 操作。脚本需要指定方法(GET 或 PUT)、URI 和文件。使用 secret_idsecret_key 进行身份验证,设置请求的日期和签名头,最后调用 send_request 函数发送请求。

问:如何在 C++ 中操作 MinIO?

  • 答:为了在 C++ 中操作 MinIO,可以使用 aws-sigv4-ccpp-httplib 库。示例代码中需要包含必要的库文件,并在编译时确保链接正确的库文件。

问:如何为 MinIO 存储桶和对象设置匿名访问策略?

  • 答:MinIO 允许为 buckets 和 objects 设置匿名访问策略。可以通过 mc 客户端设置访问策略,例如创建一个存储桶并设置为公共访问:mc alias set minio http://154.8.199.216:9000 minioadmin minioadminmc mb minio/imagesmc policy set public minio/images/
#你可能也喜欢这些API文章!