文档

文件传输协议 (FTP/SFTP)

Operator 版本新增功能: v5.0.7

概述

从 Operator 5.0.7 和 MinIO 服务器 RELEASE.2023-04-20T17-56-55Z 开始,您可以使用 SSH 文件传输协议 (SFTP) 与 MinIO 运算符租户部署上的对象进行交互。

SFTP 由互联网工程任务组 (IETF) 定义为 SSH 2.0 的扩展。它允许通过 SSH 进行文件传输,用于 传输层安全 (TLS) 和虚拟专用网络 (VPN) 应用程序。

启用 SFTP 不会影响其他 MinIO 功能。

支持的命令

启用后,MinIO 支持以下 SFTP 操作

  • get

  • put

  • ls

  • mkdir

  • rmdir

  • delete

MinIO 不支持 appendrename 操作。

MinIO 运算符仅支持 SFTP 文件传输协议。其他协议(例如 FTP)不支持访问租户。

注意事项

版本控制

SFTP 客户端只能操作对象的 最新版本。具体来说

  • 对于读取操作,MinIO 仅将请求对象(s)的最新版本返回给 SFTP 客户端。

  • 对于写入操作,MinIO 应用正常的版本控制行为并在指定的命名空间中创建一个新的对象版本。 rmrmdir 操作创建 DeleteMarker 对象。

身份验证和访问

SFTP 访问需要与任何其他 S3 客户端相同的身份验证。MinIO 支持以下身份验证提供程序

STS 凭据**无法**通过 SFTP 访问存储桶或对象。

经过身份验证的用户可以根据分配给用户或父用户帐户的 策略 访问存储桶和对象。

SFTP 协议不需要任何 admin:* 权限。您不能使用 SFTP 执行其他 MinIO 管理操作。

先决条件

  • MinIO 运算符 v5.0.7 或更高版本。

  • 为服务器启用 SFTP 端口 (8022)。

  • 用于 SFTP 命令的端口以及允许 SFTP 服务器请求用于数据传输的端口范围。

步骤

  1. 为所需的租户启用 SFTP

    • 在操作员控制台中,点击要为其启用 SFTP 的租户。

    • 配置 选项卡中,将 SFTP 切换到 已启用

    • 点击 保存

    • 点击 重启 以重启 MinIO 并应用更改。

    使用以下 Kubectl 命令编辑租户 YAML 配置

    kubectl edit tenants/my-tenant -n my-tenant-ns
    

    my-tenantmy-tenant-ns 替换为所需的租户和命名空间。

    features: 部分,将 enableSFTP 的值设置为 true

    spec:
      configuration:
        name: my-tenant-env-configuration
      exposeServices:
        console: true
        minio: true
      features:
        enableSFTP: true
    

    Kubectl 重启 MinIO 以应用更改。

    您也可以在您的 Helm 图表Kustomize 配置 中设置 enableSFTP 以为新创建的租户启用 SFTP。

  2. 如果需要,请根据您的本地策略配置 SFTP 端口的 Ingress。

  3. 使用您首选的 SFTP 客户端连接到 MinIO 部署。您必须以用户的身份连接,其 策略 允许访问所需的存储桶和对象。

    连接到 MinIO 部署的具体细节取决于您的 SFTP 客户端。请参阅客户端的文档。

示例

以下示例使用 Linux 系统上的 SFTP CLI 客户端

使用 SFTP 连接到 MinIO

以下示例连接到 SFTP 服务器,列出名为 test-bucket 的存储桶的内容,并下载一个对象。

sftp -P 8022 my-access-key@localhost
my-access-key@localhost's password:
Connected to localhost.
sftp> ls
test-bucket
sftp> ls test-bucket
test-bucket/test-file.txt
sftp> get test-bucket/test-file.txt
Fetching /test-bucket/test-file.txt to test-file.txt
test-file.txt                    100%    6     1.3KB/s   00:00

检查租户是否启用了 SFTP

以下 kubectl get 命令使用 yq 显示 enableSFTP 的值,指示是否启用了 SFTP

kubectl get tenants/my-tenant -n my-tenant-ns -o yaml | yq '.spec.features'

my-tenantmy-tenant-ns 替换为所需的租户和命名空间。

如果启用了 SFTP,则输出类似于以下内容

enableSFTP: true

使用证书密钥文件连接到 MinIO 使用 SFTP

RELEASE.2024-05-07T06-41-25Z 版本新增功能。

MinIO 支持 SFTP 上基于证书的双向 TLS (mTLS) 身份验证,其中服务器和客户端都验证彼此的身份。

这种类型的身份验证需要以下内容

  1. 受信任证书颁发机构的公钥文件

  2. 由受信任证书颁发机构签发的 MinIO 服务器的公钥文件

  3. 由受信任证书颁发机构签发的用户的公钥文件,用于通过 SFTP 连接的客户端,并位于用户的 .ssh 文件夹中(或操作系统等效位置)

密钥必须包含用户(可以对此密钥进行身份验证)的 主体列表

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 限制生成密钥的有效期。在此示例中,密钥有效期为一小时。根据您的需求调整持续时间。

  • -z 向密钥添加序列号,以区分由同一证书颁发机构公钥签名的其他密钥。

MinIO 需要指定用于签署 SFTP 访问证书的证书颁发机构。启动或重新启动 MinIO 服务器,并使用 --sftp="trusted-user-ca-key=PATH" 标志指定受信任证书颁发机构的公钥的路径。

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=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 服务器的地址。