这是本节的多页打印视图。 .
开发
-
1: Go 快速入门指南
-
2: Python 快速入门指南
-
3: .NET 快速入门指南
-
4: Java 快速入门指南
- 5: MinIO Operator 的 Security Token Service (STS)
-
6: JavaScript 快速入门指南
-
7: Haskell 快速入门指南
- 8: Rust 快速入门指南
-
9: 软件开发工具包(SDK)
-
10: Security Token Service (STS)
- 10.1: AssumeRoleWithCustomToken
- 10.2: AssumeRoleWithLDAPIdentity
- 10.3: AssumeRoleWithWebIdentity
- 11: 使用 Object Lambda 进行转换
- 12: 文件传输协议 (FTP/SFTP)
1 - Go 快速入门指南
MinIO Go SDK
SILO 实现兼容 S3 的服务端契约,因此 Go 应用可以直接使用上游 MinIO Go SDK。当前主版本的模块路径为 github.com/minio/minio-go/v7。
安装模块
在现有 Go 模块中执行:
配置连接
S3_ENDPOINT 只填写主机名和可选端口,不带 http:// 或 https:// 前缀。请把凭据保存在源码仓库之外;端点启用 TLS 时,将 S3_USE_SSL 设为 true。
创建存储桶并上传对象
将以下内容保存为 main.go:
运行示例:
预签名 URL、对象锁定、加密、通知、分段上传等操作见 SDK 的 API 文档与维护中示例。
生产检查清单
- 启用 TLS,并验证服务端证书。
- 从密钥管理系统或受保护的环境中加载凭据。
- 只授予应用实际需要的存储桶与对象权限。
- 同时固定并验证 SDK 与 Go 版本。
- 为请求设置截止时间,并显式处理重试、取消与未完成的分段上传。
服务端策略配置见身份与访问管理。
2 - Python 快速入门指南
MinIO Python SDK
SILO 实现兼容 S3 的服务端契约,因此 Python 应用可以直接使用上游 MinIO Python SDK。
安装软件包
在虚拟环境中安装 minio:
配置连接
S3_ENDPOINT 只填写主机名和可选端口,不带 http:// 或 https:// 前缀。请把凭据保存在源码仓库之外;端点启用 TLS 时,将 S3_USE_SSL 设为 true。
创建存储桶并上传对象
将以下内容保存为 quickstart.py:
运行示例:
预签名 URL、服务端加密、通知、对象锁定、分段上传等操作见仓库的 API 参考与维护中示例。
生产检查清单
- 启用 TLS,并验证服务端证书。
- 从密钥管理系统或受保护的环境中加载凭据。
- 只授予应用实际需要的存储桶与对象权限。
- 同时固定并验证 Python 运行时、SDK 与 HTTP 依赖。
- 定义超时,并显式处理 SDK 异常、重试、流资源与未完成的分段上传。
服务端策略配置见身份与访问管理。
3 - .NET 快速入门指南
MinIO .NET SDK
SILO 实现兼容 S3 的服务端契约,因此应用可以直接使用上游 MinIO .NET SDK,无需 SILO 专用客户端分支。本指南使用稳定的 NuGet 软件包,并通过环境变量传入凭据。
SDK 的运行时要求与 API 会独立于 SILO 演进。为应用选择版本前,请核对当前 NuGet 软件包与 SDK 发布记录。
安装软件包
在现有 .NET 项目中添加 Minio 软件包:
配置连接
设置 SILO 部署的端点与凭据,不要把密钥写进源码仓库。
S3_ENDPOINT 只填写主机名和可选端口,不带 http:// 或 https:// 前缀。端点启用 TLS 时,将 S3_USE_SSL 设为 true。
创建存储桶并上传对象
创建 hello.txt,然后运行项目:
ASP.NET Core 依赖注入与更多操作见 SDK 的当前 README。维护分支还提供简单控制台示例和基于 Host 的示例;把代码复制到固定版本的应用前,请先核对示例所在分支与软件包版本。
生产检查清单
- 启用 TLS,并验证服务端证书。
- 从密钥管理系统或受保护的环境中加载凭据,不要写入源码。
- 只授予应用实际需要的存储桶与对象权限。
- 把 SDK 版本固定与验证纳入应用自身的依赖生命周期。
- 显式处理 SDK 异常、请求取消、重试与分段上传清理。
服务端策略配置见身份与访问管理。
4 - Java 快速入门指南
MinIO Java SDK
SILO 实现兼容 S3 的服务端契约,因此 Java 应用可以直接使用上游 MinIO Java SDK。SDK 支持 Java 8 及更高版本;请同时考虑应用框架对运行时的支持范围。
本页按 SDK 9.0.3 校验。固定依赖前,请核对当前发布记录与 Maven Central 元数据。
安装软件包
在 Maven 中添加依赖:
或在 Gradle 中添加:
配置连接
与部分 MinIO SDK 不同,Java 构造器接受完整的端点 URL,需要包含 http:// 或 https:// 协议。请把凭据保存在源码仓库之外。
创建存储桶并上传对象
预签名 URL、加密、通知、对象锁定、分段上传等操作见 SDK 的 Javadoc与维护中示例。
生产检查清单
- 启用 TLS,并验证服务端证书与信任库。
- 从密钥管理系统或受保护的环境中加载凭据。
- 只授予应用实际需要的存储桶与对象权限。
- 同时固定并验证 JDK、SDK、HTTP 客户端与应用框架版本。
- 配置超时,并显式处理 SDK 异常、重试、流资源与未完成的分段上传。
服务端策略配置见身份与访问管理。
5 - MinIO Operator 的 Security Token Service (STS)
概述
新增: Operator
v5.0.0
MinIO Operator 支持一组 API 调用,使应用程序能够为 MinIO Tenant 获取 STS 凭证。
MinIO Operator 的 STS 具有以下优势:
-
STS 凭证 允许应用程序访问 MinIO Tenant 上的对象,而无需在租户上为该应用创建凭证。
-
允许应用程序使用 Kubernetes 原生认证机制访问 MinIO 租户中的对象。
Service Account 或 Service Account Token 是 Kubernetes 中 Role-Based Access Control (RBAC) authentication 的核心概念。
-
为 MinIO Operator 实现 STS 后,你可以通过租户 custom resource definition (CRD) 和 MinIO PolicyBinding CRD,利用基础设施即代码的原则与配置方式。
重要
从 Operator v5.0.11 开始,STS 默认 启用。
较早版本的 Operator 默认 禁用 STS。 若要在 v5.0.10 或更早版本的 Operator 中使用 STS,必须先显式启用。
本页流程包含在 MinIO Operator 中启用 STS API 的说明。
Kubernetes 中 STS 授权的工作方式
应用程序可以使用包含 Kubernetes Service Account JWT 的 AssumeRoleWithWebIdentity 调用,向 MinIO Operator 请求临时凭证。 当该 Service Account 关联到 Pod 时(例如通过 deployment 的 .spec.spec.serviceAccountName 字段),Kubernetes 会从已知位置挂载该 Service Account 的 JWT,例如 /var/run/secrets/kubernetes.io/serviceaccount/token。 Pod 可以从该位置访问这些 Service Account。
Operator 会检查请求有效性,检索该应用的策略,从租户获取凭证,然后将凭证返回给应用程序。 应用程序使用签发的凭证在该租户上执行对象存储操作。
完整流程包括以下步骤:
- 应用程序向 MinIO Operator 发送
AssumeRoleWithWebidentityAPI 请求,其中包含租户命名空间和要使用的 Service Account。 - MinIO Operator 使用 Kubernetes API 检查应用请求中与 service account 关联的 JSON Web Token (JWT) 是否有效。
- Kubernetes API 返回其有效性检查结果。
- MinIO Operator 检查与应用程序匹配的 Policy Bindings。
- PolicyBinding CRD 返回与请求匹配的策略(如果有)。
- MinIO Operator 将该应用程序的合并策略信息发送给 MinIO Tenant。
- 租户为该请求创建与策略匹配的临时凭证,并将其返回给 MinIO Operator。
- MinIO Operator 将临时凭证转发回应用程序。
- 应用程序使用该凭证向 MinIO Tenant 发起对象存储调用。
要求
MinIO Operator 的 STS 需要满足以下条件:
- MinIO Operator v5.0.0 或更高版本。
- 部署 必须 配置 TLS。
- (Operator v5.0.0 - 5.0.10 必需)
OPERATOR_STS_ENABLED环境变量设置为on。
步骤
-
为部署启用 STS 功能
说明说明
对于 Operator 5.0.11 及更高版本,此步骤是可选的。
-
将
minio-operator替换为你的部署命名空间。 -
将
deployment/minio-operator替换为你的部署中 MinIO Operator 的值。你可以运行
kubectl get deployments -n <namespace>查找 deployment 值,其中<namespace>需替换为 MinIO Operator 的命名空间。 你的 MinIO Operator 命名空间通常是minio-operator,但该值在安装过程中可能发生变化。
-
-
确保 MinIO Tenant 上存在适用于该应用程序的 policy (一个或多个)
下一步会使用 YAML 文档,通过名为
PolicyBinding的 custom resource 将一个或多个现有租户策略映射到 Service Account。 -
为 Service Account 和 Policy Binding 创建 YAML 资源:
-
在 MinIO Tenant 中创建供应用程序使用的 Service Account。
关于 Kubernetes 中 Service Account 的更多信息,请参见 Kubernetes 文档。
-
在目标租户命名空间中创建 Policy Binding,将应用程序关联到 MinIO Tenant 的一个或多个策略。
-
-
将 YAML 文件应用到部署以创建资源
-
使用支持
AssumeRoleWithWebIdentity类行为的 SDK,从你的应用程序向部署发送调用STS API 要求 Kubernetes 环境中存在该 Service Account 的 JWT。 当该 Service Account 关联到 Pod 时(例如通过 deployment 的
.spec.spec.serviceAccountName字段),Kubernetes 会从已知位置挂载该 Service Account 的 JWT,例如/var/run/secrets/kubernetes.io/serviceaccount/token。或者,你也可以将 token 路径定义为环境变量:
以下 MinIO SDK 支持
AssumeRoleRoleWithWebIdentity:关于使用 SDK Assume role 的示例,请参见 Operator v7.1.1 示例。
示例资源
Service Account(服务账户)
Service Account 是一种 Kubernetes 资源类型,允许外部应用程序与 Kubernetes 部署交互。 当该 Service Account 关联到 Pod 时(例如通过 deployment 的 .spec.spec.serviceAccountName 字段),Kubernetes 会从已知位置挂载该 Service Account 的 JWT,例如 /var/run/secrets/kubernetes.io/serviceaccount/token。
以下 YAML 会在 sts-client 命名空间中创建名为 stsclient-sa 的 Service Account。
Policy Binding(策略绑定)
PolicyBinding 是 Kubernetes 中 MinIO 特有的 custom resource 类型,用于将 application 关联到一组策略。
在其所属租户的命名空间中创建 Policy Binding。
在 MinIO Operator 的语境下,application 是指任何使用特定 Service Account 和租户命名空间进行标识的请求资源。 PolicyBinding 资源将该 application 关联到该命名空间中租户的一个或多个策略。
下面的 YAML 创建了一个 PolicyBinding,将位于 sts-client 命名空间中、使用 Service Account stsclient-sa 的 application,关联到位于 minio-tenant-1 命名空间的目标租户中的策略 test-bucket-rw。 YAML 定义中授予的策略 必须 已存在于 MinIO Tenant 上。
参考
6 - JavaScript 快速入门指南
MinIO JavaScript SDK
SILO 实现兼容 S3 的服务端契约,因此 Node.js 应用可以直接使用上游 MinIO JavaScript SDK。请选择受所用软件包版本支持、且仍在维护的 Node.js 版本。
安装软件包
该软件包已内置 TypeScript 类型声明,不要再安装旧的 @types/minio 软件包。
配置连接
不要把凭据写进源码仓库。连接启用 TLS 的部署时,请将 S3_USE_SSL 设为 true,并使用对应的 TLS 服务端口。
创建存储桶并上传对象
将下面的内容保存为 quickstart.mjs:
运行:
存储桶策略、通知、对象锁、预签名 URL、分段操作与其他 API 见仓库的 API 参考和持续维护的示例目录。长期文档应优先链接稳定目录,而不是持续复制单个示例文件名的假设。
生产检查清单
- 启用 TLS,并验证服务端证书。
- 从密钥管理系统或受保护的环境中加载凭据。
- 只授予应用实际需要的存储桶与对象权限。
- 一并固定并验证 SDK 版本、Node.js 运行时、超时行为与重试策略。
- 显式处理数据流、请求错误、未完成的分段上传与进程退出。
服务端策略配置见身份与访问管理。
7 - Haskell 快速入门指南
MinIO Haskell SDK
SILO 实现兼容 S3 的服务端契约,因此 Haskell 应用可以直接使用上游 minio-hs 软件包。
安装软件包
将 minio-hs 加入 Cabal 软件包的 build-depends,或加入 package.yaml 的依赖列表。要交互式查看已安装 API,可执行:
然后在 GHCi 中运行 :browse Network.Minio。
配置连接
1.7.0 提供的 fromMinioEnv 会读取以下凭据变量:
S3_ENDPOINT 是包含 http:// 或 https:// 协议的完整 URL。请把凭据保存在源码仓库之外。
创建存储桶并上传对象
将以下内容保存为 Main.hs:
创建 hello.txt,然后使用项目选定的构建工具与 resolver 运行程序。仓库的示例目录与 API 参考涵盖流处理、预签名 URL、加密、通知、对象锁定等操作。
生产检查清单
- 启用 TLS 并验证服务端证书,不要关闭证书校验。
- 从密钥管理系统或受保护的环境中加载凭据。
- 只授予应用实际需要的存储桶与对象权限。
- 同时固定并验证 GHC、resolver、SDK、TLS 与 HTTP 依赖版本。
- 定义超时,并显式处理
MinioErr、重试、资源清理与未完成的分段上传。
服务端策略配置见身份与访问管理。
8 - Rust 快速入门指南
MinIO Rust SDK
SILO 实现兼容 S3 的服务端契约,因此 Rust 应用可以直接使用上游 MinIO Rust SDK。该 crate 提供异步、强类型的请求构建器 API。
安装软件包
在 Cargo.toml 中加入 SDK 与 Tokio 运行时:
配置连接
S3_ENDPOINT 是包含 http:// 或 https:// 协议的完整 URL。请把凭据保存在源码仓库之外。
创建存储桶并上传对象
使用 cargo run 运行示例。仓库的维护中示例与 API 文档涵盖文件上传、流处理、加密、通知、对象锁定等操作。
生产检查清单
- 启用 TLS,并验证服务端证书。
- 从密钥管理系统或受保护的环境中加载凭据。
- 只授予应用实际需要的存储桶与对象权限。
- 同时固定并验证 Rust 工具链、SDK、Tokio、HTTP、TLS 与密码学特性。
- 定义超时,并显式处理错误、重试、任务取消与未完成的分段上传。
服务端策略配置见身份与访问管理。
9 - 软件开发工具包(SDK)
MinIO 提供以下软件开发工具包(SDK):
Go
GitHub: minio/minio-go
最新版本:GOVERSION
快速入门:Go 快速入门指南
通过 GitHub 下载
Python
GitHub: minio/minio-py
最新版本:PYTHONVERSION
快速入门:Python 快速入门指南
安装
pip
源码
Java
GitHub: minio/minio-java
最新版本:JAVAVERSION
快速入门:Java 快速入门指南
安装
Maven
Gradle
JAR
从 Sonatype Maven Central Repository 下载与 SDK 版本 JAVAVERSION 对应的最新 JAR 文件。
.NET
GitHub: minio/minio-dotnet
最新版本:DOTNETVERSION
快速入门:.NET 快速入门指南
从 NuGet 下载
在 NuGet Package Manager Console 中运行以下命令。
JavaScript
GitHub: minio/minio-js
最新版本:JAVASCRIPTVERSION
快速入门:JavaScript 快速入门指南
安装
NPM
源码
Haskell
GitHub: minio/minio-hs
最新版本:HASKELLVERSION
快速入门:Haskell 快速入门指南
安装
将
minio-hs添加到项目.cabal的dependencies部分。或
如果你使用
hpack,请将minio-hs添加到package.yaml文件中。
C++
GitHub: minio/minio-cpp
安装
vcpkg源码
Rust
GitHub: minio/minio-rs
最新版本
RUSTVERSION
快速入门:Rust 快速入门指南
10 - Security Token Service (STS)
MinIO Security Token Service (STS) APIs 允许应用程序生成用于访问 MinIO 部署的临时凭证。
对于配置为使用外部身份管理器的 MinIO 部署,STS API 是 必需 的,因为该 API 可将外部 IDP 凭证转换为兼容 AWS Signature v4 的凭证。
STS API 端点
MinIO 支持以下 STS API 端点:
| 端点 | 支持的 IDP | 说明 |
|---|---|---|
| AssumeRoleWithWebIdentity | OpenID Connect | 使用 OIDC 提供方返回的 JWT token 生成 access key 和 secret key |
| AssumeRoleWithLDAPIdentity | Active Directory / LDAP | 使用为该 API 端点指定的 AD/LDAP 凭证生成 access key 和 secret key。 |
| AssumeRoleWithCustomToken | MinIO Identity Plugin | 生成一个 token,用于外部身份提供方和 MinIO Identity Plugin。 |
10.1 - AssumeRoleWithCustomToken
MinIO Security Token Service (STS) 的 AssumeRoleWithCustomToken API 端点会生成一个令牌,用于配合 MinIO External Identity Management Plugin 使用。
请求端点
AssumeRoleWithCustomToken 端点的格式如下:
以下示例使用了所有受支持的参数。 请将 minio.example.net 主机名替换为你的 MinIO 集群对应 URL:
请求查询参数
此端点支持以下查询参数:
参数 |
类型 |
说明 |
|---|---|---|
|
string |
必填 指定提交给外部身份管理器的 JSON Token。 MinIO 期望身份管理器解析该令牌,并判断是否使用该令牌对客户端请求进行认证。 |
|
string |
必填 指定 |
|
string |
必填 指定与此 STS 请求关联的 Identity Manager Plugin 配置 ARN。 更多信息请参见 请注意,MinIO 在生成 RoleArn 时会自动为已配置的 |
|
integer |
可选 指定临时凭证在多少秒后过期。
默认值为
|
响应元素
MinIO 返回一个 AssumeRoleWithCustomTokenResult 对象,其中 AssumedRoleUser.Credentials 对象包含 MinIO 生成的临时凭证:
AccessKeyId- 应用程序用于认证的访问密钥。SecretKeyId- 应用程序用于认证的 Secret Key。Expiration- 凭证过期的 RFC3339 日期和时间。SessionToken- 应用程序用于认证的会话令牌。某些 SDK 在使用临时凭证时可能要求此字段。
以下示例与 MinIO STS AssumeRoleWithCustomToken 端点返回的响应类似:
错误元素
此 API 端点的 XML 错误响应与 AWS AssumeRoleWithWebIdentity response 类似。
10.2 - AssumeRoleWithLDAPIdentity
MinIO Security Token Service (STS) AssumeRoleWithLDAPIdentity API 端点使用 Active Directory 或 LDAP 用户凭据生成临时访问凭据。本文档介绍 MinIO 服务端 AssumeRoleWithLDAPIdentity 端点。有关如何使用兼容 S3 的 SDK 实现 STS,请参考对应 SDK 的文档。
MinIO STS AssumeRoleWithLDAPIdentity API 端点以 AWS AssumeRoleWithWebIdentity 端点为模型,并共享部分请求/响应元素。本文档介绍 MinIO 特有的语法,并为 所有共享元素提供指向 AWS 参考文档的链接。
请求端点
AssumeRoleWithLDAPIdentity 端点格式如下:
以下示例使用了所有受支持参数。请将 minio.example.net 主机名替换为你的 MinIO 集群对应的 URL:
请求查询参数
该端点支持以下查询参数:
参数 |
类型 |
说明 |
|---|---|---|
|
string |
必需 指定要进行认证的 AD/LDAP 用户名。 |
|
string |
必需 指定 |
|
string |
必需 指定 |
|
integer |
可选 指定临时凭据在多少秒后过期。默认值为
如果省略 |
|
string |
可选 指定 URL 编码的 JSON 格式 policy,作为内联会话策略使用。
临时凭据的最终权限是以下两者的交集:与 内联策略可以指定 DN 策略允许权限的子集。应用可获取的权限绝不会超过 DN 策略中定义的权限。 省略该参数则仅使用 DN 策略。 有关 MinIO 认证与授权的更多信息,请参见 Access Management。 |
响应元素
此 API 端点的 XML 响应与 AWS 的 AssumeRoleWithLDAPIdentity response. 类似。具体而言,MinIO 返回 AssumeRoleWithLDAPIdentityResult 对象,其中 AssumedRoleUser.Credentials 对象包含 MinIO 生成的临时凭据:
AccessKeyId- 应用用于认证的访问密钥。SecretKeyId- 应用用于认证的密钥。Expiration- 凭据过期时间,采用 RFC3339 日期时间格式。SessionToken- 应用用于认证的会话令牌。某些 SDK 在使用临时凭据时可能需要此字段。
以下示例与 MinIO STS AssumeRoleWithLDAPIdentity 端点返回的响应类似:
错误元素
此 API 端点的 XML 错误响应与 AWS 的 AssumeRoleWithLDAPIdentity response.
10.3 - AssumeRoleWithWebIdentity
MinIO Security Token Service (STS) AssumeRoleWithWebIdentity API 端点使用由 已配置的 OpenID Identity Provider (IDP) 返回的 JSON Web Token (JWT) 生成临时访问凭证。本文档说明 MinIO 服务器的 AssumeRoleWithWebIdentity 端点。关于如何使用 S3 兼容 SDK 实现 STS,请参阅对应 SDK 的文档。
MinIO STS AssumeRoleWithWebIdentity API 端点参考了 AWS AssumeRoleWithWebIdentity 端点,并共享部分请求/响应元素。本文档说明 MinIO 特有语法,并链接到 AWS 参考文档以获取 所有共享元素的说明。
请求端点
AssumeRoleWithWebIdentity 端点格式如下:
以下示例使用了所有受支持参数。请将 minio.example.net 主机名替换为你的 MinIO 集群对应 URL:
请求查询参数
该端点支持以下查询参数:
参数 |
类型 |
说明 |
|---|---|---|
|
string |
必填 指定由 已配置的 OpenID Identity Provider 返回的 JSON Web Token (JWT)。 |
|
string |
必填 指定 |
|
integer |
可选 指定临时凭证过期前的秒数。
默认为
如果省略 |
|
string |
可选 指定 URL 编码、JSON 格式的 policy, 作为内联会话策略使用。
临时凭证的最终权限是 JWT claim 中指定策略与所给内联策略的交集。应用只能执行那些已被显式授权的操作。 内联策略可以指定 JWT claim 策略所允许权限的子集。 应用绝不会获得超出 JWT claim 策略所指定范围的权限。 省略该参数则仅使用 JWT claim 策略。 有关 MinIO 认证与授权的更多信息,请参见 Access Management。 |
|
string |
可选 用于所有用户认证请求的角色 Amazon Resource Number (ARN)。
如果使用该参数,必须通过 使用时,所有有效的授权请求都会假定同一组由 RolePolicy 提供的权限。 你可以使用 OpenID Policy Variables 创建策略, 以编程方式管理每个用户可访问的内容。 如果未提供 RoleArn,MinIO 会尝试通过基于 JWT 的 claim 进行授权。 |
响应元素
该 API 端点的 XML 响应与 AWS AssumeRoleWithWebIdentity response 类似。具体而言,MinIO 返回 AssumeRoleWithWebIdentityResult 对象, 其中 AssumedRoleUser.Credentials 对象包含 MinIO 生成的临时 凭证:
AccessKeyId- 应用用于认证的访问密钥。SecretKeyId- 应用用于认证的 Secret Key。Expiration- 凭证过期的 RFC3339 日期和时间。SessionToken- 应用用于认证的会话 token。某些 SDK 在使用临时凭证时可能需要此字段。
以下示例与 MinIO STS AssumeRoleWithWebIdentity 端点返回的响应类似:
错误元素
该 API 端点的 XML 错误响应与 AWS AssumeRoleWithWebIdentity response 类似。
11 - 使用 Object Lambda 进行转换
MinIO 的 Object Lambda 使开发者能够按需以编程方式转换对象。 你可以根据具体用例按需转换对象,例如脱敏个人身份信息(PII)、使用其他来源的信息增强数据,或在不同格式之间进行转换。
概述
Object Lambda handler 是一个小型代码模块,用于转换对象内容并返回结果。 与 Amazon S3 Object Lambda functions 类似,你可以从应用程序发起 GET 请求来触发 MinIO Object Lambda handler 函数。 handler 从 MinIO 获取请求的对象,执行转换后将修改后的数据返回给 MinIO,再由 MinIO 发送回原始应用程序。 原始对象保持不变。
每个 handler 都是独立进程,且多个 handler 可以转换同一份数据。 这使你可以将同一个对象用于不同目的,而无需维护原始对象的多个版本。
Object Lambda Handlers
你可以使用任何能够发送和接收 HTTP 请求的语言编写 handler 函数。 该函数必须能够:
- 监听 HTTP POST 请求。
- 使用 URL 获取原始对象。
- 返回转换后的内容和授权令牌。
创建函数
handler 函数应执行以下步骤:
-
从传入的 POST 请求中提取对象详细信息。
JSON 请求负载中的
getObjectContext属性包含原始对象的详细信息。 要构造响应,你需要以下值:值 说明 inputS3Url原始对象的 presigned URL。 调用应用程序会生成该 URL,并在原始请求中发送它。 这使 handler 无需通常所需的 MinIO 凭证即可访问原始对象。 该 URL 的有效期为一小时。 outputRoute允许 MinIO 验证转换后对象目标位置的令牌。 在响应中的 x-amz-request-routeheader 返回该值。outputToken允许 MinIO 验证响应的令牌。 在响应中的 x-amz-request-tokenheader 返回该值。 -
从 MinIO 获取原始对象。
使用 presigned URL 从 MinIO 部署中获取对象。 对象内容位于响应体中。
-
按需转换对象。
执行生成转换后对象所需的任意操作。 由于调用应用程序正在等待响应,你可能希望避免潜在的长时间运行操作。
-
构造包含以下信息的响应:
- 转换后对象的内容。
- 带有
outputRoute令牌的x-amz-request-routeheader。 - 带有
outputToken令牌的x-amz-request-tokenheader。
-
将响应返回给 Object Lambda。
MinIO 会验证响应,并将转换后的数据发送回原始调用应用程序。
响应头
handler 必须 在对应的响应头中包含 outputRoute 和 outputToken 值。 这使 MinIO 能够正确验证来自 handler 的响应。
注册 Handler
要使 MinIO 能够调用 handler,请使用以下 MinIO server Object Lambda environment variables 将 handler 函数注册为 webhook:
MINIO_LAMBDA_WEBHOOK_ENABLE_functionname
为某个 handler 函数启用或禁用 Object Lambda。 对于多个 handler,请为每个函数名设置该环境变量。
MINIO_LAMBDA_WEBHOOK_ENDPOINT_functionname
为某个 handler 函数注册 endpoint。 对于多个 handler,请为每个函数 endpoint 设置该环境变量。
MinIO 还支持以下用于已认证 webhook endpoint 的环境变量:
MINIO_LAMBDA_WEBHOOK_AUTH_TOKEN_functionanme
指定用于 webhook 认证的 opaque string 或 JWT 授权令牌。
MINIO_LAMBDA_WEBHOOK_CLIENT_CERT_functionname
指定用于 webhook mTLS 认证的客户端证书。
MINIO_LAMBDA_WEBHOOK_CLIENT_KEY_functionname
指定用于 webhook mTLS 认证的私钥。
重启 MinIO 以应用更改。
或者,也可以通过 MinIO Client 命令行工具配置 Object Lambda。 更多信息请参见 Object Lambda 函数设置。
从应用程序触发
要从应用程序请求转换后的对象:
-
连接到 MinIO 部署。
-
通过添加
lambdaArn参数并设置目标 handler 的 ARN,设置 Object Lambda 目标。 -
为原始对象生成 presigned URL。
-
使用生成的 URL 获取转换后的对象。
MinIO 将请求发送到目标 Object Lambda handler。 handler 将转换后的内容返回给 MinIO,MinIO 会验证该响应并将其返回给应用程序。
示例
使用 Python、Go 和 curl 转换对象内容:
- 创建并注册一个 Object Lambda handler。
- 创建一个存储桶和要转换的对象。
- 请求并显示转换后的对象内容。
前提条件:
- 已存在的 MinIO 部署
- 可用的 Python(3.8+)和 Golang 开发环境
- The MinIO Go SDK
创建 Handler
示例 handler 使用 Python 编写,使用调用方生成的 presigned URL 获取目标对象。 随后,handler 转换对象内容并返回新文本。 它使用 Flask web framework 和 Python 3.8+。
以下命令安装 Flask 和其他所需依赖:
handler 调用 swapcase() 来切换原始文本中每个字母的大小写。 随后它将结果发送回 MinIO,再由 MinIO 返回给调用方。
启动 Handler
使用以下命令在本地开发环境中启动 handler:
输出类似如下:
启动 MinIO
handler 运行后,使用 MINIO_LAMBDA_WEBHOOK_ENABLE 和 MINIO_LAMBDA_WEBHOOK_ENDPOINT 环境变量启动 MinIO,以将该函数注册到 MinIO。 要标识具体的 Object Lambda handler,请将函数名追加到环境变量名后。
以下命令在本地开发环境中启动 MinIO:
将 myfunction 替换为你的 handler 函数名,并将 /data 替换为本地部署中 MinIO 目录的位置。 输出类似如下:
测试 Handler
要测试 Lambda handler 函数,请先创建一个待转换对象。 然后调用 handler,本例中使用 Go 函数生成的 presigned URL 配合 curl 调用。
-
创建供 handler 转换的存储桶和对象。
-
调用 Handler
以下 Go 代码使用 The MinIO Go SDK 生成 presigned URL 并打印到
stdout。在上述代码中,替换以下值:
- 将
my_admin_user和my_admin_password替换为 MinIO 部署的用户凭证。 - 将
myfunction替换为在MINIO_LAMBDA_WEBHOOK_ENABLE和MINIO_LAMBDA_WEBHOOK_ENDPOINT环境变量中设置的相同函数名。
要获取转换后的对象,执行该 Go 代码并使用
curl生成 GET 请求:curl会运行 Go 代码,然后通过对 presigned URL 发起 GET 请求来获取对象。 输出类似如下: - 将
12 - 文件传输协议 (FTP/SFTP)
从 MinIO Operator 5.0.7 和 MinIO Server RELEASE.2023-04-20T17-56-55Z 起,你可以使用 SSH 文件传输协议 (SFTP) 与 MinIO Operator 租户部署中的对象交互。
互联网工程任务组 (IETF) 将 SFTP 定义为 SSH 2.0 的扩展。 它允许通过 SSH 进行文件传输,可用于 传输层安全 (TLS) 和虚拟专用网络 (VPN) 场景。
启用 SFTP 不会影响其他 MinIO 功能。
从 MinIO Server RELEASE.2023-04-20T17-56-55Z 起,你可以使用文件传输协议 (FTP) 与 MinIO 部署中的对象交互。
启动服务器时,你必须显式启用 FTP 或 SFTP。 启用任一服务器类型都不会影响其他 MinIO 功能。
本页下文统一使用缩写 FTP,但你可以使用下文描述的任意受支持 FTP 协议。
支持的协议
MinIO Operator 仅支持配置 SSH 文件传输协议 (SFTP)。
启用后,MinIO 支持通过以下协议进行 FTP 访问:
-
SSH 文件传输协议 (SFTP)
互联网工程任务组 (IETF) 将 SFTP 定义为 SSH 2.0 的扩展。 SFTP 允许通过 SSH 进行文件传输,可用于 传输层安全 (TLS) 和虚拟专用网络 (VPN) 场景。
你的 FTP 客户端必须支持 SFTP。
-
通过 SSL/TLS 的文件传输协议 (FTPS)
FTPS 允许在标准 FTP 通信通道上使用 TLS 证书进行加密传输。 不应将 FTPS 与 SFTP 混淆,因为 FTPS 并不通过 Secure Shell (SSH) 通信。
你的 FTP 客户端必须支持 FTPS。
-
文件传输协议 (FTP)
不加密的文件传输。
MinIO 不 建议使用未加密的 FTP 进行文件传输。
支持的命令
启用后,MinIO 支持以下 SFTP 操作:
getputlsmkdirrmdirdelete
MinIO 不支持 append 或 rename 操作。
注意事项
版本控制
SFTP 客户端只能操作对象的 当前版本。 具体来说:
- 对于读取操作,MinIO 只会向 SFTP 客户端返回所请求对象的最新版本。
- 对于写入操作,MinIO 会应用正常的版本控制行为,并在指定命名空间中创建新的对象版本。
rm和rmdir操作会创建DeleteMarker对象。
身份验证与访问控制
SFTP 访问与其他 S3 客户端一样,使用相同的身份验证机制。 MinIO 支持以下身份验证提供方:
- MinIO IDP 用户及其服务账户
- Active Directory/LDAP 用户及其服务账户
- OpenID/OIDC 服务账户
STS 凭证 不能 通过 SFTP 访问存储桶或对象。
已通过身份验证的用户可依据分配给该用户或其父用户账号的 策略 访问存储桶和对象。
SFTP 协议不需要任何 admin:* 权限。 你不能通过 SFTP 执行其他 MinIO 管理操作。
前提条件
- MinIO Operator v5.0.7 或更高版本。
- 为服务器启用一个 SFTP 端口 (8022)。
- 一个用于 SFTP 命令的端口,以及一个端口范围,用于允许 SFTP 服务器在数据传输期间按需请求使用。
- MinIO RELEASE.2023-04-20T17-56-55Z 或更高版本。
- 为服务器启用一个 FTP 或 SFTP 端口。
- 一个用于 FTP 命令的端口,以及一个端口范围,用于允许 FTP 服务器在数据传输期间按需请求使用。
操作步骤
-
为目标 Tenant 启用 SFTP:
使用以下 Kubectl 命令编辑 Tenant YAML 配置:
将
my-tenant和my-tenant-ns替换为目标 Tenant 和命名空间。在
features:部分,将enableSFTP的值设置为true:Kubectl 会重启 MinIO 以应用更改。
你也可以在 Helm chart 或 Kustomize 配置 中设置
enableSFTP,为新创建的 Tenant 启用 SFTP。 -
如有需要,请根据本地策略为 SFTP 端口配置 ingress。
-
验证配置
以下
kubectl get命令使用 yq 显示enableSFTP的值,以确认是否已启用 SFTP:将
my-tenant和my-tenant-ns替换为目标 Tenant 和命名空间。如果已启用 SFTP,输出类似如下:
-
使用你偏好的 SFTP 客户端连接到 MinIO 部署。 你必须以其 策略 允许访问目标存储桶和对象的用户身份进行连接。
连接到 MinIO 部署的具体方式取决于所使用的 SFTP 客户端。 请参阅该客户端的文档。
以下示例连接到转发到本地主机系统的 MinIO Tenant SFTP 服务器,并列出名为
runner的存储桶内容。
以下 kubectl get 命令使用 yq 显示 enableSFTP 的值,以确认是否已启用 SFTP:
将 my-tenant 和 my-tenant-ns 替换为目标 Tenant 和命名空间。
如果已启用 SFTP,输出类似如下:
-
启动 MinIO 并启用 FTP 和/或 SFTP 端口。
2. 使用你偏好的 FTP 客户端连接到 MinIO 部署。 你必须使用其 [策略](/zh/administration/identity-access-management/policy-based-access-control/#minio-policy) 允许访问目标存储桶和对象的用户身份进行连接。以下示例以启用 FTPS 的方式启动 MinIO。
说明说明
省略
tls-private-key和tls-public-cert可使用 MinIO 默认 TLS 密钥进行 FTPS 连接。 更多信息请参阅 MinIO TLS 文档。有关使用这些标志启动 MinIO 服务的详细信息,请参阅
minio server --ftp和minio server --sftp。 若要通过 TLS (FTPS) 连接到 FTP 端口,除非使用 MinIO 默认 TLS 密钥,否则还需要传入tls-private-key和tls-public-cert键值。命令输出应类似如下:
连接到 MinIO 部署的具体方式取决于所使用的 FTP 客户端。 请参阅该客户端的文档。
若要通过 TLS 或 SSH 连接,必须使用支持相应协议的客户端。 3. 连接到 MinIO
4. 下载对象以下示例连接到 SFTP 服务器,并列出名为
runner的存储桶内容。以下示例使用 Linux 的 FTP CLI client,通过
minio凭证连接到 MinIO 服务器,并列出名为runner的存储桶内容。本示例先列出存储桶中的条目,然后下载该存储桶中的内容。
本示例先列出存储桶中的条目,然后下载该存储桶中的内容。
使用证书密钥文件通过 SFTP 连接到 MinIO
新增: RELEASE.2024-05-07T06-41-25Z
MinIO 支持在 SFTP 上使用基于证书的双向 TLS (mTLS) 身份验证,服务器与客户端会相互验证对方的真实性。
这种身份验证方式需要以下材料:
- 受信任证书颁发机构的公钥文件
- 由受信任证书颁发机构签发并签名的 MinIO Server 公钥文件
- 供通过 SFTP 连接的客户端使用的用户公钥文件。该文件由受信任证书颁发机构签发并签名,并位于用户的
.ssh文件夹中(或操作系统中的等效位置)
这些密钥必须包含可使用该密钥进行身份验证的用户的 principals 列表:
-
-s指定用于生成此密钥的证书颁发机构公钥路径。指定的公钥必须具有包含该用户的
principals列表。 -
-I指定该公钥的密钥标识。 -
-n创建此密钥有效的user principals列表。 你必须包含该密钥有效的用户,且该用户必须与 MinIO 中的用户名匹配。 -
-V限制生成密钥的有效时长。 在此示例中,该密钥的有效期为一小时。 请根据需求调整时长。 -
-z为密钥添加序列号,以便将此生成的公钥与由同一证书颁发机构公钥签名的其他密钥区分开。
MinIO 要求指定用于签发 SFTP 访问证书的证书颁发机构 (Certificate Authority)。 启动或重启 MinIO Server,并通过 --sftp="trusted-user-ca-key=PATH" 参数指定受信任证书颁发机构公钥的路径:
通过 SFTP 连接到 MinIO 服务端 时,客户端会先验证 MinIO Server 的证书。 随后,客户端会将自己的证书发送给 MinIO Server。 MinIO Server 会将上面创建的密钥与服务器启动时提供的证书颁发机构公钥进行比对,以验证该密钥。
一旦 MinIO Server 验证了客户端证书,用户就可以通过 SFTP 连接到 MinIO 服务端:
要求使用服务账户或 LDAP 进行身份验证
若要强制使用 LDAP 或服务账户凭证进行 SFTP 身份验证,请在用户名后附加后缀。 有效后缀为 =ldap 或 =svc。
- 将
my-ldap-user替换为要使用的用户名。 - 将
[minio@localhost]替换为 MinIO 服务器地址。