文件传输协议(FTP/SFTP)
从 Operator 5.0.7 开始,MinIO Server RELEASE.2023-04-20T17-56-55Z您可以使用 SSH 文件传输协议 (SFTP) 与 MinIO Operator 租户部署中的对象进行交互。
SFTP 由互联网工程任务组(IETF)定义为 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)
SFTP 由互联网工程任务组(IETF)定义为 SSH 2.0 的扩展。 SFTP 允许通过 SSH 进行文件传输,用于传输层安全协议 (TLS)和虚拟专用网络(VPN)应用程序。
您的 FTP 客户端必须支持 SFTP。
基于 SSL/TLS 的文件传输协议 (FTPS)
FTPS允许通过标准FTP通信通道使用TLS证书进行加密通信。 请注意不要将FTPS与SFTP混淆,因为FTPS不通过安全外壳(SSH)进行通信。
您的 FTP 客户端必须支持 FTPS。
文件传输协议 (FTP)
未加密的文件传输。
MinIO 确实不建议使用未加密的FTP进行文件传输。
支持的指令
启用后,MinIO 支持以下 SFTP 操作:
getputlsmkdirrmdirdelete
MinIO 不支持这两种情况append or rename操作。
注意事项
版本控制
SFTP客户端只能操作于最新版本对象的具体情况:
对于读取操作,MinIO 仅向 SFTP 客户端返回所请求对象的最新版本。
对于写入操作,MinIO采用常规版本控制行为,在指定命名空间创建新的对象版本。
rm和rmdir操作创建DeleteMarkerobjects.
认证与访问
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服务器请求用于数据传输的端口范围。
过程
为所需租户启用 SFTP:
使用以下 Kubectl 命令编辑租户 YAML 配置:
kubectl edit tenants/my-tenant -n my-tenant-ns替换
my-tenant和my-tenant-ns使用所需的租户和命名空间。在
features:section,设置值为enableSFTPtotrue:spec: configuration: name: my-tenant-env-configuration credsSecret: name: my-tenant-secret exposeServices: console: true minio: true features: enableSFTP: true
Kubectl 重启 MinIO 以应用更改。
您也可以设置
enableSFTP在你Helm chart or Kustomize 配置为新创建的租户启用 SFTP。如有需要,请根据本地策略配置SFTP端口的入口规则。
验证配置
以下内容
kubectl get命令用途yq显示值enableSFTP,指示是否启用了 SFTP:kubectl get tenants/my-tenant -n my-tenant-ns -o yaml | yq '.spec.features'替换
my-tenant和my-tenant-ns使用所需的租户和命名空间。如果启用了 SFTP,输出将类似于以下内容:
enableSFTP: true使用您首选的 SFTP 客户端连接到 MinIO 部署。 您必须以具有相应权限的用户身份进行连接。策略允许访问所需的存储桶和对象。
连接到 MinIO 部署的具体方法取决于您使用的 SFTP 客户端。 请参考您客户端的相关文档。
以下示例连接到转发到本地主机系统的 MinIO Tenant SFTP 服务器,并列出名为
runner.> sftp -P 8022 minio@localhost minio@localhost's password: Connected to localhost. sftp> ls runner/ chunkdocs testdir
以下内容kubectl get命令用途yq显示值enableSFTP,指示是否启用了 SFTP:
kubectl get tenants/my-tenant -n my-tenant-ns -o yaml | yq '.spec.features'
替换my-tenant和my-tenant-ns使用所需的租户和命名空间。
如果启用了 SFTP,输出将类似于以下内容:
enableSFTP: true
启用 FTP 和/或 SFTP 端口启动 MinIO。
以下示例启动启用了 FTPS 的 MinIO。
minio server http://server{1...4}/disk{1...4} \ --ftp="address=:8021" \ --ftp="passive-port-range=30000-40000" \ --ftp="tls-private-key=path/to/private.key" \ --ftp="tls-public-cert=path/to/public.crt" \ ...
Note
省略
tls-private-key和tls-public-cert使用 MinIO 默认 TLS 密钥配置 FTPS。 更多信息请参阅MinIO 上的 TLS 文档.minio server http://server{1...4}/disk{1...4} \ --ftp="address=:8021" \ --ftp="passive-port-range=30000-40000" \ --sftp="address=:8022" \ --sftp="ssh-private-key=/home/miniouser/.ssh/id_rsa" \ ...
查看
minio server --ftp和minio server --sftp有关使用这些标志启动 MinIO 服务的详细信息。 要连接到启用 TLS 的 FTP 端口(FTPS),请传递tls-private-key和tls-public-cert键和值也是如此,除非使用 MinIO 默认的 TLS 密钥。该命令的输出应返回一个类似于以下内容的响应:
MinIO FTP Server listening on :8021 MinIO SFTP Server listening on :8022
使用您偏好的FTP客户端连接到MinIO部署。 您必须以具有相应权限的用户身份进行连接。策略允许访问所需的存储桶和对象。
连接到 MinIO 部署的具体方法取决于您使用的 FTP 客户端。 请参考您客户端的相关文档。
要通过TLS连接或通过SSH连接,您必须使用支持所需协议的客户端。
连接到 MinIO
以下示例连接到SFTP服务器,并列出名为 bucket 的内容
runner.> sftp -P 8022 minio@localhost minio@localhost's password: Connected to localhost. sftp> ls runner/ chunkdocs testdir
以下使用 Linux 使用FTP CLI 客户端连接到 MinIO 服务器
minio列出名为 [bucket_name] 的存储桶内容所需的凭据runner> ftp localhost -P 8021 Connected to localhost. 220 Welcome to MinIO FTP Server Name (localhost:user): minio 331 User name ok, password required Password: 230 Password ok, continue Remote system type is UNIX. Using binary mode to transfer files. ftp> ls runner/ 229 Entering Extended Passive Mode (|||39155|) 150 Opening ASCII mode data connection for file list drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 chunkdocs/ drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 testdir/ ...
下载对象
此示例列出存储桶中的项目,然后下载存储桶的内容。
> sftp -P 8022 minio@localhost minio@localhost's password: Connected to localhost. sftp> ls runner/ chunkdocs testdir sftp> get runner/chunkdocs/metadata metadata Fetching /runner/chunkdocs/metadata to metadata metadata 100% 226 16.6KB/s 00:00 sftp>
此示例列出存储桶中的项目,然后下载存储桶的内容。
> ftp localhost -P 8021 Connected to localhost. 220 Welcome to MinIO FTP Server Name (localhost:user): minio 331 User name ok, password required Password: 230 Password ok, continue Remote system type is UNIX. Using binary mode to transfer files.ftp> ls runner/chunkdocs/metadata 229 Entering Extended Passive Mode (|||44269|) 150 Opening ASCII mode data connection for file list -rwxrwxrwx 1 nobody nobody 45 Apr 1 06:13 chunkdocs/metadata 226 Closing data connection, sent 75 bytes ftp> get (remote-file) runner/chunkdocs/metadata (local-file) test local: test remote: runner/chunkdocs/metadata 229 Entering Extended Passive Mode (|||37785|) 150 Data transfer starting 45 bytes 45 3.58 KiB/s 226 Closing data connection, sent 45 bytes 45 bytes received in 00:00 (3.55 KiB/s) ...
使用证书密钥文件通过 SFTP 连接 MinIO
版本 RELEASE.2024-05-07T06-41-25Z 中的新增功能。
MinIO 支持在 SFTP 上基于双向 TLS(mTLS)证书进行身份验证,其中服务器和客户端会相互验证对方的真实性。
这种身份验证类型需要满足以下条件:
受信任证书颁发机构的公钥文件
由受信任证书颁发机构签发和签名的 MinIO 服务器公钥文件
用户公钥文件,由受信任的证书颁发机构为通过SFTP连接的客户端签发并签名,并位于用户的
.ssh文件夹(或操作系统的等效物)
密钥必须包含一个principals list可以认证该密钥的用户:
ssh-keygen -s ~/.ssh/ca_user_key -I miniouser -n miniouser -V +1h -z 1 miniouser1.pub
-s指定用于生成此密钥的证书颁发机构公钥的路径。 指定的公钥必须具有principals包含此用户的列表。-I指定公钥的关键身份标识。-n创建user principals此密钥有效的列表。 您必须包含此密钥有效的用户,并且该用户必须与 MinIO 中的用户名匹配。-V限制生成密钥的有效时长。 在此示例中,密钥有效时长为1小时。 请根据您的需求调整有效时长。-z为密钥添加序列号,以区分此生成的公钥与同一证书颁发机构公钥签名的其他密钥。
MinIO 需要指定用于签署 SFTP 访问证书的证书颁发机构。
启动或重启 MinIO 服务器,并使用--sftp="trusted-user-ca-key=PATH"flag:
minio server {path-to-server} --sftp="trusted-user-ca-key=/path/to/.ssh/ca_user_key.pub" {...other flags}
当通过SFTP连接到MinIO服务器时,客户端会验证MinIO服务器的证书。 随后客户端将自身的证书传递给MinIO服务器。 MinIO服务器通过将生成的密钥与服务器启动时提供的证书颁发机构的已知公钥进行比对,来验证该密钥。
一旦 MinIO 服务器验证了客户端的证书,用户就可以通过 SFTP 连接到 MinIO 服务器:
sftp -P <SFTP port> <server IP>
需要服务账户或LDAP进行身份验证
要强制使用 LDAP 或服务账户凭据对 SFTP 进行身份验证,请在用户名后附加后缀。
有效的后缀可以是=ldap or =svc.
> sftp -P 8022 my-ldap-user=ldap@[minio@localhost]:/bucket
> sftp -P 8022 my-ldap-user=svc@[minio@localhost]:/bucket
替换
my-ldap-user使用用户名。替换
[minio@localhost]使用 MinIO 服务器的地址。