跳转到主要内容

这是本节的多页打印视图。 .

返回本页常规视图.

管理

管理对象、身份、加密、复制与批处理任务。

1 - 管理部署

你可以使用 MinIO Console 执行 MinIO 提供的多种部署监控与管理功能,例如:

  • 通过查看指标仪表板、服务器日志或审计日志、追踪历史、S3 事件或驱动器健康状态,监控 部署活动与健康状况。
  • 通过添加或管理 通知目标 来配置告警。
  • 设置 站点复制,以同步数据中心,满足地理分散团队的及时访问需求,或用于灾难准备。
  • 配置部署 设置
警告

重要

MinIO Console 是 MinIO Server 的 Web 界面。

它与 MinIO Kubernetes Operator Console 相互独立,二者并不相同;后者已在 Operator 6.0.0 起废弃并移除。

监控

Monitoring 部分提供用于监控 MinIO 部署的界面。

该部分包含以下子部分: 如果已认证用户不具备 所需的管理权限,则某些子部分可能不可见。

指标

Console 的 Dashboard 部分显示 MinIO 部署的指标。 默认视图提供部署状态的高层概览,包括各个服务器和驱动器的运行时长与可用性。

Console 还支持通过查询已配置为抓取 MinIO 部署数据的 Prometheus 服务来显示时间序列和历史数据。 具体来说,MinIO Console 使用 Prometheus query API 获取已存储的指标数据并显示历史指标。 有关将 MinIO 指标抓取到 Prometheus 的更多信息,请参见 使用 Prometheus 进行监控与告警

日志

Console 的 Logs 部分显示 MinIO 部署生成的 服务器日志

  • 使用 Nodes 下拉框将日志过滤到 MinIO 部署中的部分服务器节点。
  • 使用 Log Types 下拉框将日志过滤到部分日志类型。
  • 使用 Filter 对日志结果应用文本过滤条件

选择 Start Logs 按钮,开始使用所选过滤器和设置采集日志。

审计

警告

重要

MinIO 计划废弃 Tenant Console Audit Log 功能,并在后续版本中将其移除。 作为替代方案,可使用任何支持 Webhook 的数据库或日志服务,从 Tenant 捕获 审计日志

Audit Log 部分提供用于查看由已配置 PostgreSQL 服务采集的 审计日志 的界面。

追踪

Trace 部分为部署中的一个或多个存储桶提供 HTTP 追踪功能。 该部分提供与 mc admin trace 类似的功能。

你可以修改追踪范围,仅显示特定的追踪调用。 默认仅显示与 S3 相关的 HTTP 追踪。

选择 Filters 可打开附加过滤器并应用到追踪输出,例如将追踪适用的 Path 限制为某个特定存储桶或存储桶前缀。

观察

Watch 部分显示所选存储桶上发生的 S3 事件。 该部分提供与 mc watch 类似的功能。

加密

Encryption 部分允许你查看已配置 Key Encryption Service 提供方的状态和指标。

事件

说明

变更: Console

0.23.1

Notifications 部分重命名为 Events。

Events 部分提供用于查看、添加或删除 事件通知 目标的界面。

你可以使用此界面配置 MinIO,将通知事件推送到一个或多个目标端,包括 Redis、MySQL、Kafka、PostgreSQL、AMQP、MQTT、Elastic Search、NATS、NSQ 或 Webhook。

选择 Add Event Destination + 按钮,为部署添加新的事件目标。

你可以从列表中选择现有通知目标,查看其详细信息或删除该目标。

站点复制

Site Replication 部分提供用于添加和管理部署 站点复制 配置的界面。

配置站点复制时,要求现有存储桶或对象(如果有)只能存在于单个站点中。

加密

Encryption 设置提供用于列出、创建和删除密钥的界面,这些密钥可用于 MinIO 服务端加密

你可以将此视图中创建或列出的密钥用于对象加密操作,包括设置 存储桶级默认密钥

警告

重要

删除密钥会导致 MinIO 无法解密任何受该密钥保护的对象。 如果该密钥不存在备份,删除密钥将使对象永久不可读。 更多信息请参见 安全擦除与锁定

配置

Settings 部分提供用于查看和获取部署中所有 MinIO Server 的 配置设置 的界面。 使用 ExportImport 按钮可在不同部署之间导出和导入设置。

该部分包含以下子部分。

  • Region
  • Compression
  • API
  • Heal
  • Scanner
  • Etcd
  • Logger Webhook
  • Audit Webhook
  • Audit Kafka
说明

新增: Console

v0.24.0

环境变量中的配置设置会覆盖在 MinIO Console 中添加的任何自定义内容。 将鼠标悬停在配置字段上方,可显示工具提示,说明该设置是否由环境变量控制。

如果已认证用户不具备 所需的管理权限,则某些子部分可能不可见。

该界面的功能与使用 mc admin config getmc admin config set 类似。 有关如何定义这些选项的详细信息,请参见这些命令。

某些配置设置可能需要重启 MinIO 部署才能生效。

2 - 批量复制

说明

新增: MinIO

RELEASE.2022-10-09T21-10-59Z

批处理框架在 mc RELEASE.2022-10-09T21-10-59Z 中随 replicate 作业类型一同引入。

MinIO 批处理框架允许您使用 YAML 格式的作业定义文件(“批处理文件”)来创建、管理、监控和执行作业。 批处理作业直接在 MinIO 部署上运行,可利用服务端处理能力,而不受运行 MinIO Client 的本地机器限制。

replicate 批处理作业会将对象从一个 MinIO 部署(source 部署)复制到另一个 MinIO 部署(target 部署)。 sourcetarget必须 有一方是 local 部署。

与使用 mc mirror 相比,MinIO 部署之间的批量复制具有以下优势:

  • 消除了客户端到集群网络成为潜在瓶颈的可能
  • 用户只需要具备启动批处理作业的访问权限,而无需其他权限,因为作业完全在集群服务端运行
  • 如果对象未能复制,作业可提供重试机制
  • 批处理作业是一次性的、可编排的过程,可对复制进行精细控制
  • (仅限 MinIO 到 MinIO)复制过程会将对象版本从源端复制到目标端

从 MinIO Server RELEASE.2023-05-04T21-44-30Z 开始,另一端部署既可以是另一个 MinIO 部署,也可以是使用实时存储类的任意 S3 兼容位置。 使用复制 YAML 文件中的筛选选项,可排除存储在需要先重新水化或通过其他恢复方式处理后才能提供请求对象的位置中的对象。 复制到此类远端时,批量复制采用 mc mirror 的行为。

行为

访问控制与要求

批量复制与 bucket replication 具有类似的访问和权限要求。

“source” 部署所使用的凭据必须具有类似以下的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "admin:SetBucketTarget",
                "admin:GetBucketTarget",
                "admin:ListBatchJobs",
                "admin:DescribeBatchJob",
                "admin:StartBatchJob",
                "admin:CancelBatchJob"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteBucketConfiguration"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:GetBucketLocation",
                "s3:GetBucketVersioning",
                "s3:GetObjectRetention",
                "s3:GetObjectLegalHold",
                "s3:PutReplicationConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ],
            "Sid": "EnableReplicationRuleConfiguration"
        }
    ]
}

“remote” 部署所使用的凭据必须具有类似以下的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:GetBucketLocation",
                "s3:GetBucketVersioning",
                "s3:GetBucketObjectLockConfiguration",
                "s3:GetEncryptionConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ],
            "Sid": "EnableReplicationOnBucket"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ReplicateTags",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionTagging",
                "s3:PutObject",
                "s3:PutObjectRetention",
                "s3:PutBucketObjectLockConfiguration",
                "s3:PutObjectLegalHold",
                "s3:DeleteObject",
                "s3:ReplicateObject",
                "s3:ReplicateDelete"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ],
            "Sid": "EnableReplicatingDataIntoBucket"
        }
    ]
}

有关向 MinIO 部署添加用户、访问密钥和策略的更完整文档,请参见 mc admin usermc admin user svcacctmc admin policy

已配置 Active Directory/LDAPOpenID Connect 用户管理的 MinIO 部署,也可以创建专用的 access keys 来支持批量复制。

筛选复制目标

批处理作业定义文件可按存储桶、前缀和/或筛选条件限制复制范围,从而只复制特定对象。 复制过程对对象和存储桶的访问,可能会受到您在 YAML 中为源端或目标端提供的凭据限制。

说明

变更: MinIO

Server RELEASE.2023-04-07T05-28-58Z

您可以从远程 MinIO 部署复制到运行该批处理作业的本地部署。

例如,您可以使用批处理作业执行一次性复制同步,将对象从本地部署 minio-local/invoices/ 上的某个存储桶推送到远程部署 minio-remote/invoices 上的某个存储桶。 您也可以将对象从远程部署 minio-remote/invoices 拉取到本地部署 minio-local/invoices

小文件优化

RELEASE.2023-12-09T18-17-51Z 开始,批量复制默认会自动对小于 5MiB 的对象进行批量打包和压缩,以高效地在源端与远端之间传输数据。 远程 MinIO 部署可以检查这些打包后的对象,并立即应用生命周期管理分层规则。 该功能类似于 S3 Snowball Edge 提供的小文件批处理能力。

您可以在 replicate 作业配置中修改压缩设置。

复制批处理作业参考

YAML 必须 定义源部署和目标部署。 如果 source 部署是远程部署,则 target 部署 必须local。 此外,YAML 还可以定义标志,用于筛选要复制的对象、为作业发送通知或定义作业的重试次数。

说明

变更: MinIO

RELEASE.2023-04-07T05-28-58Z

您可以从远程 MinIO 部署复制到运行该批处理作业的本地部署。

说明

变更: MinIO

RELEASE.2024-08-03T04-33-23Z

此版本引入了 Batch Job Replicate API 的新版本 v2。 更新后的 API 允许您在源端列出多个要复制的前缀。 若要从一个源端复制多个前缀,请将 replicate.apiVersion 指定为 v2

replicate:
  apiVersion: v1
  source:
    type: minio
    bucket: mybucket
    prefix:
      - prefix1
      - prefix2
...

对于 源部署

  • 必需信息

    type:

    必须为 minio

    bucket:

    部署上的存储桶。

  • 可选信息

    prefix:

    应复制对象的前缀。
    从 MinIO Server RELEASE.2024-08-03T04-33-23Z 开始,Batch Job Replicate API 的 v2 允许您列出多个前缀。
    replicate.apiVersion 指定为 v2,即可从多个前缀执行复制。

    endpoint:

    用于复制批处理作业源端或目标端的部署位置。
    例如,https://minio.example.net

    如果该部署就是命令中指定的 mc alias set,可省略此字段,让 MinIO 使用该别名对应的 endpoint 和 credentials 值。
    源部署或远程部署中必须有一方是 “local” 别名。
    非 “local” 部署必须指定 endpointcredentials

    path:

    指示 MinIO 使用存储桶的 Path 或 Virtual Style(DNS)查找方式。

    - 指定 on 使用 Path 风格
    - 指定 off 使用 Virtual 风格
    - 指定 auto 让 MinIO 自动判断正确的查找方式。

    默认为 auto

    credentials:

    授予对象访问权限的 accesskey:secretKey:,或 sessionToken:
    仅对非 local 部署指定此项。

    snowball

    版本新增:RELEASE.2023-12-09T18-17-51Z

    用于控制批量打包与压缩功能的配置选项。

    snowball.disable

    指定 true 可在复制期间禁用批量打包与压缩功能。
    默认为 false

    snowball.batch

    指定用于压缩打包的对象最大整数数量。
    默认为 100

    snowball.inmemory

    指定 false 表示使用本地存储暂存归档,或指定 true 表示暂存到内存(RAM)。
    默认为 true

    snowball.compress

    指定 true 可在线路传输中使用 S2/Snappy compression algorithm 生成压缩后的打包对象。
    默认为 false,即不压缩。

    snowball.smallerThan

    指定对象大小阈值,小于该值时 MinIO 应对对象执行批量打包。
    默认为 5MiB

    snowball.skipErrs

    指定 false 可让 MinIO 在读取任意产生错误的对象时停止处理。
    默认为 true

对于 目标部署

  • 必需信息

    type:

    必须为 minio

    bucket:

    部署上的存储桶。

  • 可选信息

    prefix:

    要复制对象的前缀。

    endpoint:

    目标部署的位置。

    如果目标是命令中指定的 alias,则可以省略此项以及 credentials 字段。
    如果目标是 “local”,则源端必须通过 endpointcredentials 指定远程部署。

    credentials:

    授予对象访问权限的 accesskeysecretKey,或 sessionToken

对于 筛选条件

newerThan:

表示时长的字符串,格式为 #d#h#s

仅复制比指定时长更新的对象。 例如,7d24h5d12h30s 都是有效字符串。

olderThan:

表示时长的字符串,格式为 #d#h#s

仅复制比指定时长更旧的对象。

createdAfter:

采用 YYYY-MM-DDTHH:MM:SSZ RFC3339 日期时间格式的日期。

仅复制在该日期之后创建的对象。

createdBefore:

采用 YYYY-MM-DDTHH:MM:SSZ RFC3339 日期时间格式的日期。

仅复制在该日期之前创建的对象。

对于 通知

endpoint:

用于发送通知事件的预定义 endpoint。

token:

用于访问 endpoint 的可选 JWT <JSON Web Token>。

对于 重试次数

如果有任何因素中断作业,您可以定义该批处理作业的重试次数。 对于每次重试,您还可以定义两次尝试之间的等待时长。

attempts:

在放弃之前完成该批处理作业的尝试次数。

delay:

每次尝试之间至少等待的时间。

replicate 作业类型的 YAML 描述文件示例

使用 mc batch generate 创建基础的 replicate 批处理作业,以便进一步自定义。

对于 local 部署,请勿指定 endpoint 或 credentials。 根据哪一方是 local,删除或注释掉源端或目标端部分中的这些行。

replicate:
  apiVersion: v1
  # source of the objects to be replicated
  source:
    type: TYPE # valid values are "s3" or "minio"
    bucket: BUCKET
    prefix: PREFIX # 'PREFIX' is optional
    # If your source is the 'local' alias specified to 'mc batch start', then the 'endpoint' and 'credentials' fields are optional and can be omitted
    # Either the 'source' or 'remote' *must* be the "local" deployment
    endpoint: "http[s]://HOSTNAME:PORT" 
    # path: "on|off|auto" # "on" enables path-style bucket lookup. "off" enables virtual host (DNS)-style bucket lookup. Defaults to "auto"
    credentials:
      accessKey: ACCESS-KEY # Required
      secretKey: SECRET-KEY # Required
    # sessionToken: SESSION-TOKEN # Optional only available when rotating credentials are used
    snowball: # automatically activated if the source is local
      disable: false # optionally turn-off snowball archive transfer
      batch: 100 # upto this many objects per archive
      inmemory: true # indicates if the archive must be staged locally or in-memory
      compress: false # S2/Snappy compressed archive
      smallerThan: 5MiB # create archive for all objects smaller than 5MiB
      skipErrs: false # skips any source side read() errors

  # target where the objects must be replicated
  target:
    type: TYPE # valid values are "s3" or "minio"
    bucket: BUCKET
    prefix: PREFIX # 'PREFIX' is optional
    # If your source is the 'local' alias specified to 'mc batch start', then the 'endpoint' and 'credentials' fields are optional and can be omitted

    # Either the 'source' or 'remote' *must* be the "local" deployment
    endpoint: "http[s]://HOSTNAME:PORT"
    # path: "on|off|auto" # "on" enables path-style bucket lookup. "off" enables virtual host (DNS)-style bucket lookup. Defaults to "auto"
    credentials:
      accessKey: ACCESS-KEY
      secretKey: SECRET-KEY
    # sessionToken: SESSION-TOKEN # Optional only available when rotating credentials are used

  # NOTE: All flags are optional
  # - filtering criteria only applies for all source objects match the criteria
  # - configurable notification endpoints
  # - configurable retries for the job (each retry skips successfully previously replaced objects)
  flags:
    filter:
      newerThan: "7d" # match objects newer than this value (e.g. 7d10h31s)
      olderThan: "7d" # match objects older than this value (e.g. 7d10h31s)
      createdAfter: "datetime" # match objects created after this date and time in RFC3339 format
      createdBefore: "datetime" # match objects created before this date and time in RFC3339 format

      ## NOTE: tags are not supported when "source" is remote.
      # tags:
      #   - key: "name"
      #     value: "pick*" # match objects with tag 'name', with all values starting with 'pick'

      # metadata:
      #   - key: "content-type"
      #     value: "image/*" # match objects with 'content-type', with all values starting with 'image/'

    notify:
      endpoint: "https://notify.endpoint" # notification endpoint to receive job status events
      token: "Bearer xxxxx" # optional authentication token for the notification endpoint

    retry:
      attempts: 10 # number of retries for the job before giving up
      delay: "500ms" # least amount of delay between each retry

3 - 管理对象

你可以使用 MinIO Console 执行 MinIO 提供的多种存储桶和对象管理及交互操作。 根据已认证用户的权限和 IAM 策略,你可以:

对象浏览器

对象浏览器会列出已认证用户在该部署上有权访问的存储桶和对象。

登录后或切换到该标签页时,对象浏览器会显示该用户的存储桶列表,用户可以对其进行筛选。 选择某个存储桶可显示该桶中的对象列表。

选择某个具体对象后,可显示该对象的摘要信息,例如名称、大小、标签、法律保留以及适用的保留策略。 Console 还会显示该对象的元数据。

用户可根据适用的策略和权限,对存储桶中的对象执行操作。 用户可能可以执行的操作包括:

  • 回退到先前版本
  • 创建前缀
  • 查看已删除对象
  • 上传对象
  • 下载对象
  • 分享
  • 预览
  • 管理法律保留
  • 管理保留策略
  • 管理标签
  • 检查
  • 显示版本
  • 删除
说明

新增: Console

v0.24.0

可通过 Console 右上角的对象管理器按钮查看对象上传或下载状态。 如果你在当前会话期间未上传或下载任何对象,则不会显示该按钮。

说明

变更: Console

v0.35.0

如果你选择下载多个对象,MinIO 会将这些对象打包为一个 ZIP 归档供下载。 下载后你必须解压该归档,才能访问其中的文件。

存储桶

Console 的 Bucket 部分会显示已认证用户具有 访问权限 的所有存储桶。 你可以根据该用户的访问权限,在此部分中创建或管理这些存储桶。

创建存储桶

选择 Create Bucket 可在该部署上创建新的存储桶。 MinIO 会校验存储桶名称。 如需查看存储桶命名规则,请选择 View Bucket Naming Rules

MinIO 不限制单个部署允许创建的存储桶总数。 不过,作为通用建议,MinIO 建议每个部署的存储桶数量不超过 500,000 个。

创建存储桶时,你可以启用以下功能:版本控制, 对象锁定, 存储桶大小(配额)限制,以及 保留规则。 保留规则要求启用版本控制。

说明

变更: Console

v0.35.0

如果启用版本控制,你可以指定要排除在版本控制之外的前缀。

必须 在创建存储桶时配置复制、锁定和版本控制选项。 之后无法再更改该存储桶的这些设置。

管理存储桶

使用 Search 栏筛选特定存储桶。 选择某个存储桶所在行可显示该存储桶的摘要信息。

在摘要页面中,选择任一可用标签页以进一步管理该存储桶。

说明

说明

如果已认证用户没有 所需的管理权限,某些管理功能可能不可用。

管理存储桶时,你的访问设置可能允许你查看或更改以下内容:

  • Summary 部分显示存储桶配置的摘要。

    你可以在此部分查看和修改存储桶的访问策略、加密、配额和标签。

  • Events 部分配置告警,以便在用户上传、访问或删除匹配对象时触发 通知事件

  • Replication 部分使用 服务端存储桶复制规则 将对象复制到远程位置。

  • Lifecycle 部分设置 对象生命周期管理规则,以过期或转换存储桶中的对象。

  • Access 部分通过列出对该存储桶有访问权限的 策略用户 来审查安全设置。

  • Anonymous 部分管理未认证用户可用于读取或写入对象的前缀规则,以妥善保护匿名访问。

Tiering 部分提供了用于添加和管理 远程层 的界面,以支持生命周期管理转换规则。 MinIO 分层支持将对象从该部署迁移到远程存储,但不支持自动将其恢复到该部署。

分层标签页允许具有相应权限的用户执行以下操作:

  • 查看所有已配置远程层的状态和摘要信息。
  • 为新的远程目标存储创建层,目标可以是另一个 MinIO 部署、Google Cloud Storage、Amazon 的 AWS S3 或 Azure。
  • 使用层上的 图标轮换任意已配置层的访问凭证。

4 - 批量密钥轮换

说明

新增: MinIO

RELEASE.2023-04-07T05-28-58Z

MinIO Batch Framework 允许你使用 YAML 格式的作业定义文件(“批处理文件”)来创建、管理、监控和执行作业。 批处理作业直接在 MinIO 部署上运行,以利用服务端处理能力,而不受运行 MinIO Client 的本地机器限制。

keyrotate 批处理作业类型会为 MinIO 部署上的加密对象轮换 sse-s3 or sse-kms keys

YAML 配置支持按创建日期、标签、元数据或 kms key 进行过滤,将密钥轮换限制在特定对象集合上。 你还可以定义重试次数,或设置通知 endpoint 和 token。

密钥轮换批处理作业参考

说明

新增: MinIO

RELEASE.2023-04-07T05-28-58Z

使用 keyrotate 作业类型创建批处理作业,以轮换加密对象的 sse-s3 or sse-kms keys

必填字段

type:

sse-s3sse-kms 之一。

key:

仅用于 sse-kms 类型。 用于解封密钥保管库的密钥。

可选字段

对于 基于标志的过滤条件

newerThan:

#d#h#s 格式表示时长的字符串。

仅为比指定时长更新的对象轮换密钥。 例如,7d24h5d12h30s 都是有效字符串。

olderThan:

#d#h#s 格式表示时长的字符串。

仅为比指定时长更旧的对象轮换密钥。

createdAfter:

采用 YYYY-MM-DDTHH:MM:SSZ RFC3339 日期时间格式的日期。

仅为在该日期之后创建的对象轮换密钥。

createdBefore:

采用 YYYY-MM-DDTHH:MM:SSZ RFC3339 日期时间格式的日期。

仅为在该日期之前创建的对象轮换密钥。

context:

仅用于 sse-kms 类型。 执行操作时使用的上下文。

tags:

仅为标签与指定 key:value: 匹配的对象轮换密钥。

metadata:

仅为元数据与指定 key:value: 匹配的对象轮换密钥。

kmskey:

仅为 KMS key-id 与指定值匹配的对象轮换密钥。 这仅适用于 sse-kms 类型。

对于 通知

endpoint:

用于发送通知事件的预定义 endpoint。

token:

用于访问 endpoint 的可选 JSON Web Token (JWT)。

对于 重试

如果作业被中断,你可以定义最大重试次数。 对于每次重试,你还可以定义两次尝试之间的等待时间。

attempts:

在放弃之前完成批处理作业的尝试次数。

delay:

每次尝试之间的等待时长。

keyrotate 作业类型的 YAML 描述文件示例

使用 mc batch generate 创建一个基础的 keyrotate 批处理作业,以便进一步自定义:

keyrotate:
  apiVersion: v1
  bucket: BUCKET
  prefix: PREFIX
  encryption:
    type: sse-s3 # valid values are sse-s3 and sse-kms
    key: <new-kms-key> # valid only for sse-kms
    context: <new-kms-key-context> # valid only for sse-kms

  # optional flags based filtering criteria
  # for all objects
  flags:
    filter:
      newerThan: "7d" # match objects newer than this value (e.g. 7d10h31s)
      olderThan: "7d" # match objects older than this value (e.g. 7d10h31s)
      createdAfter: "date" # match objects created after this date and time in RFC3339 format
      createdBefore: "date" # match objects created before this date and time in RFC3339 format
      tags:
        - key: "name"
          value: "pick*" # match objects with tag 'name', with all values starting with 'pick'
      metadata:
        - key: "content-type"
          value: "image/*" # match objects with 'content-type', with all values starting with 'image/'
      kmskey: "key-id" # match objects with KMS key-id (applicable only for sse-kms)
    notify:
      endpoint: "https://notify.endpoint" # notification endpoint to receive job status events
      token: "Bearer xxxxx" # optional authentication token for the notification endpoint
    retry:
      attempts: 10 # number of retries for the job before giving up
      delay: "500ms" # least amount of delay between each retry

5 - 安全与访问

你可以使用 MinIO Console 执行 MinIO 提供的多种身份与访问管理功能,例如:

  • 创建继承父级权限的子 访问密钥
  • 查看、管理和创建访问 策略
  • 使用内置的 MinIO IDP 创建和管理 用户凭证 或组,连接一个或多个 OIDC provider,或添加 AD/LDAP provider 以实现 SSO。

访问密钥

Access KeysService Accounts 部分会显示与已认证用户关联的所有 访问密钥。 某个用户已有访问密钥的摘要列表包括访问密钥、过期时间、状态、名称和描述。

访问密钥可为应用程序提供认证凭证,并继承“父”用户的权限。

对于使用外部身份管理器(例如 Active Directory 或兼容 OIDC 的 provider)的部署,访问密钥为用户提供了一种创建长期有效凭证的方式。

  • 你可以选择访问密钥所在行查看其自定义策略(如果存在)。

    你可以在此页面创建或修改策略。 访问密钥策略不能超过父用户被授予的权限。

  • 你可以选择 Create access key 创建新的访问密钥。

    Console 会自动生成访问密钥和密码。 你可以选择密码字段上的眼睛 图标以显示该值。 你也可以根据需要覆盖这些值。

    你可以为访问密钥设置自定义策略,进一步限制使用该密钥进行认证的用户所拥有的权限。 选择 Restrict beyond user policy 打开策略编辑器,并按需修改。

    在选择 Create 创建访问密钥之前,请确保你已将访问密钥密码保存到安全位置。 创建访问密钥后,你无法再次获取或重置该密码值。

    如需轮换应用程序凭证,请创建新的访问密钥,并在应用程序切换为使用新凭证后删除旧密钥。

策略

Policies 部分会显示 MinIO 部署上的所有 策略Policies 部分允许你创建、修改或删除策略。

策略 定义了已认证用户可以访问的授权操作和资源。 每个策略描述用户、用户组或访问密钥可以执行的一项或多项操作,或其必须满足的条件。

这些策略是 JSON 格式的文本文件,并兼容 Amazon AWS Identity and Access Management 的策略语法、结构和行为。 有关在 MinIO 中使用策略管理访问的详细信息,请参阅 Policy Based Action Control

如果已认证用户没有 所需的管理权限,则此部分或其中的内容可能不可见。

  • 选择 + Create Policy 创建新的 MinIO Policy。

  • 选择策略所在行以管理该策略的详细信息。

    Summary 视图显示策略摘要。

    Users 视图显示所有分配了该策略的用户。

    Groups 视图显示所有分配了该策略的组。

    Raw Policy 视图显示原始 JSON 策略。

使用 UsersGroups 视图,可分别将已创建的策略分配给用户和组。

身份

Identity 部分为 MinIO 管理的用户 提供管理界面。

该部分包含以下子部分。 如果已认证用户没有 所需的管理权限,某些子部分可能不可见。

用户

Users 部分显示部署中的所有 MinIO 管理 用户

对于使用外部身份管理器(例如 Active Directory 或兼容 OIDC 的 provider)的部署,此部分不可见。

  • 选择 Create User 创建新的 MinIO 管理用户。

    你可以在创建时为该用户分配 策略

  • 选择某个用户所在行以查看该用户的详细信息。

    你可以查看并修改该用户已分配的 策略

    你还可以查看和管理与该用户关联的所有 访问密钥

Groups 部分显示 MinIO 部署上的所有

对于使用外部身份管理器(例如 Active Directory 或兼容 OIDC 的 provider)的部署,此部分不可见。

  • 选择 Create Group 创建新的 MinIO Group。

    你可以在创建时将新用户分配到该组。

    你可以在创建后为该组分配策略。

  • 选择组所在行以打开该组的详细信息。

    你可以在 Members 视图中修改组成员。

    你可以在 Policies 视图中修改该组已分配的策略。

    更改用户的组成员关系会修改该用户继承的策略。更多信息请参阅 Access Management

OpenID

MinIO 支持使用 兼容 OpenID Connect (OIDC) 的身份提供者 (IDP) 对用户身份进行外部管理。

OpenID provider 的示例包括:

  • Okta
  • KeyCloak
  • Dex
  • Google
  • Facebook

配置外部 IDP 后即可启用 Single-Sign On 工作流,应用程序会先针对外部 IDP 完成认证,然后再访问 MinIO。

使用本节中的界面可以查看、添加或编辑部署的 OIDC 配置。 MinIO 支持任意数量的活动 OIDC 配置。

LDAP

MinIO 支持使用 Active Directory 或 LDAP (AD/LDAP) 服务对用户身份进行外部管理。 配置外部身份提供者 (IDP) 后即可启用 Single-Sign On (SSO) 工作流,应用程序会先针对外部 IDP 完成认证,然后再访问 MinIO。

使用本节中的界面可以查看、添加或编辑部署的 LDAP 配置。 MinIO 仅支持一个活动 LDAP 配置。

MinIO 会查询 Active Directory / LDAP 服务器,以验证客户端指定的凭证。 如果进行了相应配置,MinIO 还会在 AD/LDAP 服务器上执行组查找。

6 - 批量过期

说明

新增: MinIO

RELEASE.2023-12-02T10-51-33Z

MinIO 批处理框架允许你使用 YAML 格式的作业定义文件(“batch file”)创建、管理、监控和执行作业。 批处理作业直接在 MinIO 部署上运行,从而利用服务端处理能力,而不受运行 MinIO Client 的本地机器限制。

expire 批处理作业会将 对象自动过期 的行为应用到单个存储桶。 该作业根据提供的配置判断对象是否符合过期条件,且独立于任何已配置的过期规则。

行为

对象立即过期

批量过期会作为批处理作业的一部分立即执行,这与 passive scanner-based application of expiration rules 不同。 具体来说,批量过期不会让位于应用 I/O,因此可能影响部署上常规读写操作的性能。

过期资格在批处理运行时确定

批量过期按存储桶工作,并且每次运行都会一次性执行直至完成。 该作业在运行时判断对象是否符合过期条件,并且 不会 定期重新扫描或重新检查新对象。

如果要处理任何新近满足过期条件的对象,请重新运行该批处理作业。

过期规则仅检查最新对象

批量过期作业只会使用每个对象的最新版本或“current”版本来匹配各条批量过期规则。

expire 批处理作业参考

字段

说明

expire

必需

过期作业类型的顶层字段。

apiVersion

必需

设为 v1

bucket

必需

指定该作业运行所在的存储桶名称。

prefix

可选

指定该作业运行所在的存储桶前缀。

rules

必需

一个包含一条或多条过期规则的数组,用于应用到指定 bucketprefix (如有)中的对象。

rules.[n].type

必需

支持以下两个值之一:

  • object - 仅应用于当前版本不是 DeleteMarker 的对象。

  • deleted - 仅应用于当前版本 DeleteMarker 的对象。

有关 DeleteMarker 或版本控制存储桶中删除操作的更完整文档,请参见 对象删除

rules.[n].name

可选

指定用于过滤对象的匹配字符串。

支持 glob 风格通配符(*?)。

rules.[n].olderThan

可选

指定对象年龄以过滤对象。 该规则仅应用于年龄超过指定时间单位的对象。

例如,72h3d 会选择年龄超过三天的对象。

rules.[n].createdBefore

可选

指定一个 RFC3339 日期时间来过滤对象。

该规则仅应用于在指定时间戳之前创建的对象。

rules.[n].tags

可选

指定一个键值对数组,用于描述对象标签并据此过滤对象。 value 条目支持 glob 风格通配符(*?)。

例如,以下配置会将该规则过滤为仅匹配具有相应标签的对象:

tags:
  - key: archive
    value: True

此键与 rules.[n].type: deleted 不兼容。

rules.[n].metadata

可选

指定一个键值对数组,用于描述对象元数据并据此过滤对象。 value 键支持 glob 风格通配符(*?)。

例如,以下配置会将该规则过滤为仅匹配具有相应元数据的对象:

metadata:
  - key: content-type
    value: image/*

此键与 rules.[n].type: deleted 不兼容。

rules.[n].size

可选

指定对象大小范围以过滤对象。

  • lessThan - 匹配大小小于指定数值的对象(例如 MiBGiB)。

  • greaterThan - 匹配大小大于指定数值的对象(例如 MiBGiB)。

rules.[n].purge.retainVersions

可选

指定在执行过期时要保留的对象版本数量。

默认为 0,即删除所有对象版本(最快)。

notify.endpoint

可选

用于发送通知事件的预定义端点。

notify.token

可选

用于访问 notify.endpoint 的可选 JSON Web Token (JWT)。

retry.attempts

可选

在放弃之前完成该批处理作业的重试次数。

retry.delay

可选

每次尝试之间的等待时间(ms)。

expire 作业类型的 YAML 示例

使用 mc batch generate 创建基础 expire 批处理作业,再进行进一步定制。

expire:
  apiVersion: v1
  bucket: mybucket # Bucket where this job will expire matching objects from
  prefix: myprefix # (Optional) Prefix under which this job will expire objects matching the rules below.
  rules:
    - type: object  # objects with zero ore more older versions
      name: NAME # match object names that satisfy the wildcard expression.
      olderThan: 70h # match objects older than this value
      createdBefore: "2006-01-02T15:04:05.00Z" # match objects created before this date and time in RFC3339 format
      tags:
        - key: name
          value: pick* # match objects with tag 'name', all values starting with 'pick'
      metadata:
        - key: content-type
          value: image/* # match objects with 'content-type', all values starting with 'image/'
      size:
        lessThan: 10MiB # match objects with size less than this value (e.g. 10MiB)
        greaterThan: 1MiB # match objects with size greater than this value (e.g. 1MiB)
      purge:
          # retainVersions: 0 # (default) delete all versions of the object. This option is the fastest.
          # retainVersions: 5 # keep the latest 5 versions of the object.

    - type: deleted # objects with delete marker as their latest version
      name: NAME # match object names that satisfy the wildcard expression.
      olderThan: 10h # match objects older than this value (e.g. 7d10h31s)
      createdBefore: "2006-01-02T15:04:05.00Z" # match objects created before this date and time in RFC3339 format
      purge:
          # retainVersions: 0 # (default) delete all versions of the object. This option is the fastest.
          # retainVersions: 5 # keep the latest 5 versions of the object including delete markers.

  notify:
    endpoint: https://notify.endpoint # notification endpoint to receive job completion status
    token: Bearer xxxxx # optional authentication token for the notification endpoint

  retry:
    attempts: 10 # number of retries for the job before giving up
    delay: 500ms # least amount of delay between each retry

7 - SUBNET

您可以使用 MinIO Console 执行 MinIO 中若干与许可证和订阅相关的功能,例如:

  • 查看 MinIO 部署当前使用的许可证。
  • 订阅商业许可证,其中包含对 MinIO SUBNET 的访问权限。
  • 管理部署的 Enterprise 许可证。
  • 使用可与 MinIO Engineering 共享的支持工具。
  • 查看不同许可证选项之间的差异。

许可证

MinIO 提供三种许可证选项:

  1. 基于 GNU AGPLv3 license 的开源版本
  2. Enterprise Lite,一种 commercial license,包含由 MinIO Engineers 直接提供的支持
  3. Enterprise Plus,一种 commercial license,包含由 MinIO Engineers 直接提供的支持、较长的发布周期、更短的 SLA 以及其他优势

License 页面显示部署当前的许可证状态。 您还可以开始注册流程,以开通付费订阅或将该部署添加到现有订阅中。

采用 AGPLv3 许可的部署必须遵守该许可证条款。 MinIO 无法判定您的应用程序对 MinIO 的使用是否符合 AGPLv3 的许可证要求。 您应当依赖自己的法律顾问或许可证专家,对应用程序进行审计,并确保其符合 MinIO 以及所有与您的应用程序集成或交互的其他开源项目的许可证要求。

对于会触发 AGPLv3 义务的应用程序(例如需要将应用开源),MinIO Commercial Licensing 是最佳选择。 在未验证其使用方式的情况下使用 MinIO 或任何其他采用 OSS 许可证代码的应用程序,风险由使用者自行承担。

健康

Health 部分提供了一个界面,用于对 MinIO 部署运行健康诊断。 对于连接到 Internet 的集群,报告会自动上传到 SUBNET。

生成的健康报告供 MinIO Engineering 通过 MinIO SUBNET 使用,其中可能包含诸如主机名等内部或私有数据点。 在将健康报告发送给第三方或发布到公开论坛之前,请务必谨慎评估。

如有需要,您可以从该页面下载最新报告。

性能

Performance 部分提供了一个界面,用于对部署执行性能测试。 测试结果可作为部署在 S3 GETPUT 请求下性能表现的一般性参考。

如需更完整的性能测试,可考虑结合使用预发布应用环境中的负载测试以及 MinIO WARP 工具。

Profile

Profile 部分提供了一个界面,用于对部署执行系统分析。 结果可以帮助了解给定节点上运行的 MinIO 服务进程。

生成的报告供 MinIO Engineering 通过 MinIO SUBNET 使用。 独立使用或由第三方使用这些分析结果进行诊断和修复,风险由您自行承担。

Inspect

Inspect 部分提供了一个界面,用于捕获与一个或多个对象相关的纠删码元数据。 MinIO Engineering 可能会要求提供此输出,作为 MinIO SUBNET 中诊断的一部分。

生成的对象可使用 MinIO 的 debugging tool 读取。 独立使用或由第三方使用该输出进行诊断或修复,风险由您自行承担。 您还可以选择对该对象进行加密,使其仅在调试工具链中包含所生成的加密密钥时才能被读取。

Call Home

说明

新增: Console

v0.24.0

Call Home 是一个可选功能,已注册到 MinIO SUBNET 的部署可以自动将每日健康诊断报告或实时错误日志发送到 SUBNET。 这些报告可为工程支持团队在响应支持请求时提供诊断记录、日志记录,或同时提供两者。

MinIO 安装后默认禁用 Call Home 选项。

警告

重要

Call Home 需要有效的 Enterprise 许可证。

使用 Call Home 部分可启用或禁用将每日一次的健康诊断报告或实时错误日志上传到 SUBNET。 健康报告和实时日志是彼此独立的功能,您可以分别启用或禁用。 如有需要,您也可以同时启用诊断报告和日志。

8 - Silo 控制台

MinIO Console 是一个功能丰富的图形用户界面,提供与 mc 命令行工具类似的功能。

MinIO Console 登录页为已认证用户提供 Object Browser 视图

本页面概述了 MinIO Console,并说明其配置选项和登录方法。

概述

您可以使用 MinIO Console 执行多种管理任务,例如身份与访问管理、指标与日志监控或服务器配置。

SILO 在服务端内嵌持续维护的 Silo Console。Silo Console 仓库记录下游源码、版本发布与兼容性变化;独立部署属于高级集成路径,必须选择与目标服务端版本兼容的 Console 版本。

支持的浏览器

MinIO Console 可运行于多种当前稳定版本的浏览器。

为获得最佳使用体验,请使用您所选浏览器的最新稳定版本。 支持的浏览器包括:

  • Chrome
  • Edge
  • Safari
  • Firefox
  • Opera

此列表 并不完整,后续可能发生变化。

如需查看运行 MinIO Console 所支持的完整浏览器及版本列表,请参见 Browserslist 网站。

说明

提示

MinIO Console 不支持 Opera Mini。

配置

MinIO Console 的大部分配置设置继承自 MinIO Server。以下环境变量用于启用 MinIO Console 中的特定行为:

环境变量

说明

MINIO_PROMETHEUS_URL

配置为从 MinIO 部署抓取指标的 Prometheus 服务器 URL。 MinIO Console 使用该服务器填充指标仪表板。

有关如何配置 Prometheus 以从 MinIO 收集指标的教程,请参见 使用 Prometheus 进行监控与告警

MINIO_BROWSER_REDIRECT_URL

MinIO Console 对外可解析的主机名,供已配置的 external identity manager 返回认证响应时使用。

使用反向代理、负载均衡器或类似系统将 MinIO Console 暴露到公网时, 通常需要设置该变量。请指定一个可从外部访问并解析到 MinIO Console 的主机名。

静态端口分配与动态端口分配

默认情况下,MinIO 会在每次服务器启动时为 MinIO Console 随机选择一个端口。 访问 MinIO Server 的浏览器客户端会被自动重定向到动态选定端口上的 MinIO Console。此行为模拟了旧版 Web 浏览器访问方式,同时降低了在 嵌入式 Console 更新前已运行 MinIO 的系统上发生端口冲突的风险。

您可以在启动部署中的每个 MinIO Server 时,通过传递 minio server --console-address 命令行选项来显式指定静态端口。

例如,以下命令启动一个分布式 MinIO 部署,并为 MinIO Console 静态分配 9001 端口。该部署将在默认 MinIO 服务器端口 :9000 上响应 S3 API 操作,并在 MinIO Console 端口 :9001 上响应浏览器访问。

minio server https://minio-{1...4}.example.net/mnt/drive-{1...4} \
      --console-address ":9001"

位于网络路由组件之后且其路由规则要求使用静态端口的部署,可能需要为 MinIO Console 设置静态端口。例如,负载均衡器、反向代理或 Kubernetes ingress 可能会默认阻止动态重定向行为,或在该行为下表现异常。

您还必须确保主机系统防火墙允许访问已配置的 Console 端口。

登录

说明

变更: RELEASE.2023-03-09T23-16-13Z

MinIO Console 会向未认证用户显示登录页面。 默认情况下,Console 为 MinIO-managed user 提供用户名和密码登录提示。

对于配置了多个 identity managers 的部署, 请选择 Other Authentication Methods 下拉菜单,以选择其他已配置的身份提供商之一。 您也可以使用通过 Security Token Service (STS) API 生成的凭证登录。

说明

使用 MinIO 的 Play 测试环境体验 Console

您可以通过 https://play.min.io:9443 体验 Console。 请使用以下凭证登录:

  • 用户名:Q3AM3UQ867SPQQA43P2F
  • 密码:zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG

Play Console 连接到位于 https://play.min.io 的 MinIO Play 部署。 您也可以通过 mc 使用 play 别名访问该部署。

文档

Documentation 选项卡会在单独的浏览器窗口或标签页中打开此文档站点。

可用任务

登录 MinIO Console 后,用户可以执行多种任务。

9 - 对象管理

对象 是二进制数据,例如图像、音频文件、电子表格,甚至二进制可执行代码。 “Binary Large Object” 或 “blob” 这一术语有时会与对象存储关联使用,不过 blob 的大小可以从几个字节到数 TB 不等。 像 MinIO 这样的对象存储平台提供专用工具和能力,用于通过标准的 S3 兼容 API 存储、列出和获取对象。

说明

磁盘独占访问

MinIO 要求 对用于对象存储的磁盘或卷拥有 独占 访问权限。 任何其他进程、软件、脚本或人员都不应直接对提供给 MinIO 的磁盘或卷, 或 MinIO 在其上放置的对象或文件执行 任何 操作。

除非得到 MinIO Engineering 的明确指示,否则不要使用脚本或工具直接修改、 删除或移动这些磁盘上的任何数据分片、校验分片或元数据文件,包括在磁盘或节点 之间迁移这些文件。 这类操作极有可能导致大范围损坏和数据丢失,超出 MinIO 的自愈能力。

MinIO 对象存储使用 存储桶 组织对象。 存储桶类似于文件系统中的顶层驱动器、文件夹或目录(/mnt/dataC:\),每个存储桶都可以容纳任意数量的对象。

MinIO 服务器上的对象结构可能类似如下:

/ #root
/images/
   2020-01-02-MinIO-Diagram.png
   2020-01-03-MinIO-Advanced-Deployment.png
   MinIO-Logo.png
/videos/
   2020-01-04-MinIO-Interview.mp4
/articles/
   /john.doe/
      2020-01-02-MinIO-Object-Storage.md
      2020-01-02-MinIO-Object-Storage-comments.json
   /jane.doe/
      2020-01-03-MinIO-Advanced-Deployment.png
      2020-01-02-MinIO-Advanced-Deployment-comments.json
      2020-01-04-MinIO-Interview.md

按照上述示例结构,管理员会创建 /images/videos/articles 这些存储桶。 客户端应用使用对象的完整“路径”将对象写入这些存储桶,其中包括所有中间 前缀

MinIO 使用前缀支持多级嵌套目录和对象,以支撑最动态的对象存储工作负载。 MinIO 使用 / 作为分隔符,从完整对象路径中自动推断中间前缀,例如 /articles/john.doe。 客户端和管理员都不应手动创建这些前缀。

客户端和管理员都不需要手动创建中间前缀,因为 MinIO 会根据对象名称自动推断它们。

Path 与 Virtual Host 存储桶访问

MinIO 同时支持 path-style (默认)和 virtual-host bucket lookups

例如,假设某个 MinIO 部署分配的完全限定域名(FQDN)为 minio.example.net

  • 使用 path-style 查找时,应用将存储桶的完整路径指定为 minio.example.net/mybucket 这类形式。
  • 使用 virtual-host 查找时,应用将存储桶指定为子域名,例如 mybucket.minio.example.net/

某些应用在针对 MinIO 执行 S3 操作时,可能要求或预期支持 virtual-host 查找。 要启用 virtual-host 存储桶查找,必须将 MINIO_DOMAIN 环境变量设置为可解析到 MinIO 部署的 FQDN

如果配置了 MINIO_DOMAIN,则 必须 视指定 FQDN 的所有子域名为专门保留给存储桶名称使用。 任何与这些域名冲突的 MinIO 服务(例如复制目标)都可能因为冲突而表现出意外或不符合预期的行为。

例如,如果设置 MINIO_DOMAIN=minio.example.net,则 不能minio.example.net 的任何子域名(即 *.minio.example.net 形式)分配给任何 MinIO 服务或目标。 这包括用于 bucketbatchsite replication 的主机名。

警告

重要

对于 启用 TLS 的部署,必须 确保 TLS 证书的 SAN 覆盖 MINIO_DOMAIN 中最左侧域名下的所有子域名。

例如,MINIO_DOMAIN=minio.example.net 的情况要求 TLS SAN 覆盖 minio.example.net 的所有子域名。 可以额外设置一个 *.minio.example.net 的 TLS SAN,以正确覆盖该子域命名空间。

TLS 通配符规则不允许继续匹配更深层级的子域名,因此,带有 *.example.net 通配符 SAN 的 TLS 证书 不能 覆盖 *.minio.example.net 这样的 virtual host 查找。

对象组织与规划

管理员通常负责控制存储桶的创建和配置。 之后,客户端应用可以使用 S3 兼容 SDK 在 MinIO 部署上创建、列出、获取并 删除 对象。 因此,客户端决定给定存储桶或前缀中的整体数据层次结构,而管理员则可以通过 策略 控制对某个操作或资源的授权或拒绝。

MinIO 对于给定部署中的存储桶、对象或前缀数量没有硬性的 阈值。 不过,MinIO 部署底层硬件和网络的相对性能,可能会对单个前缀或存储桶中可承载的对象数量形成实际限制。 具体而言,使用较慢驱动器或网络基础设施的硬件,在对象层次结构较为扁平的存储桶或前缀中通常会表现出较差的性能。 有关其他需要注意的考量、阈值或限制,请参见 阈值与限制

对于客户端应用的工作负载模式,可将以下几点作为一般性指导:

  • 使用普通或预算导向硬件的部署,应将每个前缀 10,000 个对象作为工作负载架构设计的基线目标。 然后基于真实工作负载的基准测试和监控结果,提高这一目标,直到硬件能够有意义地承载的上限。
  • 使用高性能或企业级 硬件 的部署,通常可以处理每个前缀数百万甚至更多对象。

MinIO SUBNET 企业账户可将年度架构评审纳入部署和维护策略,以确保依赖 MinIO 的项目在长期内保持性能与成功运行。

若要更深入了解限制前缀内容数量的收益,请参阅 优化 S3 性能 一文。

说明

说明

无论 Windows 文件系统是否支持,MinIO 都不支持在对象名称中使用 \: 字符。 请在对象名称中使用 / 作为分隔符,以便 MinIO 使用 前缀 自动创建文件夹结构。

对象版本控制

Object with Multiple Versions

在存储桶上执行写入、列出、获取或 删除 操作时,具体的客户端行为取决于该存储桶的版本控制状态:

操作

已启用版本控制

已禁用版本控制 | 已挂起

PUT (写入)

为对象创建一个新的完整版本作为“最新”版本,并分配唯一的版本 ID

创建对象;如果命名空间匹配则覆盖已有对象。

GET (读取)

默认获取对象的最新版本

支持通过版本 ID 获取任意对象版本。

获取对象

LIST (读取)

获取指定存储桶或前缀下对象的最新版本

支持获取所有对象及其关联的版本 ID。

获取指定存储桶或前缀下的所有对象

DELETE (写入)

为对象创建一个 0 字节的“Delete Marker”作为“最新”版本(软删除)

支持通过版本 ID 删除任意对象版本(硬删除)。 硬删除操作无法撤销。

更多信息请参见 对象删除

删除对象

有关更完整的文档,请参见 存储桶版本控制

对象标签

MinIO 支持向对象添加自定义标签。 标签是包含在对象元数据中的键值对。 标签可用于配合策略控制访问,或者通过 mc find --tags 定位对象。

MinIO 支持为单个对象最多添加 10 个自定义标签。

有关设置标签的更多信息,请参见 mc tag set

对象保留

MinIO 对象锁定(“对象保留”)通过强制执行一次写入、多次读取(WORM)不可变性,防止 已启用版本控制的对象 被删除。 MinIO 同时支持 基于时长的对象保留无限期 legal hold 保留

30 Day Locked Objects

针对受 WORM 锁定对象的删除操作,结果取决于具体操作类型:

  • 未指定版本 ID 的删除操作会创建一个 “Delete Marker”
  • 指定受锁定对象版本 ID 的删除操作会返回 WORM locking error

只有在首次创建存储桶时才能启用对象锁定。 启用存储桶锁定也会同时启用 版本控制

根据 Cohasset Associates 的说明,MinIO 对象锁定 提供关键的数据保留合规能力,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求。

有关更完整的文档,请参见 MinIO 对象锁定对象删除

对象生命周期管理

MinIO 对象生命周期管理允许为对象创建基于时间或日期的自动过渡或过期规则。 对于对象过渡,MinIO 会自动将对象移动到已配置的远程存储层。 对于对象过期,MinIO 会自动删除对象。

MinIO 在 启用和未启用版本控制的存储桶 上应用生命周期管理规则时,其行为与常规客户端操作一致。 可以指定处理最新对象版本、非当前对象版本或同时处理两者的过渡或生命周期规则。

MinIO 生命周期管理在行为和语法上与 AWS S3 Lifecycle Management 保持兼容。 MinIO 使用 JSON 描述生命周期管理规则。 导入在 S3 或类似兼容平台上创建的规则时,可能需要在 XML 和 JSON 之间进行转换。

有关更完整的文档,请参见 对象生命周期管理

目标存储桶注意事项

MinIO 要求目标存储桶在对象管理或版本控制配置上与源存储桶保持一致。 目标存储桶 可以 拥有自己的一组对象管理规则,但前提是经过谨慎定义。

目标存储桶 不应 拥有自己的过期规则或额外分层规则。 过期规则可能导致仍被源存储桶使用的分层数据被移除。 分层到额外远端会在热层与其数据之间增加额外的网络跳数,同时也会提升运维复杂度。

远程存储桶 可以 配置对象锁定或版本控制。

在目标存储桶上启用版本控制或对象锁定可能带来如下影响:

  • 目标存储桶上设置的对象锁定,可能导致源存储桶期望执行的 delete 操作无法完成。
  • MinIO 对对象进行分层时会为其分配自己的 UUID,因此目标存储桶上的版本控制至多只是冗余配置。
  • 目标端的存储效率降低,因为 delete 操作会创建 DeleteMarker,而不是释放空间。
  • 源存储桶和目标存储桶中可能出现重复的删除标记。

对远程数据的独占访问

MinIO 必须 对目标存储桶拥有 独占 访问权。 任何其他用户、进程、应用或资源都不应访问目标存储桶,也不应对其执行任何操作。

对已过渡对象的所有访问都 必须 仅通过 MinIO 的 S3 API 操作进行。 手动修改已过渡对象,无论是热 MinIO 层上的元数据,还是远程温/冷层上的对象数据,都可能导致该对象数据丢失。

MinIO 会忽略远程存储桶或存储桶前缀中任何不由该 MinIO 部署显式管理的对象。 自动过渡和透明对象读取依赖以下假设:

  • 远程存储上的对象不会被外部修改、迁移或删除。
  • 远程存储桶上不存在生命周期管理规则(例如过渡或过期)。

为实现这种独占访问,应在其 策略 中向生命周期管理用户授予目标存储桶的 readwritedelete 访问权限。 所有其他策略都应对目标存储桶 deny 访问。

冲突对象

应用必须为所有对象分配不冲突的唯一键。 这包括避免创建名称与其父对象或同级对象发生冲突的对象。 在发生冲突的位置,MinIO 对 LIST 操作返回空结果集。

例如,以下操作会创建命名空间冲突

PUT data/invoices/2024/january/vendors.csv
PUT data/invoices/2024/january <- collides with existing object prefix
PUT data/invoices/2024/january
PUT data/invoices/2024/january/vendors.csv <- collides with existing object

虽然仍然可以对这些对象执行 GET 或 HEAD 操作,但名称冲突会导致在 /invoices/2024/january 路径上的 LIST 操作返回空结果集。

9.1 - 存储桶版本控制

概述

MinIO 支持在单个存储桶中保留对象的多个“版本”。

启用后,版本控制允许 MinIO 保留同一对象的多个迭代版本。 原本会覆盖现有对象的写入操作,将改为为该对象创建一个新版本。 MinIO 版本控制可以防止意外覆盖和删除,同时支持对写入操作执行“撤销”。 配置 对象锁定和保留规则 的前提条件之一,就是启用存储桶版本控制。

对于已启用版本控制的存储桶,写入操作会为该对象创建一个带有唯一版本 ID 的新版本。 MinIO 会将对象的“最新”版本标记为客户端默认获取的版本。 之后,客户端可以显式选择列出、获取或移除某个特定对象版本。

可以定义 对象过期 规则,按版本数量或版本日期等条件移除不再需要的对象版本。

带版本对象的读取操作

查看本组中的四张图片,了解 MinIO 如何在启用版本控制的存储桶中获取对象。 使用图片两侧的箭头可在各张图片之间切换。

单一版本对象
单一版本对象

MinIO 会在写入操作中为每个对象添加唯一的版本 ID。

多版本对象
多版本对象

MinIO 会保留对象的所有版本,并将最近的版本标记为“最新”版本。

多版本对象
获取对象最新版本

未指定版本 ID 的读取请求会返回该对象的最新版本。

多版本对象
获取特定对象版本

在读取操作中指定版本 ID,即可获取对象的特定版本。

说明

变更: MinIO

Server RELEASE.2023-05-04T21-44-30Z

对于显式目录对象(“prefixes”)的创建、变更或删除,MinIO 不会创建版本。 在该显式目录对象内创建的对象,仍保留正常的版本控制行为。

MinIO 会根据对象路径隐式推断前缀。 显式创建前缀通常只会出现在 Spark 及类似工作负载中,这类工作负载会在 S3 场景下采用传统 POSIX/HDFS 的目录创建行为。

版本控制按命名空间生效

MinIO 使用对象的完整命名空间(即存储桶和对象路径)来判断对象的唯一性。 例如,下列所有命名空间都对应“唯一”对象,对其中任一对象的变更,都会在 该命名空间下 创建新的对象版本:

databucket/object.blob
databucket/blobs/object.blob
blobbucket/object.blob
blobbucket/blobs/object.blob

尽管各个命名空间中的 object.blob 可能是相同的二进制数据, MinIO 仅在特定命名空间内实施版本控制,因此会将上面的每个 object.blob 视为彼此独立且唯一的对象。

版本控制与存储容量

MinIO 不执行增量式或差异式版本控制。 对于频繁变更的工作负载,较旧或老化的对象版本可能会占用大量磁盘空间。

例如,假设一个包含日志数据的对象大小为 1GB。应用向该日志追加 100MB 数据后重新上传到 MinIO。 此时 MinIO 会同时保存该对象的 1GB 和 1.1GB 两个版本。 如果应用连续 10 天每天都重复这一过程,那么该存储桶最终会为这一个对象累计保存超过 14GB 的数据。

MinIO 支持配置 对象生命周期管理规则,以自动过期或过渡老旧对象版本并释放存储容量。 例如,你可以配置一条规则,使对象版本在变为非当前版本(即不再是该对象的“最新”版本)90 天后自动过期。 更多信息请参见 MinIO 对象过期

你也可以使用以下命令手动移除对象版本:

说明

新增: RELEASE.2024-04-18T19-09-19Z

如果任一单个对象的版本累计大小超过 1TiB,MinIO 会发出警告。

版本 ID 生成

MinIO 会在写入操作中为每个对象版本生成唯一且不可变的标识符。 每个对象版本 ID 都由一个 128 位固定长度的 UUIDv4 组成。 UUID 的生成具有足够随机性,可在任何环境中以极高概率保证唯一性,计算上也难以猜测,并且无需依赖中心化注册流程或机构来保证唯一性。

多版本对象

MinIO 不支持由客户端管理版本 ID 的分配。 所有版本 ID 的生成都由 MinIO 服务端进程处理。

对于在版本控制禁用或挂起期间创建的对象,MinIO 会使用 null 版本 ID。 在 S3 操作中将 null 指定为版本 ID,即可访问或移除这些对象。

版本控制下的删除操作

对带版本的对象执行 DELETE 操作时,会创建一个 0 字节的 DeleteMarker 作为该对象的最新版本。 如果对象的最新版本是 DeleteMarker,客户端必须指定版本控制相关标志或标识符,才能对该对象的先前版本执行 GET/HEAD/LIST/DELETE 操作。 在未显式指定版本的操作中,服务端默认会忽略 DeleteMarker 对象。

MinIO 可以利用 生命周期管理过期规则 自动永久移除对象的旧版本。 否则,可使用手动 DELETE 操作永久删除非当前版本对象或 DeleteMarker 对象。

说明

MinIO 实现幂等 Delete Marker

说明

变更: RELEASE.2022-08-22T23-53-06Z

标准 S3 实现处理未指定版本标识符的简单 DeleteObject 请求时,可能会为同一对象连续创建多个删除标记。 关于更多细节,请参见 S3 文档中的 管理删除标记

MinIO 与标准 S3 实现不同,会避免这种潜在的删除标记重复。 处理未指定版本标识符的 Delete 请求时,MinIO 最多只会为指定对象创建一个 Delete Marker。 MinIO 不会 像 S3 那样创建多个连续的删除标记。

若要永久删除某个对象版本,请执行 DELETE 操作并指定待删除对象的版本 ID。 这种删除操作 不可逆

删除对象
删除对象

对带版本的对象执行 DELETE 操作时,会为该对象生成一个 DeleteMarker

多版本对象
读取已删除对象

客户端默认获取对象的“最新”版本。 如果最新版本是 DeleteMarker,MinIO 会返回类似 404 的响应。

获取已删除对象的版本
获取已删除对象的先前版本

即使“最新”版本是 DeleteMarker,客户端仍可通过指定版本 ID 获取该对象的任意先前版本。

获取已删除对象的版本
删除特定对象版本

客户端可在 DELETE 操作中指定版本 ID,以删除某个特定对象版本。 删除特定版本属于 永久 删除,不会创建 DeleteMarker

以下 mc 命令可用于处理 DeleteMarkers 或带版本的对象:

教程

启用存储桶版本控制

你可以使用 MinIO Console、MinIO mc CLI 或兼容 S3 的 SDK 启用版本控制。

使用 mc version enable 命令为现有存储桶启用版本控制:

mc version enable ALIAS/BUCKET
  • ALIAS 替换为已配置 MinIO 部署的 alias
  • BUCKET 替换为要启用版本控制的 目标存储桶

在启用版本控制之前创建的对象,其 版本 IDnull

从版本控制中排除前缀

你可以使用 MinIO Client 将某些 前缀 排除在版本控制之外。 这对于 Spark/Hadoop 等起初会使用临时前缀创建对象的工作负载尤其有用。

说明

复制和对象锁定都要求启用版本控制

MinIO 依赖版本控制来支持 复制。 位于排除前缀中的对象不会复制到任何对等站点或远程站点。

对于已 启用对象锁定 的存储桶,MinIO 不支持从版本控制中排除前缀。

--excluded-prefixes 中的前缀列表会匹配前缀或名称中包含指定字符串的所有对象,其行为类似 prefix* 形式的正则表达式。 若仅按前缀匹配对象,请使用 prefix/*

例如,以下命令会将前缀或名称中包含 _test_temp 的对象排除在版本控制之外:

mc version enable --excluded-prefixes "_test, _temp" local/my-bucket

每个存储桶最多可排除 10 个前缀。 若要添加或移除前缀,请使用更新后的列表再次执行 mc version enable 命令。 新列表会替换先前的列表。

若要查看当前排除的前缀,请使用带 --json 选项的 mc version info

mc version info ALIAS/BUCKET --json

命令输出类似如下,排除前缀列表位于 ExcludedPrefixes 属性中:

$ mc version info local/my-bucket --json
{
 "Op": "info",
 "status": "success",
 "url": "local/my-bucket",
 "versioning": {
  "status": "Enabled",
  "MFADelete": "",
  "ExcludedPrefixes": [
   "prefix1, prefix2"
  ]
 }
}

若要禁用前缀排除并恢复对所有前缀启用版本控制,请在不带 --excluded-prefixes 的情况下再次执行 mc version enable

mc version enable ALIAS/BUCKET

从版本控制中排除文件夹

你可以使用 MinIO Client 将文件夹排除在版本控制之外。

说明

复制和对象锁定都要求启用版本控制

MinIO 依赖版本控制来支持 复制。 位于排除文件夹中的对象不会复制到任何对等站点或远程站点。

对于已 启用对象锁定 的存储桶,MinIO 不支持从版本控制中排除文件夹。

说明

对象锁定

启用对象锁定 的存储桶要求启用版本控制,且不支持排除文件夹。

  • 使用带 --exclude-folders 选项的 mc version enable,将名称以 / 结尾的对象排除在版本控制之外:

    mc version enable --exclude-folders ALIAS/BUCKET
    • ALIAS 替换为已配置 MinIO 部署的 alias
    • BUCKET 替换为要为其排除 文件夹存储桶

若要检查某个存储桶中的文件夹是否启用版本控制,请使用带 --json 选项的 mc version enable 命令。 如果 ExcludeFolders 属性为 true,则该存储桶中的文件夹不启用版本控制。

mc version enable --excluded-prefixes ALIAS/BUCKET --json

命令输出类似如下:

$ mc version info local/my-bucket --json
{
 "Op": "info",
 "status": "success",
 "url": "local/my-bucket",
 "versioning": {
  "status": "Enabled",
  "MFADelete": "",
  "ExcludeFolders": true
 }
}

若要禁用文件夹排除并恢复对所有文件夹启用版本控制,请在不带 --exclude-folders 的情况下再次执行 mc version enable

mc version enable ALIAS/BUCKET

挂起存储桶版本控制

你可以随时使用 MinIO mc CLI 或兼容 S3 的 SDK 挂起存储桶版本控制。

使用 mc version suspend 命令挂起现有存储桶的版本控制:

mc version suspend ALIAS/BUCKET
  • ALIAS 替换为已配置 MinIO 部署的 alias
  • BUCKET 替换为要禁用版本控制的 目标存储桶

在版本控制挂起期间创建的对象会被分配一个 null 版本 ID。 在版本控制挂起期间,对对象的任何变更都会覆盖该 null 版本对象。 MinIO 在挂起版本控制时不会删除或以其他方式更改已有的对象版本。 客户端仍可继续与存储桶中已有的各个对象版本进行交互。

9.2 - 将对象迁移到远程 MinIO 部署

本页中的操作步骤用于创建新的对象生命周期管理规则,将对象从主 MinIO 部署上的某个存储桶迁移到远程 MinIO 部署上的某个存储桶。 该流程支持成本管理策略,例如将对象从使用 NVMe 存储的“热” MinIO 部署分层到使用 SSD 的“温” MinIO 部署。

前提条件

安装并配置 mc

此过程使用 mc 对 MinIO 集群执行操作。 请在一台同时具备源集群和目标集群网络访问能力的机器上安装 mc。 有关下载和安装 mc 的说明,请参见 mc 安装快速开始

使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定 access key。 所指定的用户必须具备配置和应用迁移操作所需的 权限

所需的源 MinIO 权限

MinIO 要求对要为其创建生命周期管理规则的存储桶授予以下权限。

对于要在其中为对象迁移生命周期管理规则创建远程层的集群,MinIO 还要求具备以下管理权限:

例如,以下策略授予在该集群任意存储桶上配置对象迁移生命周期管理规则的权限:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "admin:SetTier",
               "admin:ListTier"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteTierManagement"
      },
      {
            "Action": [
               "s3:PutLifecycleConfiguration",
               "s3:GetLifecycleConfiguration"
            ],
            "Resource": [
                        "arn:aws:s3:::*"
            ],
            "Effect": "Allow",
            "Sid": "EnableLifecycleManagementRules"
      }
   ]
}

所需的远程 MinIO 权限

对象迁移生命周期管理规则要求在远程存储层上具备额外权限。 具体而言,MinIO 要求远程层凭据对远程存储桶具备读取、写入、列出和删除权限。

例如,远程 MinIO 部署上的以下策略提供了将对象迁入和迁出远程层所需的权限:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::MyDestinationBucket"
            ],
            "Sid": ""
      },
      {
            "Action": [
               "s3:GetObject",
               "s3:PutObject",
               "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::MyDestinationBucket/*"
            ],
            "Sid": ""
      }
   ]
}

请修改 Resource,使其指向 MinIO 要迁移对象进入的存储桶。

有关配置所需权限的更完整指导,请参见 访问管理 文档。

远程存储桶必须已存在

必须先创建远程存储桶,然后才能配置以该存储桶为目标的生命周期管理层或规则。

如果远程存储桶中包含现有数据,请使用 prefix 功能,将已迁移对象与该存储桶中的其他对象隔离开来。

注意事项

生命周期管理对象扫描器

MinIO 使用 扫描器进程 根据所有已配置的生命周期管理规则检查对象。 高 IO 负载或系统资源受限导致的扫描变慢,可能会延迟生命周期管理规则的生效。

对远程数据的独占访问

MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。

对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。

对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:

  • 不会在远程存储上由外部修改、迁移或删除对象。
  • 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。

MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。

对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。

远程数据的可用性

MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。

MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。

需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)

过程

1) 配置生命周期管理的用户账户和策略

此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 permissions 的用户,则可以跳过此步骤。

以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。

wget -O - https://silo.pgsty.com/extra/examples/LifecycleManagementAdmin.json | \
mc admin policy create Alpha LifecycleAdminPolicy /dev/stdin
mc admin user add Alpha alphaLifecycleAdmin LongRandomSecretKey
mc admin policy attach Alpha LifecycleAdminPolicy --user=alphaLifecycleAdmin

此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理MinIO Policy Based Access Control

2) 配置远程存储层

使用 mc ilm tier add 命令将远程 MinIO 部署添加为新的远程存储层:

mc ilm tier add minio TARGET TIER_NAME  \
   --endpoint https://HOSTNAME       \
   --access-key ACCESS_KEY           \
   --secret-key SECRET_KEY           \
   --bucket BUCKET                   \
   --prefix PREFIX                   \
   --storage-class STORAGE_CLASS     \
   --region REGION

上面的示例使用了以下参数:

参数

说明

ALIAS

要在其上配置 MinIO 远程层的 MinIO 部署 别名

TIER_NAME

要关联到新 MinIO 远程存储层的名称。 请使用全大写名称,例如 MINIO_WARM_TIER。下一步需要使用该值。

HOSTNAME

MinIO 存储后端的 URL endpoint。

ACCESS_KEY

MinIO 用于访问存储桶的 access key。 该 access key 必须 对应到具备所需 权限.

SECRET_KEY

与指定 ACCESS_KEY 对应的 secret key。

BUCKET

远程 MinIO 部署上用于接收 SOURCE 迁移对象的存储桶名称。

PREFIX

MinIO 迁移对象时使用的可选存储桶前缀。

MinIO 会将所有已迁移对象存储到指定的 BUCKET 中,并放在部署唯一的前缀值之下。 省略此参数时,将仅使用该前缀值在远程存储中隔离和组织数据。

对于包含其他数据的远程存储层,包括来自其他 MinIO 部署的已迁移对象,MinIO 建议指定此可选前缀。 该前缀应能清晰标识回源 MinIO 部署,以便开展诊断、维护或灾难恢复等运维工作。

STORAGE_CLASS

MinIO 对迁移到远程 MinIO 存储桶的对象应用的 纠删码存储类。 请指定以下受支持存储类之一:

  • STANDARD 推荐

  • REDUCED

REGION

指定 BUCKET 的 MinIO region。

MinIO 部署通常不需要在安装时设置 region。 只有在您为该部署显式设置了 MINIO_SITE_REGION 配置项时,才需要包含此选项。

3) 创建并应用迁移规则

使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:

mc ilm rule add ALIAS/BUCKET \
--transition-tier TIERNAME \
--transition-days DAYS \
--noncurrent-transition-days NONCURRENT_DAYS
--noncurrent-transition-tier TIERNAME

上述示例指定了以下参数:

参数

说明

ALIAS

指定要为其创建生命周期管理规则的 MinIO 部署 alias

BUCKET

指定要为其创建生命周期管理规则的存储桶完整路径。

TIERNAME

MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。

如果要将非当前对象版本转移到不同的远程层, 请为 --noncurrent-transition-tier 指定另一个层名称。

DAYS

MinIO 在经过多少个日历天后将对象标记为可转移。 该值必须为整数,例如 30 表示 30 天。

NONCURRENT_DAYS

MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。 MinIO 具体计算的是对象变为非当前版本后的时间, 而不是对象创建时间。该值必须为整数, 例如 90 表示 90 天。

省略此值可忽略非当前对象版本。

此选项对未启用版本控制的存储桶无效。

4) 验证迁移规则

使用 mc ilm rule ls 命令检查已配置的迁移规则:

mc ilm rule ls ALIAS/PATH --transition
  • ALIAS 替换为 MinIO 部署的 别名
  • PATH 替换为要获取其生命周期管理规则的存储桶名称。

9.3 - Silo 对象锁定

概述

MinIO 对象锁定(“对象保留”)通过强制执行一次写入、多次读取(WORM)不可变性,防止 已启用版本控制的对象 被删除。MinIO 同时支持 基于时长的对象保留无限期 legal hold 保留

根据 Cohasset Associates 的说明,MinIO 对象锁定 提供关键的数据保留合规能力,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求。

删除对象
未启用锁定的存储桶

MinIO 版本控制会保留对象变更的完整历史。 但应用仍可显式删除特定对象版本。

锁定 30 天的对象
启用锁定的存储桶

对存储桶中的对象应用默认 30 天的 WORM 锁,可确保所有对象版本在最短保留期内受到保护。

锁定存储桶中的删除操作
锁定存储桶中的删除操作

删除操作已启用版本控制的存储桶 中遵循常规行为,即 MinIO 会为对象创建 DeleteMarker。不过,对象中非 Delete Marker 的版本仍受保留规则约束,可防止任何针对特定版本的删除或覆盖尝试。

锁定存储桶中的版本删除操作
锁定存储桶中的版本删除操作

对于受 WORM 锁定保护的特定对象版本,MinIO 会阻止任何 删除 尝试。客户端最早只能在锁过期后删除该版本。

MinIO 对象锁定在功能和 API 层面与 AWS S3 兼容。 本页概述了 MinIO 中对象锁定/保留的实现概念。更多信息请参见 AWS S3 文档 How S3 Object Lock works

按照 S3 的行为, 只能在创建存储桶时启用对象锁定。对于创建时未启用锁定的存储桶,之后无法再启用对象锁定。启用后,你可以在任意时刻配置对象保留规则。对象锁定依赖 版本控制,并会隐式启用该特性。

与版本控制的交互

受 WORM 锁定保护的对象在锁过期或被显式解除之前均不可变更。锁定以对象版本为粒度,每个版本都独立保持不可变。

如果应用对受锁定对象执行未指定版本的删除操作,该操作会生成一个 Delete Marker。 任何显式删除受 WORM 锁定对象的尝试都会报错失败。Delete Marker 受 WORM 锁定保护。 更多信息请参见 S3 文档 Managing delete markers and object lifecycles

例如,考虑以下默认启用了 GOVERNANCE 模式 锁定的存储桶:

$ mc ls --versions play/locking-guide

  [DATETIME]    29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
  [DATETIME]    32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
  [DATETIME]    23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv

由于对象锁定设置,对 data.csv特定版本 执行删除会失败:

$ mc rm --version-id 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 play/data.csv

  Removing `play/locking-guide/data.csv` (versionId=62429eb1-9cb7-4dc5-b507-9cc23d0cc691).
  mc: <ERROR> Failed to remove `play/locking-guide/data.csv`.
      Object, 'data.csv (Version ID=62429eb1-9cb7-4dc5-b507-9cc23d0cc691)' is
      WORM protected and cannot be overwritten

data.csv 执行未指定版本的删除会成功,并为对象创建一个新的 DeleteMarker

$ mc rm play/locking-guide/data.csv

  [DATETIME]     0B acce329f-ad32-46d9-8649-5fe8bf4ec6e0 v4 DEL data.csv
  [DATETIME]    29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
  [DATETIME]    32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
  [DATETIME]    23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv

与生命周期管理的交互

对于受过期规则覆盖的对象,MinIO 对象过期 会遵循所有生效中的对象锁定和保留设置。

  • 对于仅作用于 当前 对象版本的过期规则, MinIO 会为受锁定对象创建一个 Delete Marker。
  • 对于作用于 非当前对象版本 的过期规则, MinIO 只能在保留期结束 之后,或保留已被显式解除时(例如 legal hold)对非当前版本执行过期。

例如,考虑以下默认启用了 GOVERNANCE 模式 且保留期为 45 天的存储桶:

$ mc ls --versions play/locking-guide

  [7D]    29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
  [30D]    32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
  [60D]    23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv

为超过 7 天的 当前 对象创建过期规则时,会为该对象生成一个 Delete Marker:

$ mc ls --versions play/locking-guide

  [0D]     0B acce329f-ad32-46d9-8649-5fe8bf4ec6e0 v4 DEL data.csv
  [7D]    29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
  [30D]    32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
  [60D]    23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv

不过,对于超过 7 天的 非当前 对象,过期规则只有在已配置的 WORM 锁过期 之后 才会生效。由于该存储桶设置了 45 天的 GOVERNANCE 保留,因此只有 data.csvv1 版本已解锁,因而可被删除。

教程

创建启用对象锁定的存储桶

按照 S3 的行为,必须在创建存储桶时启用对象锁定。 你可以使用 MinIO mc CLI 或 S3 兼容 SDK 创建启用了对象锁定的存储桶。

使用带有 --with-lock 选项的 mc mb 命令创建启用了对象锁定的存储桶:

mc mb --with-lock ALIAS/BUCKET
  • ALIAS 替换为已配置 MinIO 部署的 alias
  • BUCKET 替换为要创建的存储桶 名称

配置存储桶默认对象保留

你可以使用 MinIO mc CLI 或 S3 兼容 SDK 配置对象锁定规则(“对象保留”)。

MinIO 同时支持设置存储桶默认保留规则和按对象设置保留规则。 以下示例演示的是存储桶默认保留。对于按对象设置保留,请参见所选 SDK 中相应 PUT 操作的文档。

使用带有 --recursive--default 选项的 mc retention set 命令,为存储桶设置默认保留模式:

mc retention set --recursive --default MODE DURATION ALIAS/BUCKET

你可以使用 MinIO mc CLI 或 S3 兼容 SDK,为对象启用或禁用无限期 legal hold 保留。

你可以对已经处于 COMPLIANCEGOVERNANCE 锁定下的对象设置 legal hold。 即使保留锁过期,对象在 legal hold 生效期间仍会保持 WORM 锁定。 你或其他拥有必要权限的用户必须显式解除 legal hold,才能移除 WORM 锁。

使用 mc legalhold set 命令切换对象的 legal hold 状态。

mc legalhold set ALIAS/PATH
  • ALIAS 替换为已配置 MinIO 部署的 alias
  • PATH 替换为要启用 legal hold 的对象路径。

对象保留模式

MinIO 实现了以下 S3 对象锁定模式

模式

说明

GOVERNANCE 模式

阻止非特权用户执行任何会变更对象或其锁定设置的操作。

在存储桶或对象上拥有 s3:BypassGovernanceRetention 权限的用户,可以修改对象或其锁定设置。

在配置的保留规则持续时间结束后,MinIO 会自动解除该锁。

COMPLIANCE 模式

阻止任何会变更对象或其锁定设置的操作。

包括 MinIO root 用户在内的任何 MinIO 用户都无法修改对象或其设置。

在配置的保留规则持续时间结束后,MinIO 会自动解除该锁。

GOVERNANCE 模式

处于 GOVERNANCE 锁定下的对象可防止非特权用户执行写操作。

GOVERNANCE 锁定对象提供受管控的不可变性。拥有 s3:BypassGovernanceRetention 操作权限的用户可以修改被锁定对象、调整保留时长,或完全解除该锁。绕过 GOVERNANCE 保留还要求在请求中设置 x-amz-bypass-governance-retention:true header。

MinIO 的 GOVERNANCE 锁在功能上与 S3 GOVERNANCE 模式 完全一致。

COMPLIANCE 模式

处于 COMPLIANCE 锁定下的对象可防止 所有 用户执行写操作,包括 MinIO root 用户。

COMPLIANCE 锁定对象提供完全不可变性。 在配置的保留时长结束之前,无法更改或移除该锁。

MinIO 的 COMPLIANCE 锁在功能上与 S3 COMPLIANCE 模式 完全一致。

Legal Hold

处于 legal hold 状态下的对象可防止 所有 用户执行写操作,包括 MinIO root 用户。

legal hold 为无限期,并对锁定对象强制执行完全不可变性。 只有拥有 s3:PutObjectLegalHold 权限的特权用户才能设置或解除 legal hold。

legal hold 在对象级别生效。 如果你为一组对象启用 legal hold,例如某个存储桶中的现有内容,则该存储桶后续新创建的对象不会受到影响。

legal hold 与 GOVERNANCE 模式COMPLIANCE 模式 保留设置是互补关系。 同时受 legal hold 和 GOVERNANCE/COMPLIANCE 保留规则保护的对象,会持续保持 WORM 锁定,直到 legal hold 被解除 规则到期。

对于 GOVERNANCE 锁定对象,即使用户拥有绕过保留的必要权限,legal hold 仍会阻止其修改该对象。

9.4 - 将对象从 MinIO 迁移到 S3

本页中的步骤将创建一条新的对象生命周期管理规则,用于将对象从 MinIO 存储桶迁移到 Amazon Web Services S3 存储后端或兼容 S3 的服务上的远程存储层。该过程适用于这类场景:在经过一定时间周期或达到某个日历日期后,将对象分层到低成本存储或归档存储。

要求

安装并配置 mc

此过程使用 mc 在 MinIO 集群上执行操作。 请在一台能够同时访问源集群和目标集群网络的机器上安装 mc。 有关下载和安装 mc 的说明,请参见 mc 快速安装

使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定 access key。 指定的用户必须具备配置和应用迁移操作所需的 权限

所需的 MinIO 权限

MinIO 要求为要创建生命周期管理规则的一个或多个存储桶授予以下权限。

MinIO 还要求在为对象迁移生命周期管理规则创建远程层的集群上具备以下管理权限:

例如,以下策略授予在集群中任意存储桶上配置对象迁移生命周期管理规则的权限:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "admin:SetTier",
               "admin:ListTier"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteTierManagement"
      },
      {
            "Action": [
               "s3:PutLifecycleConfiguration",
               "s3:GetLifecycleConfiguration"
            ],
            "Resource": [
                        "arn:aws:s3:::*"
            ],
            "Effect": "Allow",
            "Sid": "EnableLifecycleManagementRules"
      }
   ]
}

所需的 S3 权限

对象迁移生命周期管理规则还要求远程存储层具备额外权限。 具体来说,MinIO 要求远程层凭证对远程存储桶具备读取、写入、列出和删除权限。

例如,以下策略提供了将对象迁入和迁出远程层所需的权限:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::MyDestinationBucket"
            ],
            "Sid": ""
      },
      {
            "Action": [
               "s3:GetObject",
               "s3:PutObject",
               "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::MyDestinationBucket/*"
            ],
            "Sid": ""
      }
   ]
}

请根据 MinIO 分层对象所使用的存储桶修改 Resource

有关如何配置所需权限的更完整说明,请参见 Amazon S3 Permissions 文档。

远程存储桶必须已存在

在配置以该存储桶为目标的生命周期管理层或规则之前,先创建远程 S3 存储桶。

注意事项

生命周期管理对象扫描器

MinIO 使用 scanner process 根据所有已配置的生命周期管理规则检查对象。 如果由于高 IO 工作负载或系统资源有限导致扫描速度较慢,可能会延迟生命周期管理规则的应用。 更多信息请参见 生命周期管理对象扫描器

对远程数据的独占访问

MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。

对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。

对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:

  • 不会在远程存储上由外部修改、迁移或删除对象。
  • 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。

MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。

对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。

远程数据的可用性

MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。

MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。

需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)

步骤

1) 配置生命周期管理的用户账户和策略

此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 权限 的用户,则可以跳过此步骤。

以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。

wget -O - https://silo.pgsty.com/extra/examples/LifecycleManagementAdmin.json | \
mc admin policy create Alpha LifecycleAdminPolicy /dev/stdin
mc admin user add Alpha alphaLifecycleAdmin LongRandomSecretKey
mc admin policy attach Alpha LifecycleAdminPolicy --user=alphaLifecycleAdmin

此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理MinIO Policy Based Access Control

2) 配置远程存储层

使用 mc ilm tier add 命令将 Amazon S3 服务添加为新的远程存储层:

mc ilm tier add s3 TARGET TIER_NAME  \
   --endpoint https://HOSTNAME       \
   --access-key ACCESS_KEY           \
   --secret-key SECRET_KEY           \
   --bucket BUCKET                   \
   --prefix PREFIX                   \
   --storage-class STORAGE_CLASS     \
   --region REGION

上面的示例使用了以下参数:

参数

说明

TARGET

要在其上配置 S3 远程层的 MinIO 部署的 alias

TIER_NAME

与新建 S3 远程存储层关联的名称。请使用全大写形式,例如 S3_TIER。 下一步需要使用该值。

HOSTNAME

S3 存储后端的 URL 端点。

ACCESS_KEY

MinIO 用于访问该存储桶的 S3 access key。 该 access key 必须 对应一个具备所需 权限 的 IAM 用户。

SECRET_KEY

与指定 ACCESS_KEY 对应的 secret key。

BUCKET

S3 存储后端上 MinIO 用于迁移对象的存储桶名称。

PREFIX

MinIO 迁移对象时使用的可选存储桶前缀。

MinIO 会将所有已迁移对象存储在指定 BUCKET 下,并使用每个部署唯一的前缀值。 省略此参数时,将仅使用该唯一值在远程存储中隔离和组织数据。

对于包含其他数据的远程存储层,包括来自其他 MinIO 部署的已迁移对象,MinIO 建议指定此可选前缀。 该前缀应能清晰指向源 MinIO 部署,以便于执行诊断、维护或灾难恢复相关操作。

STORAGE_CLASS

MinIO 迁移对象时使用的 S3 storage class。

MinIO 的分层行为依赖远程存储在收到请求后立即返回对象(毫秒到秒级)。 因此,MinIO 不能 支持需要 rehydration、等待周期或人工干预的远程存储。

以下 S3 storage class 满足 MinIO 对远程层的要求:

  • STANDARD

  • STANDARD-IA

  • STANDARD-ONEZONE

省略此值将使用该存储桶的默认 storage class。 指定此值会覆盖存储桶的 storage class。

更多信息请参见 Using Amazon S3 storage classes

REGION

指定 BUCKET 所在的 AWS S3 区域。 如果 HOSTNAME 已包含区域信息,则可以安全地省略此选项。

3) 创建并应用迁移规则

使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:

mc ilm rule add ALIAS/BUCKET \
--transition-tier TIERNAME \
--transition-days DAYS \
--noncurrent-transition-days NONCURRENT_DAYS
--noncurrent-transition-tier TIERNAME

上述示例指定了以下参数:

参数

说明

ALIAS

指定要为其创建生命周期管理规则的 MinIO 部署 alias

BUCKET

指定要为其创建生命周期管理规则的存储桶完整路径。

TIERNAME

MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。

如果要将非当前对象版本转移到不同的远程层, 请为 --noncurrent-transition-tier 指定另一个层名称。

DAYS

MinIO 在经过多少个日历天后将对象标记为可转移。 该值必须为整数,例如 30 表示 30 天。

NONCURRENT_DAYS

MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。 MinIO 具体计算的是对象变为非当前版本后的时间, 而不是对象创建时间。该值必须为整数, 例如 90 表示 90 天。

省略此值可忽略非当前对象版本。

此选项对未启用版本控制的存储桶无效。

4) 验证迁移规则

使用 mc ilm rule ls 命令查看已配置的迁移规则:

mc ilm rule ls ALIAS/PATH --transition
  • ALIAS 替换为 MinIO 部署的 alias
  • PATH 替换为要获取其已配置生命周期管理规则的存储桶名称。

9.5 - 对象删除

概述

本页概述 DELETE 操作会如何影响对象,具体取决于包含该对象的存储桶配置。

以下因素的任意组合都可能影响 DELETE 操作的行为:

权限

MinIO 使用 基于策略的访问控制 系统进行访问管理。 用户或服务账户必须提供正确的策略操作和条件,才能对该存储桶和对象执行 DELETE

未启用版本控制的对象

如果对未启用版本控制的存储桶中的对象执行 DELETE 操作,其行为比较直接。 在确认用户或服务账户具有执行 DELETE 操作的权限后,MinIO 会永久删除该对象。

请求删除操作的用户或服务账户必须对该存储桶和对象具有 s3:DeleteObject 操作权限。

已启用版本控制的对象

启用版本控制后,DELETE 操作的行为会有所不同。

用户或服务账户必须对该存储桶和对象具有 s3:DeleteObjectVersion 操作权限。

删除当前版本

如果对已启用版本控制的对象执行 DELETE 操作,但未指定版本 UUID,则会创建一个 DeleteMarker,并将其置为该对象的 head

在这种情况下,MinIO 实际上不会从磁盘中删除该对象或其任何版本。 该对象的所有现有版本仍可通过指定对应版本的 UUID 进行访问。 当 DeleteMarker 成为该对象的 head 时,MinIO 不会为未指定版本 ID 的 GET 请求返回该对象。 相反,MinIO 会返回类似 404 的响应。

可以使用 mc ls --versions 查找对象版本的 UUID。

如需从驱动器中删除对象的当前版本,请先找到该版本的 UUID,然后使用 mc rm --version-id=UUID ... 删除当前版本。 在这种情况下,该对象紧邻的前一个版本将成为当前版本,并用于响应未指定 UUID 的该对象 GET 请求。

注意

警告

在 DELETE 操作中指定 version-id 是不可逆的。 MinIO 会从驱动器中删除指定版本,并且 无法 恢复。

删除先前版本

如需删除对象的先前版本,请指定该版本的 UUID。 可以使用 mc ls --versions 获取版本 UUID。 当 DELETE 请求指定 version-id,且用户具有删除该对象版本的正确权限时,MinIO 会从驱动器中永久删除指定版本。

注意

警告

在 DELETE 操作中指定 version-id 是不可逆的。 MinIO 会从驱动器中删除指定版本,并且 无法 恢复。

删除所有版本

使用 mc rm --versions 删除对象的 所有 版本。 此操作不可逆。

生命周期管理过期

可以定义一个或多个 生命周期管理过期规则,使对象在达到指定的版本数量或经过指定时间后过期。 当版本数量超过规则指定值,或某个版本的时间早于指定阈值时,MinIO 会从驱动器中永久删除该对象版本。

这些规则依赖 扫描器 在存储桶上处理规则。 扫描器以较低优先级持续运行,系统会优先处理 READWRITE 操作。 因此,满足过期条件的对象版本可能不会立即从 MinIO 中移除。

有关扫描器工作方式和配置选项的更多信息,请参阅 扫描器 页面。

DeleteMarkers 本身也是对象。 生命周期规则可以删除作为对象唯一剩余版本的 DeleteMarkers

说明

变更: MinIO

RELEASE.2024-05-01T01-11-10Z

使用 JSON 时,生命周期规则可以在指定天数后删除已删除对象的所有版本。

受保留规则保护的对象

MinIO 会保护受 锁定规则 约束的对象,防止其被覆盖或删除。 这些规则要求对象在规则过期或被移除之前必须予以保留。

对已锁定对象执行未指定版本的 DELETE 操作,会为该对象创建一个 DeleteMarker。 但对象各版本本身仍会按锁定要求予以保留。

指定对象版本的 DELETE 操作受保留规则约束。 对于受锁定保护的对象版本,MinIO 会在锁定过期或被移除之前防止其被覆盖或删除。

已复制对象

复制会将对象从一个位置复制到另一个位置。 MinIO 支持存储桶级别或集群(“site”)级别的复制。

删除操作是否会被复制,取决于复制类型以及复制配置方式。

站点复制

对于启用了 多站点复制 的集群,MinIO 会将任一集群上执行的所有 delete 操作复制到对等组中的其他每个集群。

任一单个对等节点上的删除行为,都遵循普通 MinIO 部署相同的处理流程。

存储桶复制

通过 存储桶复制,MinIO 支持在源存储桶与配置好的远程存储桶之间复制删除操作。 MinIO 会同步删除特定对象版本以及新的 delete markers。 删除操作复制使用与其他所有复制操作相同的 复制流程

MinIO 要求 显式启用 带版本删除和 delete marker 复制。 使用 mc replicate add --replicate 字段指定 deletedelete-marker 或两者,以分别启用带版本删除和 delete marker 复制。 如需同时启用两者,请使用逗号分隔这两个字符串:delete,delete-marker

对于 delete marker 复制,MinIO 会在删除操作创建 delete marker 后启动复制流程。 MinIO 使用 X-Minio-Replication-DeleteMarker-Status 元数据字段跟踪 delete marker 的复制状态。 在 active-active 复制配置中,如果两个集群并发为某个对象创建 delete marker,或者在复制事件同步前一个或两个集群处于宕机状态,MinIO 可能会产生重复的 delete marker。

对于复制特定对象版本的删除,MinIO 会将该对象版本标记为 PENDING,直到复制完成。 一旦远程目标删除了该对象版本,MinIO 就会删除源端的该对象版本。 虽然此过程可确保版本删除近似同步,但它也可能导致在初始删除操作之后,列表操作仍返回该对象版本。 MinIO 使用 X-Minio-Replication-Delete-Status 跟踪删除版本的复制状态。

MinIO 只复制由客户端显式触发的删除操作。 MinIO 不会 复制由 生命周期管理过期规则 删除的对象。 对于 active-active 配置,应在 所有 复制存储桶上设置相同的过期规则,以确保对象过期行为一致。

MinIO 会清理源存储桶和远程存储桶中的空对象前缀

如果某次删除操作移除了某个存储桶前缀中的最后一个对象,MinIO 会递归删除该前缀中直到存储桶根为止的每一个空层级。 MinIO 仅对作为对象写入操作一部分而 隐式 创建的前缀执行这种递归删除。 对于使用显式目录创建命令(例如 mc mb)创建的前缀,MinIO 不会递归删除。

如果复制规则启用了删除操作复制,则复制过程在目标 MinIO 集群上 同样 会应用这种隐式前缀清理行为。

例如,考虑一个名为 photos 的存储桶,其中包含以下对象前缀:

  • photos/2021/january/myphoto.jpg // 2021/january/ 根据对象名隐式创建
  • photos/2021/february/myotherphoto.jpg // 2021/february/ 根据对象名隐式创建
  • photos/NYE21/NewYears.jpg // NYE21/ 在存储桶中显式创建

photos/NYE21唯一 使用 mc mb 显式创建的前缀。 其他所有前缀都是在写入位于该前缀下的对象时 隐式 创建的。

  • 某个命令删除了 myphoto.jpg。 MinIO 会自动清理空的 /january/ 前缀。
  • 某个命令随后删除了 myotherphoto.jpg。 MinIO 会自动清理 /february/ 前缀,以及此时已为空的 /2021 前缀。
  • 某个命令删除了 NewYears.jpg 对象。 由于 /NYE21/显式 创建的,MinIO 会保留该前缀。

9.6 - 将对象从 MinIO 迁移到 GCS

本页中的过程会创建一条新的对象生命周期管理规则,将对象从 MinIO 存储桶迁移到 Google Cloud Storage 后端上的远程存储层。该过程适用于这类场景:在达到特定时间周期或日历日期后, 将陈旧数据迁移到低成本的公有云存储方案。

要求

安装并配置 mc

该过程使用 mc 在 MinIO 集群上执行操作。 请在一台可同时通过网络访问源集群和目标集群的机器上安装 mc。 有关下载和安装 mc 的说明,请参见 mc Installation Quickstart

使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定访问密钥。 指定的用户必须具备用于配置和应用迁移操作的 权限

所需的 MinIO 权限

MinIO 要求在您为其创建生命周期管理规则的一个或多个存储桶范围内,具备以下权限。

此外,在为对象迁移生命周期管理规则创建远程层的集群上,MinIO 还要求具备以下管理权限:

例如,以下策略授予在集群中任意存储桶上配置对象迁移生命周期管理规则的权限:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "admin:SetTier",
               "admin:ListTier"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteTierManagement"
      },
      {
            "Action": [
               "s3:PutLifecycleConfiguration",
               "s3:GetLifecycleConfiguration"
            ],
            "Resource": [
                        "arn:aws:s3:::*"
            ],
            "Effect": "Allow",
            "Sid": "EnableLifecycleManagementRules"
      }
   ]
}

所需的 GCS 权限

对象迁移生命周期管理规则要求在远程存储层上具备额外权限。 具体来说,MinIO 要求 GCS 凭证对远程存储桶具备读取、写入、列出和删除权限。

有关配置所需权限的更完整说明,请参见 GCS IAM permissions 文档。

远程存储桶必须已存在

在配置以该存储桶为目标的生命周期管理层或规则之前,请先创建远程 GCS 存储桶。

如果您设置了默认的 GCS storage class,那么在定义远程层时,如果未指定 storage class,MinIO 就会使用该默认值。 请确保记录您的 GCS 存储桶设置以及 MinIO 分层配置,以避免潜在的混淆、错误配置或其他意外结果。

注意事项

生命周期管理对象扫描器

MinIO 使用 scanner process 根据所有已配置的生命周期管理规则检查对象。 高 IO 工作负载或有限的系统资源导致的扫描缓慢,可能会延迟生命周期管理规则的应用。 更多信息请参见 生命周期管理对象扫描器

对远程数据的独占访问

MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。

对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。

对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:

  • 不会在远程存储上由外部修改、迁移或删除对象。
  • 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。

MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。

对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。

远程数据的可用性

MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。

MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。

需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)

过程

1) 配置生命周期管理的用户账户和策略

此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 permissions 的用户,则可以跳过此步骤。

以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。

wget -O - https://silo.pgsty.com/extra/examples/LifecycleManagementAdmin.json | \
mc admin policy create Alpha LifecycleAdminPolicy /dev/stdin
mc admin user add Alpha alphaLifecycleAdmin LongRandomSecretKey
mc admin policy attach Alpha LifecycleAdminPolicy --user=alphaLifecycleAdmin

此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理MinIO Policy Based Access Control

2) 配置远程存储层

使用 mc ilm tier add 命令将新的 Google Cloud Storage 服务添加为远程存储层:

mc ilm tier add gcs TARGET TIER_NAME \
   --bucket BUCKET \
   --prefix PREFIX \
   --credentials-file CREDENTIALS \
   --storage-class STORAGE_CLASS

上述示例使用了以下参数:

参数

说明

TARGET

要在其上配置 GCS 远程层的 MinIO 部署的 alias

TIER_NAME

与新 GCS 远程存储层关联的名称。 请使用全大写指定该名称,例如 GCS_TIER。 下一步需要使用该值。

BUCKET

MinIO 迁移对象所使用的 GCS 存储后端上的存储桶名称。

PREFIX

MinIO 迁移对象时使用的可选存储桶前缀。

MinIO 会将所有已迁移对象存储到指定的 BUCKET 中,并使用每个部署唯一的前缀值。 省略此参数时,MinIO 仅使用该值在远程存储中隔离和组织数据。

对于包含其他数据(包括来自其他 MinIO 部署的已迁移对象)的远程存储层, MinIO 建议指定此可选前缀。该前缀应能清晰映射到源 MinIO 部署, 以便简化与诊断、维护或灾难恢复相关的运维工作。

CREDENTIALS

远程 GCS 层上用户的 credential file。 指定的用户凭证必须对应一个具备所需 权限 的 GCS 用户。

STORAGE_CLASS

MinIO 应用于迁移到 GCS 存储桶中的对象的 GCS 存储类别。

MinIO 的分层行为依赖于远程存储在收到请求后立即返回对象(毫秒到秒级)。 因此,MinIO 无法支持需要回温、等待周期或人工干预的远程存储。

以下 GCS 存储类别满足 MinIO 作为远程层的要求:

  • STANDARD

  • NEARLINE

  • COLDLINE

更多信息请参见 GCS storage class

3) 创建并应用迁移规则

使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:

mc ilm rule add ALIAS/BUCKET \
--transition-tier TIERNAME \
--transition-days DAYS \
--noncurrent-transition-days NONCURRENT_DAYS
--noncurrent-transition-tier TIERNAME

上述示例指定了以下参数:

参数

说明

ALIAS

指定要为其创建生命周期管理规则的 MinIO 部署 alias

BUCKET

指定要为其创建生命周期管理规则的存储桶完整路径。

TIERNAME

MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。

如果要将非当前对象版本转移到不同的远程层, 请为 --noncurrent-transition-tier 指定另一个层名称。

DAYS

MinIO 在经过多少个日历天后将对象标记为可转移。 该值必须为整数,例如 30 表示 30 天。

NONCURRENT_DAYS

MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。 MinIO 具体计算的是对象变为非当前版本后的时间, 而不是对象创建时间。该值必须为整数, 例如 90 表示 90 天。

省略此值可忽略非当前对象版本。

此选项对未启用版本控制的存储桶无效。

4) 验证迁移规则

使用 mc ilm rule ls 命令查看已配置的迁移规则:

mc ilm rule ls ALIAS/PATH --transition
  • ALIAS 替换为 MinIO 部署的 alias
  • PATH 替换为要获取其已配置生命周期管理规则的存储桶名称。

9.7 - 对象生命周期管理

使用 MinIO 对象生命周期管理,可以创建基于时间或日期的规则,自动迁移或过期对象。 对于对象迁移,MinIO 会自动将对象移动到已配置的远程存储层。 对于对象过期,MinIO 会自动删除该对象。

为了兼容将工作负载和生命周期规则从 S3 迁移到 MinIO 的场景,MinIO 的行为和语法遵循 S3 lifecycle。 例如,您可以导出 S3 生命周期管理规则并将其导入 MinIO,反之亦然。 MinIO 使用 JSON 描述生命周期管理规则,因此在导入 S3 生命周期规则时,可能需要在 XML 与 JSON 之间进行转换。

对象迁移(”Tiering”)

MinIO 支持创建对象迁移生命周期管理规则,使 MinIO 可以自动将对象移动到远程存储“层”。 MinIO 支持以下任意一种远程层目标:

MinIO 对象迁移适用于这类场景:将私有云或公有云基础设施中 MinIO 集群里的陈旧数据迁移到低成本的私有云或公有云存储方案中。 目录对象,即名称以 / 结尾的 0 字节对象,不会被分层迁移。 MinIO 会按需管理已分层对象的取回,无需应用端添加额外逻辑。

使用 mc ilm tier add 命令为分层数据创建远程目标。 然后,您可以使用 mc ilm rule add --transition-days 命令,在指定的日历天数后将对象迁移到该层。

说明

新增: RELEASE.2022-11-10T18-20-21Z

您可以对存储桶或存储桶前缀使用 mc ls,验证对象的分层状态。 输出中会包含每个对象的存储层:

$ mc ls play/mybucket
[2022-11-08 11:30:24 PST]    52MB  STANDARD log-data.csv
[2022-11-09 12:20:18 PST]    120MB WARM event-2022-11-09.mp4
  • STANDARD 表示对象存储在 MinIO 部署上。
  • WARM 表示对象存储在同名远程层上。
警告

重要

MinIO 对象迁移支持这类成本优化策略:将较旧或陈旧的数据移动到成本优化的远程存储层,例如云存储或高密度 HDD 存储。

MinIO 对象迁移 提供备份与恢复功能。 在 MinIO 发生数据丢失时,您不能将远程层用作恢复源。

如需支持备份/恢复或 BC/DR 需求,请使用 site replicationbucket replication

对远程数据的独占访问

MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。

对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。

对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:

  • 不会在远程存储上由外部修改、迁移或删除对象。
  • 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。

MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。

对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。

远程数据的可用性

MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。

MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。

需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)

启用版本控制的存储桶

对于已启用 版本控制 的存储桶迁移规则,MinIO 采用 S3 behavior。 具体来说,MinIO 默认将迁移操作应用于对象的 当前 版本。

如需迁移对象的非当前版本,请在创建迁移规则时指定 --noncurrent-transition-days--noncurrent-transition-tier 选项。

对象过期

MinIO 生命周期管理支持对存储桶中的对象执行过期操作。 对象“过期”是指对该对象执行 DELETE 操作。 例如,您可以创建生命周期管理规则,使所有超过 365 天的对象过期。

使用 mc ilm rule add --expire-days 可以让对象在指定的日历天数后过期。

对于已配置 replication 的存储桶,MinIO 不会复制由生命周期管理过期规则删除的对象。 更多信息请参见 删除操作的复制

启用版本控制的存储桶

对于已启用 版本控制 的存储桶过期规则,MinIO 采用 S3 behavior。 对于启用版本控制的存储桶,MinIO 具有以下默认行为:

  • MinIO 仅将过期选项应用于对象的 当前 版本,具体方式是像版本化删除的常规行为一样创建 DeleteMarker

    如需让对象的非当前版本过期,请在创建过期规则时指定 --noncurrent-expire-days 选项。

  • MinIO 不会让 DeleteMarkers 过期,即使该对象已不存在其他版本。

    如需在该对象已无剩余版本时让删除标记过期,请在创建过期规则时指定 --expire-delete-marker 选项。

  • 如需让一个没有删除标记的对象在指定天数后其所有版本都过期,请将 --expire-all-object-versions 标志与 --expire-days 标志一同使用。 这允许该对象在指定天数过去后被永久删除。

    说明

    变更: MinIO

    RELEASE.2024-05-01T01-11-10Z

    此标志仅适用于没有删除标记的对象。

生命周期管理对象扫描器

MinIO 使用内置的 scanner 主动检查对象是否符合所有已配置的生命周期管理规则。

扫描器是一个低优先级进程,在 I/O 负载较高时会让出资源,以避免因规则触发时机导致性能尖峰。 因此,扫描器可能要到生命周期规则周期已经过去 之后,才会检测到某个对象已满足配置的迁移或过期生命周期规则条件。

9.8 - 将对象从 MinIO 迁移到 Azure

本页中的过程将创建一条新的对象生命周期管理规则,用于将 MinIO 存储桶中的对象迁移到 Azure 存储后端上的远程存储层。该过程适用于如下场景: 在达到特定时间周期或日历日期后,将陈旧数据移动到低成本的公有云存储方案中。

要求

安装并配置 mc

该过程使用 mc 在 MinIO 集群上执行操作。 请将 mc 安装在一台同时具备源集群和目标集群网络访问能力的主机上。 有关下载和安装 mc 的说明,请参见 mc 安装快速开始

使用 mc alias set 命令为源 MinIO 集群创建别名。 创建别名时,需要为源集群和目标集群上的用户指定访问密钥。 所指定的用户必须具备配置和应用迁移操作所需的 权限

所需的 MinIO 权限

MinIO 要求在要创建生命周期管理规则的一个或多个存储桶范围内具备以下权限。

此外,在为对象迁移生命周期管理规则创建远程层的集群上,MinIO 还要求具备以下管理权限:

例如,以下策略授予在集群中任意存储桶上配置对象迁移生命周期管理规则的权限:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "admin:SetTier",
               "admin:ListTier"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteTierManagement"
      },
      {
            "Action": [
               "s3:PutLifecycleConfiguration",
               "s3:GetLifecycleConfiguration"
            ],
            "Resource": [
                        "arn:aws:s3:::*"
            ],
            "Effect": "Allow",
            "Sid": "EnableLifecycleManagementRules"
      }
   ]
}

所需的 Azure 权限

对象迁移生命周期管理规则要求在远程存储层上具备额外权限。 具体而言,MinIO 要求 Azure 凭证对远程存储账户和容器具备读取、 写入、列出和删除权限。

有关配置所需权限的更完整说明,请参阅 Azure RBAC 文档。

远程存储账户和容器必须预先存在

在将该资源配置为生命周期管理层或规则的目标之前,先创建远程 Azure 存储账户 和容器。 在 创建 Azure 存储账户 时,请确保该存储账户对应 Standard 或 Premium blob storage,并使用本地冗余存储(LRS)选项。 MinIO 使用的 Azure Go SDK API 不支持其他任何冗余选项。

如果您为存储账户设置了 默认访问层,那么在定义远程层时,如果未指定 storage class,MinIO 将使用该默认值。 请确保记录 Azure 存储账户和 MinIO 分层配置的相关设置,以避免潜在的混淆、误配置或其他意外结果。

有关 Azure 存储账户的更多信息,请参见 Storage accounts

注意事项

对远程数据的独占访问

MinIO 要求对远程存储层上的已转移数据拥有独占访问权限。 “hot” MinIO 源端上的对象元数据与远程 “warm/cold” 层上的对象数据紧密关联。 如果无法访问远程层,MinIO 就无法检索对象数据; 同样,远程层也不能用于恢复源端丢失的元数据。

对已转移对象的所有访问都必须仅通过 MinIO 发起的 S3 API 操作完成。 手动修改已转移对象时,无论修改的是 “hot” MinIO 层上的元数据, 还是远程 “warm/cold” 层上的对象数据,都可能导致该对象的数据丢失。

对于远程存储桶或存储桶前缀中不受该 MinIO 部署明确管理的任何对象, MinIO 都会将其忽略。 自动转移与透明对象检索依赖以下前提:

  • 不会在远程存储上由外部修改、迁移或删除对象。
  • 远程存储桶上不存在生命周期管理规则 (例如转移或过期)。

MinIO 会将所有已转移对象存储在远程存储桶或资源下、 每个部署唯一的前缀值之中。 该值并非用于在后端识别源部署。 在配置远程目标时,MinIO 还支持附加一个可选的人类可读前缀, 这可能有助于诊断、维护或灾难恢复相关操作。

对于包含其他数据的远程存储层, 包括来自其他 MinIO 部署的已转移对象, MinIO 建议指定此可选前缀。 本教程包含设置此前缀所需的语法。

警告

重要

MinIO 支持更改与 Azure 远程层关联的账户名称。 Azure 存储后端与该账户绑定,因此更改账户会改变存储后端,并导致无法访问已迁移到原始账户/后端的任何对象。

如果您需要与 Azure 远程层配置相关的场景化指导,请联系 MinIO Support

远程数据的可用性

MinIO 分层行为依赖远程存储在收到请求后立即返回对象 (毫秒到秒级)。 因此,MinIO 不支持需要 rehydration、等待窗口 或人工干预的远程存储。

MinIO 会为每个已转移对象创建元数据,用于标识其在远程存储中的位置。 应用程序无法脱离 MinIO 直接识别和访问已转移对象。 因此,已转移数据的可用性仍依赖于 纠删码 和分布式部署拓扑 为 MinIO 部署中所有对象提供的核心保护能力。 使用对象转移不会带来任何额外的业务连续性或灾难恢复收益。

需要 BC/DR 保护的工作负载应实现 MinIO Server-Side replication。 复制可确保对象保存在远程复制站点上, 从而使用户能够在发生部分或全部数据丢失时从远端重新同步。 有关如何使用复制在部分或全部数据丢失后恢复的更完整文档, 请参见 重新同步(灾难恢复)

过程

1) 为生命周期管理配置用户账户和策略

此步骤会在 MinIO 部署上创建用于支持生命周期管理操作的用户和策略。 如果该部署已经存在具备所需 permissions 的用户,则可以跳过此步骤。

以下示例使用 Alpha 作为 MinIO 部署 alias 的占位符。 请将其替换为配置生命周期管理规则时所使用的 MinIO 部署别名。 同时,请按照所在组织的密码生成最佳实践, 将密码 LongRandomSecretKey 替换为足够长、随机且安全的密钥。

wget -O - https://silo.pgsty.com/extra/examples/LifecycleManagementAdmin.json | \
mc admin policy create Alpha LifecycleAdminPolicy /dev/stdin
mc admin user add Alpha alphaLifecycleAdmin LongRandomSecretKey
mc admin policy attach Alpha LifecycleAdminPolicy --user=alphaLifecycleAdmin

此示例假定所指定的 alias 具有在该部署上创建策略和用户所需的权限。 有关 MinIO 用户和策略的更完整文档, 请分别参见 用户管理MinIO Policy Based Access Control

2) 配置远程存储层

使用 mc ilm tier add 命令添加新的远程存储层:

mc ilm tier add azure TARGET TIER_NAME \
   --account-name ACCOUNT \
   --account-key KEY \
   --bucket CONTAINER \
   --endpoint ENDPOINT \
   --prefix PREFIX \
   --storage-class STORAGE_CLASS

上述示例使用了以下参数:

参数

说明

TARGET

要在其上配置远程层的 MinIO 部署的 alias

TIER_NAME

为新的 Azure blob 远程存储层指定的名称。 请使用全大写名称,例如 AZURE_TIER。 下一步中将需要该值。

ACCOUNT

用作远程存储资源的 Storage Account

创建该层后,无法更改此账户名称。

KEY

指定 ACCOUNT 对应的共享账户密钥。

该账户密钥对应的 Azure 策略必须具备所需 权限

更多信息请参见 Managing storage account access keys

CONTAINER

MinIO 将对象迁移到其上的 Azure 存储后端中的容器名称。

ENDPOINT

(可选)MinIO 将对象迁移到其上的 Azure blob 存储后端的完整 URL。 如果未指定,默认为 https://ACCOUNT.blob.core.windows.net

PREFIX

MinIO 迁移对象时使用的可选容器前缀。

MinIO 会将所有已迁移对象存储在指定 BUCKET 下,并使用部署唯一的前缀值。 省略此参数时,仅使用该值在远程存储中隔离和组织数据。

对于包含其他数据的远程存储层,包括来自其他 MinIO 部署的已迁移对象,MinIO 建议指定该可选前缀。 此前缀应能清晰指向源 MinIO 部署,以便开展与诊断、维护或灾难恢复相关的操作。

STORAGE_CLASS

MinIO 应用于迁移到 Azure 容器中对象的 Azure 访问层。

MinIO 的分层行为依赖远程存储在收到请求后立即返回对象(毫秒到秒级)。 因此,MinIO 不能 支持需要 rehydration、等待周期或人工干预的远程存储。

以下 Azure 访问层满足 MinIO 对远程层的要求:

  • Hot

  • Cool

更多信息请参见 Hot, cool, and archive access tiers for blob data

3) 创建并应用迁移规则

使用 mc ilm rule add 命令为存储桶创建新的转移规则。 以下示例将对象配置为在指定的日历天数后执行转移:

mc ilm rule add ALIAS/BUCKET \
--transition-tier TIERNAME \
--transition-days DAYS \
--noncurrent-transition-days NONCURRENT_DAYS
--noncurrent-transition-tier TIERNAME

上述示例指定了以下参数:

参数

说明

ALIAS

指定要为其创建生命周期管理规则的 MinIO 部署 alias

BUCKET

指定要为其创建生命周期管理规则的存储桶完整路径。

TIERNAME

MinIO 将对象转移到的远程存储层。 指定在上一步中创建的远程存储层名称。

如果要将非当前对象版本转移到不同的远程层, 请为 --noncurrent-transition-tier 指定另一个层名称。

DAYS

MinIO 在经过多少个日历天后将对象标记为可转移。 该值必须为整数,例如 30 表示 30 天。

NONCURRENT_DAYS

MinIO 在经过多少个日历天后将非当前对象版本标记为可转移。 MinIO 具体计算的是对象变为非当前版本后的时间, 而不是对象创建时间。该值必须为整数, 例如 90 表示 90 天。

省略此值可忽略非当前对象版本。

此选项对未启用版本控制的存储桶无效。

4) 验证迁移规则

使用 mc ilm rule ls 命令查看已配置的迁移规则:

mc ilm rule ls ALIAS/PATH --transition
  • ALIAS 替换为 MinIO 部署的 alias
  • PATH 替换为要检索其已配置生命周期管理规则的存储桶名称。

9.9 - 对象自动过期

本页中的每个过程都会创建一条新的对象生命周期管理规则,用于让 MinIO 存储桶中的对象过期。该过程适用于在特定时间段或日历日期之后删除“旧”对象 等场景。

要求

安装并配置 mc

该过程使用 mc 对 MinIO 集群执行操作。请在一台可同时通过网络访问源集群 和目标集群的机器上安装 mc。有关下载和安装 mc 的说明,请参阅 mc 快速安装

使用 mc alias set 命令为源 MinIO 集群和目标 S3 兼容服务创建别名。 创建别名时,需要为源集群和目标集群上的用户指定访问密钥。指定的用户必须具备 配置和应用过期操作所需的 权限

所需权限

MinIO 要求对创建生命周期管理规则的存储桶或多个存储桶授予以下权限。

如果要在某个集群上为对象转换生命周期管理规则创建远程层,MinIO 还要求在该 集群上具备以下管理权限:

例如,以下策略授予了在该集群任意存储桶上配置对象转换生命周期管理规则的 权限:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "admin:SetTier",
               "admin:ListTier"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteTierManagement"
      },
      {
            "Action": [
               "s3:PutLifecycleConfiguration",
               "s3:GetLifecycleConfiguration"
            ],
            "Resource": [
                        "arn:aws:s3:::*"
            ],
            "Effect": "Allow",
            "Sid": "EnableLifecycleManagementRules"
      }
   ]
}

按天数使对象过期

使用带有 --expire-daysmc ilm rule add, 可在对象创建若干天后使存储桶内容过期:

mc ilm rule add ALIAS/PATH --expire-days "DAYS"
  • ALIAS 替换为 S3 兼容主机的 alias
  • PATH 替换为 S3 兼容主机上该存储桶的 路径。
  • DAYS 替换为对象过期前的天数。 例如,指定 30 表示对象会在创建 30 天后过期。

使已版本控制的对象过期

使用 mc ilm rule add 使非当前对象版本和对象删除标记过期:

mc ilm rule add ALIAS/PATH \
   --noncurrent-expire-days NONCURRENT_DAYS \
   --expire-delete-marker
  • 若要让对象的所有版本过期,请包含 --expire-all-object-versions。此过期规则仅适用于 最新版本或当前版本不是 DeleteMarker 的对象。

    mc ilm rule add ALIAS/PATH \
       --expire-all-object-versions
  • ALIAS 替换为 S3 兼容主机的 alias

  • PATH 替换为 S3 兼容主机上该存储桶的 路径。

  • NONCURRENT_DAYS 替换为非当前对象版本过期前的 天数。例如,指定 30d 表示某个版本在成为非当前版本至少 30 天后过期。

9.10 - 数据压缩

概述

MinIO Server 支持对对象进行压缩,以减少磁盘使用量。 对象在 PUT 时会先压缩再写入磁盘,在 GET 时会先解压再发送给客户端。这样一来,压缩过程对客户端应用程序和服务是透明的。

根据数据类型的不同,压缩还可能提高整体吞吐量。 在生产部署中,写入吞吐量通常为系统中每个可用 CPU 核心每秒 500MB 或更高。 解压吞吐量大约为每个 CPU 核心每秒 1 GB 或更高。

为获得最佳效果,请参阅 MinIO 的 推荐硬件配置,或使用 MinIO SUBNET 与工程师直接协作分析压缩性能。

默认文件类型

数据压缩是全局选项,所配置的设置会应用于部署中的所有存储桶。 启用数据压缩后,默认会压缩以下类型的数据:

文件扩展名

媒体(MIME)类型

.txt

.log

.csv

.json

.tar

.xml

.bin

text/*

application/json

application/xml

binary/octet-stream

你可以通过指定所需的文件扩展名和 media (MIME) types 来控制哪些对象会被压缩。

说明

现有对象不会被修改

启用、禁用或更新某个部署的压缩设置时,不会修改现有对象。 新对象会根据其创建时生效的设置进行压缩。

排除的文件类型

某些数据无法被有效压缩。 例如:视频、已经压缩过的数据,或小于 4KiB 的文件。 MinIO 不会压缩常见的不可压缩文件类型,即使它们已在压缩配置中指定。

这些类型的对象永远不会被压缩:

对象类型

文件扩展名

媒体(MIME)类型

音频

audio/*

视频

*.mp4
*.mkv
*.mov

video/*

图像

*.jpg
*.png
*.gif

application/x-compress (LZW)

7ZIP 压缩文件

*.7z

BZIP2 压缩文件

*.bz2

application/x-bz2

GZIP 压缩文件

*.gz

application/x-gzip

RAR 压缩文件

*.rar

LZMA 压缩文件

*.xz

application/x-xz

ZIP 压缩文件

*.zip

application/zip
application-x-zip-compressed

小于 4 KiB

数据压缩与加密

MinIO 支持对压缩后的对象进行加密,但不建议在未事先进行风险评估的情况下同时启用压缩和加密。 在为压缩对象启用加密之前,请仔细评估你的环境中的安全需求。

有关如何同时使用压缩和加密的更多信息,请参阅 Transparent Data Compression on MinIOMinIO SUBNET 用户可以 log in 并与我们的工程和安全团队沟通,以评估加密选项。

教程

启用数据压缩

要启用数据压缩,请使用 mc admin config setcompression 键的 enable 选项设置为 on

以下命令会为 默认类型 的新对象启用压缩:

mc admin config set ALIAS compression enable=on
  • ALIAS 替换为已配置 MinIO 部署的 alias

现有的未压缩对象不会被修改。 要配置需要压缩的扩展名和类型,请参阅 配置要压缩哪些对象

要查看当前的压缩设置:

mc admin config get ALIAS compression

禁用数据压缩

要禁用数据压缩,请使用 mc admin config setcompression 键的 enable 选项设置为 off

以下命令会禁用新对象的数据压缩:

mc admin config set ALIAS compression enable=off
  • ALIAS 替换为已配置 MinIO 部署的 alias

现有的已压缩对象不会被修改。

配置要压缩哪些对象

通过在 extensionsmime_types 参数中指定所需的文件扩展名和媒体类型,来配置需要压缩的对象。

默认的数据压缩配置会压缩以下类型的数据:

文件扩展名

媒体(MIME)类型

.txt

.log

.csv

.json

.tar

.xml

.bin

text/*

application/json

application/xml

binary/octet-stream

说明

默认排除的扩展名和类型永远不会被压缩

某些对象无法被高效压缩。 即使这些对象已在 extensionsmime_types 参数中指定,MinIO 也不会尝试压缩它们。 排除类型列表请参阅 排除的文件类型

以下各节介绍如何为所需的文件扩展名和媒体类型配置压缩。

压缩所有可压缩对象

要压缩除 默认排除类型 之外的所有对象,请使用 mc admin config setcompression 键的 extensionsmime_types 选项设置为空列表:

mc admin config set ALIAS compression extensions= mime_types=
  • ALIAS 替换为已配置 MinIO 部署的 alias

按文件扩展名压缩对象

要压缩具有特定文件扩展名的对象,请使用 mc admin config setextensions 参数中设置所需的文件扩展名。

以下命令会压缩扩展名为 .bin.txt 的文件:

mc admin config set ALIAS compression extensions=".bin, .txt"
  • ALIAS 替换为已配置 MinIO 部署的 alias

新的文件扩展名列表会替换之前的列表。 如果要添加或删除扩展名,请使用完整的待压缩扩展名列表重新执行 extensions 命令。

以下命令会将 .pdf 添加到上一个示例中的文件扩展名列表:

mc admin config set ALIAS compression extensions=".bin, .txt, .pdf"
  • ALIAS 替换为已配置 MinIO 部署的 alias

按媒体类型压缩对象

要压缩特定媒体类型的对象,请使用 mc admin config setcompression 键的 mime_types 选项设置为所需类型的列表。

以下示例会压缩类型为 application/jsonimage/bmp 的文件:

mc admin config set ALIAS compression mime_types="application/json, image/bmp"
  • ALIAS 替换为已配置 MinIO 部署的 alias

新的媒体类型列表会替换之前的列表。 如果要添加或删除类型,请使用完整的待压缩类型列表重新执行 mime_types 命令。

你可以使用 * 指定某一媒体类型下的所有子类型。 以下命令会将所有 text 子类型添加到上一个示例中的列表:

mc admin config set ALIAS compression mime_types="application/json, image/bmp, text/*"
  • ALIAS 替换为已配置 MinIO 部署的 alias

10 - 监控存储桶与对象事件

存储桶通知

MinIO 存储桶通知允许管理员在特定对象或存储桶事件发生时,将通知发送到受支持的外部服务。 MinIO 支持与 Amazon S3 Event Notifications 类似的存储桶级和对象级 S3 事件。

在某些受支持的事件上,MinIO 支持将存储桶或对象事件发布到以下受支持的目标。

有关 MinIO 存储桶通知的更完整文档,请参见 存储桶通知

部署指标

MinIO 提供兼容 Prometheus 的端点,以支持对指标进行时间序列查询。

服务日志

MinIO 提供以下接口用于远程读取服务日志:

10.1 - 存储桶通知

MinIO 存储桶通知允许管理员在特定对象或存储桶事件发生时,将通知发送到受支持的外部服务。 MinIO 支持与 Amazon S3 Event Notifications 类似的存储桶级和对象级 S3 事件。

支持的通知目标

MinIO 支持将事件通知发布到以下目标:

目标

说明

AMQP (RabbitMQ)

将通知发布到 AMQP 服务,例如 RabbitMQ.

教程参见 将事件发布到 AMQP (RabbitMQ)

MQTT

将通知发布到 MQTT 服务。

教程参见 将事件发布到 MQTT

NATS

将通知发布到 NATS 服务。

教程参见 将事件发布到 NATS

NSQ

将通知发布到 NSQ 服务。

教程参见 将事件发布到 NSQ

Elasticsearch

将通知发布到 Elasticsearch 服务。

教程参见 将事件发布到 Elasticsearch

Kafka

将通知发布到 Kafka 服务。

教程参见 将事件发布到 Kafka

MySQL

将通知发布到 MySQL 服务。

教程参见 将事件发布到 MySQL

PostgreSQL

将通知发布到 PostgreSQL 服务。

教程参见 将事件发布到 PostgreSQL

Redis

将通知发布到 Redis 服务。

教程参见 将事件发布到 Redis

webhook

将通知发布到 Webhook 服务。

教程参见 将事件发布到 Webhook

异步与同步存储桶通知

说明

新增: RELEASE.2023-06-23T20-26-00Z

对于 所有 远程目标,MinIO 支持异步(默认)或同步存储桶通知。

使用异步传递时,MinIO 会将事件发送到已配置的远程目标,并且在继续处理下一个事件之前 不会 等待响应。 异步存储桶通知优先保证发送速率,但如果远程目标在传输或处理期间出现瞬时问题,则存在部分事件丢失的风险。

使用同步传递时,MinIO 会将事件发送到已配置的远程目标,然后等待远程目标确认已成功接收后,才继续处理下一个事件。 同步存储桶通知优先保证事件可送达,但代价是事件发送速率较慢且队列更容易被填满。

要为 所有已配置的远程目标 启用同步存储桶通知,请使用以下任一设置:

说明

说明

对于同步和异步事件,MinIO 都会为每个远程目标维护一个队列,用于存储尚未发送和待处理的事件。 队列上限默认为 100000

队列已满时,MinIO 会丢弃新事件。

可按需增大队列大小,以更好地适配 MinIO 部署与远程目标的事件发送和处理速率。 使用对应通知方法的 QUEUE_LIMIT 环境变量或配置项来修改该限制。

对于异步事件,MinIO 最多允许 50000 个并发 send 调用。

支持的 S3 事件类型

MinIO 存储桶通知与 Amazon S3 Event Notifications 兼容。 本节列出所有受支持的事件。

对象事件

MinIO 支持在以下 S3 对象事件上触发通知:

s3:ObjectAccessed:Get

data

s3:ObjectAccessed:GetLegalHold

data

s3:ObjectAccessed:GetRetention

data

s3:ObjectAccessed:Head

data

s3:ObjectCreated:CompleteMultipartUpload

data

s3:ObjectCreated:Copy

data

s3:ObjectCreated:DeleteTagging

data

s3:ObjectCreated:Post

data

s3:ObjectCreated:Put

data

s3:ObjectCreated:PutLegalHold

data

s3:ObjectCreated:PutRetention

data

s3:ObjectCreated:PutTagging

data

s3:ObjectRemoved:Delete

data

s3:ObjectRemoved:DeleteMarkerCreated

data

指定通配符 * 可选择与某个前缀相关的所有事件:

s3:ObjectAccessed:*

data

选择所有以 s3:ObjectAccessed 为前缀的事件。

s3:ObjectCreated:*

data

选择所有以 s3:ObjectCreated 为前缀的事件。

s3:ObjectRemoved:*

data

选择所有以 s3:ObjectRemoved 为前缀的事件。

复制事件

MinIO 支持在以下 S3 复制事件上触发通知:

s3:Replication:OperationCompletedReplication

data

s3:Replication:OperationFailedReplication

data

s3:Replication:OperationMissedThreshold

data

s3:Replication:OperationNotTracked

data

s3:Replication:OperationReplicatedAfterThreshold

data

指定通配符 * 可选择所有 s3:Replication 事件:

s3:Replication:*

data

ILM 转换事件

MinIO 支持在以下 S3 ILM 转换事件上触发通知:

s3:ObjectRestore:Post

data

s3:ObjectRestore:Completed

data

s3:ObjectTransition:Failed

data

s3:ObjectTransition:Complete

data

指定通配符 * 可选择与某个前缀相关的所有事件:

s3:ObjectTransition:*

data

选择所有以 s3:ObjectTransition 为前缀的事件。

s3:ObjectRestore:*

data

选择所有以 s3:ObjectRestore 为前缀的事件。

Scanner 事件

MinIO 支持在以下 S3 scanner 转换事件上触发通知:

s3:Scanner:ManyVersions

data

Scanner 发现具有超过 1,000 个版本的对象。

s3:Scanner:BigPrefix

data

Scanner 发现具有超过 50,000 个子文件夹的前缀。

全局事件

MinIO 支持在以下全局事件上触发通知。 只能通过 ListenNotification API 监听这些事件:

s3:BucketCreated

data

s3:BucketRemoved

data

负载模式

所有通知负载都使用相同的整体模式。 根据通知类型的不同,某些字段可能会省略或为 null。

{
    "eventVersion": "string",
    "eventSource": "string",
    "awsRegion": "string",
    "eventTime": "string",
    "eventName": "string",
    "userIdentity": {
        "principalId": "string"
    },
    "requestParameters": {
        "key": "value"
    },
    "responseElements": {
        "key": "value"
    },
    "s3": {
        "s3SchemaVersion": "string",
        "configurationId": "string",
        "bucket": {
            "name": "string",
            "ownerIdentity": {
                "principalId": "string"
            },
            "arn": "string"
        },
        "object": {
            "key": "string",
            "size": 10000,
            "eTag": "string",
            "contentType": "string",
            "userMetadata": {
                "key": "string"
            },
            "versionId": "string",
            "sequencer": "string"
        }
    },
    "source": {
        "host": "string",
        "port": "string",
        "userAgent": "string"
    }
}

示例

以下示例是 s3:ObjectCreated:Put 事件的通知:

{
  "EventName": "s3:ObjectCreated:Put",
  "Key": "test-bucket/image.jpg",
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "minio:s3",
      "awsRegion": "",
      "eventTime": "2025-02-06T01:04:31.998Z",
      "eventName": "s3:ObjectCreated:Put",
      "userIdentity": {
        "principalId": "access_key"
      },
      "requestParameters": {
        "principalId": "access_key",
        "region": "",
        "sourceIPAddress": "192.168.1.10"
      },
      "responseElements": {
        "x-amz-id-2": "dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8",
        "x-amz-request-id": "182178E8B36AC9DF",
        "x-minio-deployment-id": "2369dcb4-348b-4d30-8fc9-61ab089ba4bc",
        "x-minio-origin-endpoint": "https://minio.test.svc.cluster.local"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "Config",
        "bucket": {
          "name": "test-bucket",
          "ownerIdentity": {
            "principalId": "access_key"
          },
          "arn": "arn:aws:s3:::test-bucket"
        },
        "object": {
          "key": "image.jpg",
          "size": 84452,
          "eTag": "eb52f8e46f60a27a8a1a704e25757f30",
          "contentType": "image/jpeg",
          "userMetadata": {
            "content-type": "image/jpeg"
          },
          "sequencer": "182178E8B3728CAC"
        }
      },
      "source": {
        "host": "192.168.1.10",
        "port": "",
        "userAgent": "MinIO (linux; amd64) minio-go/v7.0.83"
      }
    }
  ]
}

10.2 - 将事件发布到 AMQP (RabbitMQ)

MinIO 支持将 bucket notification 事件发布到 AMQP 0-9-1 服务端点,例如 RabbitMQ

MinIO 依赖 https://github.com/streadway/amqp 项目实现 AMQP 连接。该项目主要针对 RabbitMQ 部署进行测试,但其他兼容 AMQP 0-9-1 的服务也可能可以使用。本页中的步骤假定服务端点为使用 AMQP 0-9-1 协议的 RabbitMQ 部署。

向 MinIO 部署添加 AMQP 端点

以下步骤用于向 MinIO 部署添加一个新的 AMQP 服务端点,以支持 bucket notifications

前提条件

AMQP 0-9-1 服务端点

MinIO 依赖 https://github.com/streadway/amqp 项目实现 AMQP 连接。该项目主要针对 RabbitMQ 部署进行测试,但其他兼容 AMQP 0-9-1-compatible 的服务也可能可以使用。 本步骤假定服务端点为使用 0-9-1 协议的 RabbitMQ 部署。

如果 AMQP 服务要求身份验证,则你必须在配置过程中提供相应的用户名和密码,以授权 MinIO 访问该服务。

MinIO mc 命令行工具

本步骤在部分操作中使用 mc 命令行工具。 安装说明请参见 mc Quickstart

1) 向 MinIO 添加 AMQP 端点

你可以使用环境变量或运行时配置设置来配置新的 AMQP 服务端点。

MinIO 支持使用 environment variables 指定 AMQP 服务端点及其关联配置设置。 minio server 进程会在下一次启动时应用这些设置。

以下示例代码设置了配置 AMQP 服务端点相关的全部环境变量。 必需的最小变量为 MINIO_NOTIFY_AMQP_ENABLEMINIO_NOTIFY_AMQP_URL

说明

Windows

   set MINIO_NOTIFY_AMQP_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_AMQP_URL_<IDENTIFIER>="<ENDPOINT>"
   set MINIO_NOTIFY_AMQP_EXCHANGE_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_EXCHANGE_TYPE_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_ROUTING_KEY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_MANDATORY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_DURABLE_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_NO_WAIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_INTERNAL_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_AUTO_DELETED_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_DELIVERY_MODE_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_AMQP_COMMENT_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_AMQP_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_AMQP_URL_<IDENTIFIER>="<ENDPOINT>"
   export MINIO_NOTIFY_AMQP_EXCHANGE_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_EXCHANGE_TYPE_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_ROUTING_KEY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_MANDATORY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_DURABLE_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_NO_WAIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_INTERNAL_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_AUTO_DELETED_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_DELIVERY_MODE_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_AMQP_COMMENT_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为该 AMQP 服务端点的唯一描述性字符串。与新 AMQP 服务端点相关的所有环境变量都应使用相同的 <IDENTIFIER> 值。以下示例假定标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署中现有的某个 AMQP 服务端点匹配,则新设置会覆盖该端点的任何现有设置。使用 mc admin config get notify_amqp 查看 MinIO 部署上当前已配置的 AMQP 端点。

  • <ENDPOINT> 替换为 AMQP 服务端点的 URL。 例如:

    amqp://user:password@hostname:port

参见 AMQP Service for 存储桶通知,获取每个环境变量的完整文档。

MinIO 支持在运行中的 minio server 进程上,使用 mc admin config set 命令和 notify_amqp 配置键来添加或更新 AMQP 端点。你必须重启 minio server 进程,才能应用任何新增或更新的配置设置。

以下示例代码设置了配置 AMQP 服务端点相关的全部设置。 必需的最小设置为 notify_amqp url

mc admin config set ALIAS/ notify_amqp:IDENTIFIER \
  url="ENDPOINT" \
  exchange="<string>" \
  exchange_type="<string>" \
  routing_key="<string>" \
  mandatory="<string>" \
  durable="<string>" \
  no_wait="<string>" \
  internal="<string>" \
  auto_deleted="<string>" \
  delivery_mode="<string>" \
  queue_dir="<string>" \
  queue_limit="<string>" \
  comment="<string>"
  • IDENTIFIER 替换为该 AMQP 服务端点的唯一描述性字符串。本步骤中的后续示例假定标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署中现有的某个 AMQP 服务端点匹配,则新设置会覆盖该端点的任何现有设置。使用 mc admin config get notify_amqp 查看 MinIO 部署上当前已配置的 AMQP 端点。

  • ENDPOINT 替换为 AMQP 服务端点的 URL。 例如:

    amqp://user:password@hostname:port

参见 AMQP Bucket Notification Configuration Settings,获取每个设置的完整文档。

1) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置更改。 使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 alias

minio server 进程会在启动时为每个已配置的 AMQP 目标打印一行类似如下的内容:

SQS ARNs: arn:minio:sqs::primary:amqp

在将关联的 AMQP 部署配置为目标时,你必须在 bucket notification 配置中指定该 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:amqp

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:amqp

3) 使用 AMQP 端点作为目标配置 存储桶通知

使用 mc event add 命令新增 bucket notification 事件,并将已配置的 AMQP 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:amqp \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 alias
  • BUCKET 替换为要配置事件的存储桶名称。
  • EVENTS 替换为以逗号分隔的 events 列表,MinIO 会在这些事件发生时触发通知。

使用 mc event ls 查看给定通知目标上已配置的所有 bucket 事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:amqp

4) 验证已配置的事件

对配置了新事件的存储桶执行一个操作,并检查 AMQP 服务中的通知数据。所需的具体操作取决于配置 bucket notification 时指定了哪些 events

例如,如果 bucket notification 配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在该存储桶中创建一个新对象,并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 AMQP 端点

以下步骤用于更新 MinIO 部署中现有的 AMQP 服务端点,以支持 bucket notifications

前提条件

AMQP 0-9-1 服务端点

MinIO 依赖 https://github.com/streadway/amqp 项目实现 AMQP 连接。该项目主要针对 RabbitMQ 部署进行测试,但其他兼容 AMQP 0-9-1-compatible 的服务也可能可以使用。 本步骤假定服务端点为 RabbitMQ 部署。

如果 AMQP 服务要求身份验证,则你必须在配置过程中提供相应的用户名和密码,以授权 MinIO 访问该服务。

MinIO mc 命令行工具

本步骤在部分操作中使用 mc 命令行工具。 安装说明请参见 mc Quickstart

1) 列出部署中已配置的 AMQP 端点

使用 mc admin config get 命令列出部署中当前已配置的 AMQP 服务端点:

mc admin config get ALIAS/ notify_amqp

ALIAS 替换为 MinIO 部署的 alias

命令输出类似如下:

notify_amqp:primary delivery_mode="0" exchange_type="" no_wait="off" queue_dir="" queue_limit="0"  url="amqp://user:password@hostname:port" auto_deleted="off" durable="off" exchange="" internal="off" mandatory="off" routing_key=""
notify_amqp:secondary delivery_mode="0" exchange_type="" no_wait="off" queue_dir="" queue_limit="0"  url="amqp://user:password@hostname:port" auto_deleted="off" durable="off" exchange="" internal="off" mandatory="off" routing_key=""

notify_amqp 键是 AMQP 通知设置 的顶层配置键。 url 键为给定的 notify_amqp 键指定 AMQP 服务端点。 notify_amqp:<IDENTIFIER> 后缀表示该 AMQP 服务端点的唯一标识符。

记下你要更新的 AMQP 服务端点标识符,以供下一步使用。

2) 更新 AMQP 端点

使用 mc admin config set 命令为该 AMQP 服务端点设置新配置:

mc admin config set ALIAS/ notify_amqp:<IDENTIFIER> \
   url="amqp://user:password@hostname:port" \
   exchange="<string>" \
   exchange_type="<string>" \
   routing_key="<string>" \
   mandatory="<string>" \
   durable="<string>" \
   no_wait="<string>" \
   internal="<string>" \
   auto_deleted="<string>" \
   delivery_mode="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

notify_amqp url 配置设置是 AMQP 服务端点所需的最小配置。其他所有配置设置都是可选的。参见 AMQP 通知设置,获取完整的 AMQP 配置设置列表。

3) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置更改。 使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 alias

minio server 进程会在启动时为每个已配置的 AMQP 目标打印一行类似如下的内容:

SQS ARNs: arn:minio:sqs::primary:amqp

4) 验证更改

对某个使用已更新 AMQP 服务端点配置事件的存储桶执行一个操作,并检查 AMQP 服务中的通知数据。所需的具体操作取决于配置 bucket notification 时指定了哪些 events

例如,如果 bucket notification 配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在该存储桶中创建一个新对象,并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.3 - 将事件发布到 MQTT

MinIO 支持将 存储桶通知 事件发布到 MQTT server/broker 端点。

向 MinIO 部署添加 MQTT 端点

以下过程会添加一个新的 MQTT 服务端点,以在 MinIO 部署中支持 存储桶通知

前提条件

MQTT 3.1 或 3.1.1 服务器/代理

此过程假定已存在一个 MQTT 3.1 或 3.1.1 server/broker,且 MinIO 部署能够连接到它。有关兼容 MQTT 的 server/broker 列表,请参见 mqtt.org software listing

如果 MQTT 服务需要身份验证,则在配置过程中 必须 提供适当的用户名和密码, 以授予 MinIO 访问该服务的权限。

MinIO mc 命令行工具

此过程中的某些操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 将 MQTT 端点添加到 MinIO

你可以通过环境变量 运行时配置设置来配置新的 MQTT 服务端点。

MinIO 支持使用 环境变量 指定 MQTT 服务端点及其相关 配置设置。minio server 进程会在下次启动时应用这些设置。

以下示例代码设置了与配置 MQTT 服务端点相关的 全部 环境变量。 最少 需要以下变量:

说明

Windows

   set MINIO_NOTIFY_MQTT_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_MQTT_BROKER_<IDENTIFIER>="ENDPOINT"
   set MINIO_NOTIFY_MQTT_TOPIC_<IDENTIFIER>="TOPIC"
   set MINIO_NOTIFY_MQTT_USERNAME_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_MQTT_PASSWORD_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_MQTT_QOS_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_MQTT_KEEP_ALIVE_INTERVAL_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_MQTT_RECONNECT_INTERVAL_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_MQTT_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_MQTT_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_MQTT_COMMENT_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_MQTT_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_MQTT_BROKER_<IDENTIFIER>="ENDPOINT"
   export MINIO_NOTIFY_MQTT_TOPIC_<IDENTIFIER>="TOPIC"
   export MINIO_NOTIFY_MQTT_USERNAME_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_MQTT_PASSWORD_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_MQTT_QOS_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_MQTT_KEEP_ALIVE_INTERVAL_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_MQTT_RECONNECT_INTERVAL_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_MQTT_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_MQTT_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_MQTT_COMMENT_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为 MQTT 服务端点的唯一描述性字符串。 对所有与新 MQTT 服务端点相关的环境变量都使用相同的 <IDENTIFIER> 值。以下示例假定标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署中现有的 MQTT 服务端点匹配, 新设置将 覆盖 该端点的任何现有设置。使用 mc admin config get notify_mqtt 查看 MinIO 部署上当前配置的 MQTT 端点。

  • <ENDPOINT> 替换为 MQTT 服务端点的 URL。例如:

    tcp://hostname:port

  • TOPIC 替换为 MQTT topic,MinIO 会将发布到 server/broker 的 事件关联到该 topic。

有关每个环境变量的完整文档,请参见 用于存储桶通知的 MQTT 服务

MinIO 支持在运行中的 minio server 进程上使用 mc admin config set 命令和 notify_mqtt 配置键添加或更新 MQTT 端点。你必须重启 minio server 进程,才能应用任何新增或更新的配置设置。

以下示例代码设置了与配置 MQTT 服务端点相关的 全部 设置。 对于 MQTT server/broker 端点,以下配置设置是 最少 必需项:

  • broker
  • topic
  • username 如果 MQTT server/broker 强制要求身份验证/授权,则必需
  • password 如果 MQTT server/broker 强制要求身份验证/授权,则必需
mc admin config set ALIAS/ notify_mqtt:IDENTIFIER \
   broker="ENDPOINT" \
   topic="TOPIC" \
   username="username" \
   password="password" \
   qos="<integer>" \
   keep_alive_interval="60s|m|h|d"
   reconnect_interval="60s|m|h|d"
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"
  • IDENTIFIER 替换为 MQTT 服务端点的唯一描述性字符串。 本过程后续示例假定标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署中现有的 MQTT 服务端点匹配, 新设置将 覆盖 该端点的任何现有设置。使用 mc admin config get notify_mqtt 查看 MinIO 部署上当前配置的 MQTT 端点。

  • ENDPOINT 替换为 MQTT 服务端点的 URL。例如:

    tcp://hostname:port

  • TOPIC 替换为 MQTT topic,MinIO 会将发布到 server/broker 的 事件关联到该 topic。

有关每个设置的完整文档,请参见 MQTT 存储桶通知配置设置

1) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 MQTT 目标打印一行类似如下的内容:

SQS ARNs: arn:minio:sqs::primary:mqtt

将关联的 MQTT 部署配置为目标时,你必须在配置存储桶通知时指定 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:mqtt

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:mqtt

1) 将 MQTT 端点配置为存储桶通知目标

使用 mc event add 命令添加新的存储桶通知事件,并将已配置的 MQTT 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:mqtt \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 别名
  • BUCKET 替换为要配置该事件的存储桶名称。
  • EVENTS 替换为以逗号分隔的 事件 列表,MinIO 会为这些事件触发通知。

使用 mc event ls 查看给定通知目标已配置的所有存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:MQTT

4) 验证已配置的事件

对已配置新事件的存储桶执行某个操作,并检查 MQTT 服务中的通知数据。 所需操作取决于配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 则可以使用 mc cp 命令在存储桶中创建新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 MQTT 端点

以下过程会更新现有 MQTT 服务端点,以在 MinIO 部署中支持 存储桶通知

前提条件

MQTT 3.1 或 3.1.1 服务器/代理端点

此过程假定已存在一个 MQTT 3.1 或 3.1.1 server/broker,且 MinIO 部署能够连接到它。有关兼容 MQTT 的 server/broker 列表,请参见 mqtt.org software listing

如果 MQTT 服务需要身份验证,则在配置过程中 必须 提供适当的用户名和密码, 以授予 MinIO 访问该服务的权限。

MinIO mc 命令行工具

此过程中的某些操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 列出部署中已配置的 MQTT 端点

使用 mc admin config get 命令列出该部署中当前已配置的 MQTT 服务端点:

mc admin config get ALIAS/ notify_mqtt

ALIAS 替换为 MinIO 部署的 别名

命令输出类似如下:

notify_mqtt:primary  broker="tcp://mqtt-primary.example.net:port" password="" queue_dir="" queue_limit="0" reconnect_interval="0s"  keep_alive_interval="0s" qos="0" topic="" username=""
notify_mqtt:secondary  broker="tcp://mqtt-primary.example.net:port" password="" queue_dir="" queue_limit="0" reconnect_interval="0s"  keep_alive_interval="0s" qos="0" topic="" username=""

notify_mqtt 键是 MQTT 通知设置 的顶层配置键。 broker 键为给定的 notify_mqtt 键指定 MQTT server/broker 端点。notify_mqtt:<IDENTIFIER> 后缀描述该 MQTT 服务端点的唯一标识符。

记下要更新的 MQTT 服务端点标识符,供下一步使用。

2) 更新 MQTT 端点

使用 mc admin config set 命令为 MQTT 服务端点设置新配置:

mc admin config set ALIAS/ notify_mqtt:<IDENTIFIER> \
   url="MQTT://user:password@hostname:port" \
   exchange="<string>" \
   exchange_type="<string>" \
   routing_key="<string>" \
   mandatory="<string>" \
   durable="<string>" \
   no_wait="<string>" \
   internal="<string>" \
   auto_deleted="<string>" \
   delivery_mode="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

以下配置设置是 MQTT server/broker 端点的 最少 必需项:

  • broker
  • topic
  • username 如果 MQTT server/broker 强制要求身份验证/授权,则必需
  • password 如果 MQTT server/broker 强制要求身份验证/授权,则必需

所有其他配置设置均为 可选。有关 MQTT 配置设置的完整列表,请参见 MQTT 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 MQTT 目标打印一行类似如下的内容:

SQS ARNs: arn:minio:sqs::primary:mqtt

3) 验证更改

对某个使用已更新 MQTT 服务端点进行事件配置的存储桶执行某个操作, 并检查 MQTT 服务中的通知数据。所需操作取决于配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 则可以使用 mc cp 命令在存储桶中创建新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.4 - 将事件发布到 NATS

MinIO 支持将 存储桶通知 事件发布到 NATS 服务端点。

说明

NATS Streaming 已弃用

NATS Streaming 已弃用。 请改为迁移到 JetStream

相关的 MinIO 配置选项和环境变量也已弃用。

向 MinIO 部署添加 NATS 端点

以下过程会在 MinIO 部署中添加一个新的 NATS 服务端点,以支持 存储桶通知

前提条件

MinIO mc 命令行工具

此过程中的某些操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 将 NATS 端点添加到 MinIO

你可以通过环境变量 运行时配置设置来配置新的 NATS 服务端点。

MinIO 支持使用 环境变量 指定 NATS 服务端点及其相关配置设置。 minio server 进程会在下次启动时应用这些指定设置。

以下示例代码设置了与配置 NATS 服务端点相关的 全部 环境变量。 最低 必需 的变量是 MINIO_NOTIFY_NATS_ADDRESSMINIO_NOTIFY_NATS_SUBJECT

说明

Windows

   set MINIO_NOTIFY_NATS_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_NATS_ADDRESS_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_SUBJECT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_USERNAME_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_PASSWORD_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_TOKEN_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_TLS_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_TLS_SKIP_VERIFY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_PING_INTERVAL_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_CERT_AUTHORITY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_CLIENT_CERT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_CLIENT_KEY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_COMMENT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NATS_JETSTREAM_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_NATS_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_NATS_ADDRESS_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_SUBJECT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_USERNAME_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_PASSWORD_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_TOKEN_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_TLS_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_TLS_SKIP_VERIFY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_PING_INTERVAL_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_CERT_AUTHORITY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_CLIENT_CERT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_CLIENT_KEY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_COMMENT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NATS_JETSTREAM_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为该 NATS 服务端点的唯一描述性字符串。 对新目标服务端点相关的所有环境变量使用相同的 <IDENTIFIER> 值。 以下示例假设标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署中现有的 NATS 服务端点匹配,新设置将 覆盖 该端点的任何现有设置。 使用 mc admin config get notify_nats 查看 MinIO 部署中当前配置的 NATS 端点。

  • <ENDPOINT> 替换为 NATS 服务端点的主机名和端口。 例如:nats-endpoint.example.com:4222

有关每个环境变量的完整文档,请参见 用于存储桶通知的 NATS 服务

MinIO 支持在正在运行的 minio server 进程上使用 mc admin config set 命令和 notify_nats 配置键来添加或更新 NATS 端点。你必须重启 minio server 进程,才能应用任何新增或更新的配置 设置。

以下示例代码设置了与配置 NATS 服务端点相关的 全部 设置。 最低 必需 的设置是 notify_nats addressnotify_nats subject

mc admin config set ALIAS/ notify_nats:IDENTIFIER \
   address="HOSTNAME" \
   subject="<string>" \
   username="<string>" \
   password="<string>" \
   token="<string>" \
   nats_jetstream="<string>" \
   tls="<string>" \
   tls_skip_verify="<string>" \
   ping_interval="<string>" \
   cert_authority="<string>" \
   client_cert="<string>" \
   client_key="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"
  • IDENTIFIER 替换为该 NATS 服务端点的唯一描述性字符串。 本过程中的以下示例假设标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署中现有的 NATS 服务端点匹配,新设置将 覆盖 该端点的任何现有设置。 使用 mc admin config get notify_nats 查看 MinIO 部署中当前配置的 NATS 端点。

  • ENDPOINT 替换为 NATS 服务端点的主机名和端口。 例如:nats-endpoint.example.com:4222

有关每个设置的完整文档,请参见 NATS 存储桶通知配置设置

1) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置更改。 使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程会在启动时为每个已配置的 NATS 目标输出一行内容,类似如下:

SQS ARNs: arn:minio:sqs::primary:nats

将相关 NATS 部署配置为目标时,你必须在配置存储桶通知时指定 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:nats

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:nats

3) 将 NATS 端点作为目标来配置存储桶通知

使用 mc event add 命令添加新的存储桶通知事件,并将已配置的 NATS 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:nats \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 别名
  • BUCKET 替换为要配置事件的存储桶名称。
  • EVENTS 替换为以逗号分隔的 事件 列表, MinIO 会针对这些事件触发通知。

使用 mc event ls 查看给定通知目标的所有已配置存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:nats

4) 验证已配置的事件

对已配置新事件的存储桶执行某个操作,并检查 NATS 服务中的通知数据。 所需操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 你可以使用 mc cp 命令在存储桶中创建新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 NATS 端点

以下过程会更新 MinIO 部署中现有的 NATS 服务端点,以支持 存储桶通知

前提条件

MinIO mc 命令行工具

此过程中的某些操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 列出部署中已配置的 NATS 端点

使用 mc admin config get 命令列出部署中当前配置的 NATS 服务端点:

mc admin config get ALIAS/ notify_nats

ALIAS 替换为 MinIO 部署的 别名

命令输出类似如下:

notify_nats:primary password="yoursecret" subject="" address="nats-endpoint.example.com:4222"  token="" username="yourusername" ping_interval="0" queue_limit="0" tls="off" tls_skip_verify="off" queue_dir="" streaming_enable="on" nats_jetstream="on"
notify_nats:secondary password="yoursecret" subject="" address="nats-endpoint.example.com:4222"  token="" username="yourusername" ping_interval="0" queue_limit="0" tls="off" tls_skip_verify="off" queue_dir="" streaming_enable="on" nats_jetstream="on"

notify_nats 键是 NATS 通知设置 的顶层配置键。 address 键为给定的 notify_nats 键指定 NATS 服务端点。 notify_nats:<IDENTIFIER> 后缀表示该 NATS 服务端点的唯一标识符。

记下你要更新的 NATS 服务端点标识符,以便在下一步中使用。

2) 更新 NATS 端点

使用 mc admin config set 命令为 NATS 服务端点设置新配置:

mc admin config set ALIAS/ notify_nats:IDENTIFIER \
   address="HOSTNAME" \
   subject="<string>" \
   username="<string>" \
   password="<string>" \
   token="<string>" \
   tls="<string>" \
   tls_skip_verify="<string>" \
   ping_interval="<string>" \
   nats_jetstream="<string>" \
   cert_authority="<string>" \
   client_cert="<string>" \
   client_key="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

notify_nats address 配置设置是 NATS 服务端点的 最低 必需项。 所有其他配置设置均为 可选。 有关 NATS 配置设置的完整列表,请参见 NATS 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置更改。 使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程会在启动时为每个已配置的 NATS 目标输出一行内容,类似如下:

SQS ARNs: arn:minio:sqs::primary:nats

4) 验证更改

对使用更新后 NATS 服务端点进行事件配置的存储桶执行某个操作, 并检查 NATS 服务中的通知数据。 所需操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 你可以使用 mc cp 命令在存储桶中创建新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.5 - 将事件发布到 NSQ

MinIO 支持将 存储桶通知 事件发布到 NSQ 服务端点。

为 MinIO 部署添加 NSQ 端点

以下过程会在 MinIO 部署中新增一个 NSQ 服务端点,用于支持 存储桶通知

前提条件

MinIO mc 命令行工具

此过程中的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 将 NSQ 端点添加到 MinIO

你可以使用环境变量, 通过设置运行时配置项来配置新的 NSQ 服务端点。

MinIO 支持使用 环境变量 指定 NSQ 服务端点及其相关 配置设置。minio server 进程会在下一次启动时应用这些指定的设置。

以下示例代码设置了与配置 NSQ 服务端点相关的 全部 环境变量。 必需 的最小变量集为 MINIO_NOTIFY_NSQ_NSQD_ADDRESSMINIO_NOTIFY_NSQ_TOPIC

说明

Windows

   set MINIO_NOTIFY_NSQ_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_NSQ_NSQD_ADDRESS_<IDENTIFIER>="<ENDPOINT>"
   set MINIO_NOTIFY_NSQ_TOPIC_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NSQ_TLS_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NSQ_TLS_SKIP_VERIFY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NSQ_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NSQ_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_NSQ_COMMENT_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_NSQ_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_NSQ_NSQD_ADDRESS_<IDENTIFIER>="<ENDPOINT>"
   export MINIO_NOTIFY_NSQ_TOPIC_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NSQ_TLS_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NSQ_TLS_SKIP_VERIFY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NSQ_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NSQ_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_NSQ_COMMENT_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为目标服务端点的唯一描述性字符串。 对与新目标服务端点相关的所有环境变量使用相同的 <IDENTIFIER> 值。 以下示例假设该标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署上现有的 NSQ 服务 端点匹配,则新设置会 覆盖 该端点的任何现有设置。使用 mc admin config get notify_nsq 查看 MinIO 部署上当前已配置的 NSQ 端点。

  • <ENDPOINT> 替换为 NSQ 服务端点的 URL。 例如,https://nsq-service.example.com:4150

有关每个环境变量的完整文档,请参见 用于存储桶通知的 NSQ 服务

MinIO 支持在运行中的 minio server 进程上使用 mc admin config set 命令和 notify_nsq 配置键来添加或更新 NSQ 端点。你必须重启 minio server 进程,才能应用任何新增或更新的配置设置。

以下示例代码设置了与配置 NSQ 服务端点相关的 全部 设置。 必需 的最小设置为 notify_nsq nsqd_addressnotify_nsq topic

mc admin config set ALIAS/ notify_nsq:IDENTIFIER \
  nsqd_address="ENDPOINT" \
  topic="<string>" \
  tls="<string>" \
  tls_skip_verify="<string>" \
  queue_dir="<string>" \
  queue_limit="<string>" \
  comment="<string>"
  • IDENTIFIER 替换为 NSQ 服务端点的唯一描述性字符串。 本过程中的以下示例假设该标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署上现有的 NSQ 服务 端点匹配,则新设置会 覆盖 该端点的任何现有设置。使用 mc admin config get notify_nsq 查看 MinIO 部署上当前已配置的 NSQ 端点。

  • ENDPOINT 替换为 NSQ 服务端点的 URL。 例如:

    NSQ://user:password@hostname:port

有关每个设置的完整文档,请参见 NSQ Bucket Notification Configuration Settings

1) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启部署的 别名

minio server 进程在启动时会为每个已配置的 NSQ 目标打印一行内容,类似如下:

SQS ARNs: |ARN|

在将关联的 NSQ 部署配置为目标时,你必须在配置存储桶通知时指定 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:nsq

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:nsq

3) 将 NSQ 端点配置为存储桶通知目标

使用 mc event add 命令新增一个存储桶通知事件,并将已配置的 NSQ 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:nsq \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 别名
  • BUCKET 替换为要配置该事件的存储桶名称。
  • EVENTS 替换为逗号分隔的 事件 列表,MinIO 会针对这些事件触发通知。

使用 mc event ls 查看给定通知目标已配置的所有存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:nsq

4) 验证已配置的事件

对你配置了新事件的存储桶执行某个操作,并检查 NSQ 服务中的通知数据。 所需操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 则可以使用 mc cp 命令在存储桶中创建一个新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 NSQ 端点

以下过程会更新 MinIO 部署中现有的 NSQ 服务端点,以支持 存储桶通知

前提条件

MinIO mc 命令行工具

此过程中的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 列出部署中已配置的 NSQ 端点

使用 mc admin config get 命令列出部署中当前已配置的 NSQ 服务端点:

mc admin config get ALIAS/ notify_nsq

ALIAS 替换为 MinIO 部署的 别名

命令输出类似如下:

notify_nsq:primary nsqd_address="https://nsq.example.com" queue_dir="" queue_limit="0"  tls="off" tls_skip_verify="off" topic=""
notify_nsq:secondary nsqd_address="https://nsq.example.com" queue_dir="" queue_limit="0"  tls="off" tls_skip_verify="off" topic=""

notify_nsq 键是 NSQ 通知设置 的顶层配置键。 nsqd_address 键为给定的 notify_nsq 键指定 NSQ 服务端点。 notify_nsq:<IDENTIFIER> 后缀描述该 NSQ 服务端点的唯一标识符。

记下你要更新的 NSQ 服务端点标识符,以便在下一步使用。

2) 更新 NSQ 端点

使用 mc admin config set 命令为 NSQ 服务端点设置新配置:

mc admin config set ALIAS/ notify_nsq:<IDENTIFIER> \
   nsqd_address="NSQ://user:password@hostname:port" \
   topic="<string>" \
   tls="<string>" \
   tls_skip_verify="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

notify_nsq nsqd_address 配置设置是 NSQ 服务端点的 最低 必需项。 所有其他配置设置均为 可选。 有关 NSQ 配置设置的完整列表,请参见 NSQ 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启部署的 alias

minio server 进程在启动时会为每个已配置的 NSQ 目标打印一行内容,类似如下:

SQS ARNs: arn:minio:sqs::primary:NSQ

4) 验证更改

对使用更新后 NSQ 服务端点进行事件配置的存储桶执行某个操作, 并检查 NSQ 服务中的通知数据。 所需操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 则可以使用 mc cp 命令在存储桶中创建一个新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.6 - 将事件发布到 Elasticsearch

MinIO 支持将 bucket notification 事件发布到 Elasticsearch 服务端点。

MinIO 依赖 https://github.com/elastic/go-elasticsearch v7 项目连接 Elastic。

为 MinIO 部署添加 Elasticsearch 端点

以下步骤为 MinIO 部署添加一个新的 Elasticsearch 服务端点,以支持 bucket notifications

前提条件

Elasticsearch v7.0 及更高版本

MinIO 依赖 https://github.com/olivere/elastic v7 项目连接 Elastic。elastic/v7 库专门面向 Elasticsearch v7.0,与更早版本的 Elasticsearch 不兼容。

MinIO mc 命令行工具

本步骤中的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc Quickstart

1) 将 Elasticsearch 端点添加到 MinIO

你可以使用环境变量, 通过设置运行时配置项来配置新的 Elasticsearch 服务端点。

MinIO 支持使用 environment variables 指定 Elasticsearch 服务端点及其相关配置。minio server 进程会在下次 启动时应用这些设置。

以下示例代码设置了配置 Elasticsearch 服务端点所需的 全部 环境变量。 最少 必须 设置的变量包括:

说明

Windows

   set MINIO_NOTIFY_ELASTICSEARCH_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_ELASTICSEARCH_URL_<IDENTIFIER>="<ENDPOINT>"
   set MINIO_NOTIFY_ELASTICSEARCH_INDEX_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_ELASTICSEARCH_FORMAT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_ELASTICSEARCH_USERNAME_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_ELASTICSEARCH_PASSWORD_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_ELASTICSEARCH_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_ELASTICSEARCH_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_ELASTICSEARCH_COMMENT_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_ELASTICSEARCH_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_ELASTICSEARCH_URL_<IDENTIFIER>="<ENDPOINT>"
   export MINIO_NOTIFY_ELASTICSEARCH_INDEX_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_ELASTICSEARCH_FORMAT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_ELASTICSEARCH_USERNAME_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_ELASTICSEARCH_PASSWORD_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_ELASTICSEARCH_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_ELASTICSEARCH_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_ELASTICSEARCH_COMMENT_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为目标服务端点的唯一描述性字符串。 与新目标服务端点相关的所有环境变量都应使用相同的 <IDENTIFIER> 值。 以下示例假定该标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署中现有的 Elasticsearch 服务端点匹配,则新设置会 覆盖 该端点的现有设置。使用 mc admin config get notify_elasticsearch 查看 MinIO 部署中当前已配置的 Elasticsearch 端点。

  • <ENDPOINT> 替换为 Elasticsearch 服务端点的 URL。 例如:

有关各环境变量的完整说明,请参见 Elasticsearch Service for 存储桶通知

MinIO 支持在运行中的 minio server 进程上,使用 mc admin config set 命令和 notify_elasticsearch 配置键来添加或更新 Elasticsearch 端点。你必须重启 minio server 进程,才能应用新增或更新后的配置项。

以下示例代码设置了配置 Elasticsearch 服务端点相关的 全部 配置项。 最少 必须 设置的配置项包括:

mc admin config set ALIAS/ notify_elasticsearch:IDENTIFIER \
   url="ENDPOINT" \
   index="<string>" \
   format="<string>" \
   username="<string>" \
   password="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"
  • IDENTIFIER 替换为 Elasticsearch 服务端点的唯一描述性字符串。 本步骤中的后续示例假定该标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署中现有的 Elasticsearch 服务 端点匹配,则新设置会 覆盖 该端点的现有设置。使用 mc admin config get notify_elasticsearch 查看 MinIO 部署中当前已配置的 Elasticsearch 端点。

  • ENDPOINT 替换为 Elasticsearch 服务端点的 URL。 例如:

    https://user:password@hostname:port

有关各配置项的完整说明,请参见 Elasticsearch Bucket Notification Configuration Settings

1) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置变更。 使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为需要重启的部署 alias

minio server 进程会在启动时为每个已配置的 Elasticsearch 目标输出一行, 类似如下:

SQS ARNs: arn:minio:sqs::primary:elasticsearch

在将关联的 Elasticsearch 部署配置为存储桶通知目标时,你必须指定该 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:elasticsearch

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:elasticsearch

3) 将 Elasticsearch 端点配置为存储桶通知目标

使用 mc event add 命令新增存储桶通知事件,并将已配置的 Elasticsearch 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:elasticsearch \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 alias
  • BUCKET 替换为要配置该事件的存储桶名称。
  • EVENTS 替换为一个以逗号分隔的 events 列表,MinIO 会针对这些事件触发通知。

使用 mc event ls 查看给定通知目标已配置的所有存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:elasticsearch

4) 验证已配置的事件

对已配置新事件的存储桶执行某项操作,然后检查 Elasticsearch 服务中的通知数据。 所需执行的操作取决于配置存储桶通知时指定了哪些 events

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中创建新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 Elasticsearch 端点

以下步骤更新 MinIO 部署中现有的 Elasticsearch 服务端点,以支持 bucket notifications

前提条件

Elasticsearch v7.0 及更高版本

MinIO 依赖 https://github.com/olivere/elastic v7 项目连接 Elastic。elastic/v7 库专门面向 Elasticsearch v7.0,与更早版本的 Elasticsearch 不兼容。

MinIO mc 命令行工具

本步骤中的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc Quickstart

1) 列出部署中已配置的 Elasticsearch 端点

使用 mc admin config get 命令列出部署中当前已配置的 Elasticsearch 服务端点:

mc admin config get ALIAS/ notify_elasticsearch

ALIAS 替换为 MinIO 部署的 alias

命令输出类似如下:

notify_elasticsearch:primary  queue_dir="" queue_limit="0"  url="https://user:password@hostname:port" format="namespace" index=""
notify_elasticsearch:secondary queue_dir="" queue_limit="0"  url="https://user:password@hostname:port" format="namespace" index=""

notify_elasticsearch 键是 Elasticsearch 通知设置 的顶层配置键。 url 键指定给定 notify_elasticsearch 键对应的 Elasticsearch 服务端点。 notify_elasticsearch:<IDENTIFIER> 后缀表示该 Elasticsearch 服务端点的 唯一标识符。

记下你要更新的 Elasticsearch 服务端点标识符,以便下一步使用。

2) 更新 Elasticsearch 端点

使用 mc admin config set 命令为 Elasticsearch 服务端点设置新配置:

mc admin config set ALIAS/ notify_elasticsearch:<IDENTIFIER> \
   url="https://user:password@hostname:port" \
   index="<string>" \
   format="<string>" \
   username="<string>" \
   password="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

notify_elasticsearch url 配置项是 Elasticsearch 服务端点 最少 必须设置的项。其他所有配置项均为 可选。 完整的 Elasticsearch 配置项列表,请参见 Elasticsearch 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置变更。 使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为需要重启的部署 alias

minio server 进程会在启动时为每个已配置的 Elasticsearch 目标输出一行, 类似如下:

SQS ARNs: arn:minio:sqs::primary:elasticsearch

4) 验证变更

对某个已使用更新后 Elasticsearch 服务端点配置事件的存储桶执行操作,然后检查 Elasticsearch 服务中的通知数据。所需执行的操作取决于配置存储桶通知时指定了哪些 events

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中创建新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.7 - 将事件发布到 Kafka

MinIO 支持将 bucket notification 事件发布到 Kafka 服务端点。

MinIO 依赖 https://github.com/Shopify/sarama 项目实现 Kafka 连接能力, 并共享该项目对 Kafka 的支持。更多信息请参见 saramaCompatibility and API stability 章节。

向 MinIO 部署添加 Kafka 端点

以下过程会在 MinIO 部署中添加一个新的 Kafka 服务端点, 用于支持 bucket notifications

前提条件

Kafka 最低版本与支持版本

MinIO 依赖 https://github.com/Shopify/sarama 项目实现 Kafka 连接能力, 并共享该项目对 Kafka 的支持。更多信息请参见 saramaCompatibility and API stability 章节。

MinIO mc 命令行工具

该过程的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc Quickstart

1) 向 MinIO 添加 Kafka 端点

你可以使用环境变量, 通过设置运行时配置项,来配置新的 Kafka 服务端点。

MinIO 支持使用 environment variables 指定 Kafka 服务端点及其相关配置项。 minio server 进程会在下次启动时应用这些配置。

以下示例代码设置了配置 Kafka 服务端点相关的 全部 环境变量。 最低 必需 的变量是 MINIO_NOTIFY_KAFKA_ENABLEMINIO_NOTIFY_KAFKA_BROKERS

说明

Windows

   set MINIO_NOTIFY_KAFKA_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_KAFKA_BROKERS_<IDENTIFIER>="<ENDPOINT>"
   set MINIO_NOTIFY_KAFKA_TOPIC_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_SASL_USERNAME_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_SASL_PASSWORD_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_SASL_MECHANISM_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_TLS_CLIENT_AUTH_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_SASL_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_TLS_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_TLS_SKIP_VERIFY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_CLIENT_TLS_CERT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_CLIENT_TLS_KEY_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_VERSION_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_KAFKA_COMMENT_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_KAFKA_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_KAFKA_BROKERS_<IDENTIFIER>="<ENDPOINT>"
   export MINIO_NOTIFY_KAFKA_TOPIC_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_SASL_USERNAME_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_SASL_PASSWORD_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_SASL_MECHANISM_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_TLS_CLIENT_AUTH_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_SASL_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_TLS_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_TLS_SKIP_VERIFY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_CLIENT_TLS_CERT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_CLIENT_TLS_KEY_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_VERSION_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_KAFKA_COMMENT_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为该 Kafka 服务端点的唯一描述性字符串。 与新目标服务端点相关的所有环境变量都应使用相同的 <IDENTIFIER> 值。 以下示例假定标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署中已有的 Kafka 服务端点匹配, 新配置会 覆盖 该端点的现有配置。 使用 mc admin config get notify_kafka 查看 MinIO 部署当前已配置的 Kafka 端点。

  • <ENDPOINT> 替换为逗号分隔的 Kafka broker 列表。 例如:

    "kafka1.example.com:2021,kafka2.example.com:2021"

有关每个环境变量的完整说明,请参见 用于存储桶通知的 Kafka 服务

MinIO 支持在运行中的 minio server 进程上, 使用 mc admin config set 命令和 notify_kafka 配置键来新增或更新 Kafka 端点。 你必须重启 minio server 进程,才能应用新增或更新后的配置项。

以下示例代码设置了配置 Kafka 服务端点相关的 全部 配置项。 最低 必需 的配置项是 notify_kafka brokers

mc admin config set ALIAS/ notify_kafka:IDENTIFIER \
   brokers="<ENDPOINT>" \
   topic="<string>" \
   sasl_username="<string>" \
   sasl_password="<string>" \
   sasl_mechanism="<string>" \
   tls_client_auth="<string>" \
   tls="<string>" \
   tls_skip_verify="<string>" \
   client_tls_cert="<string>" \
   client_tls_key="<string>" \
   version="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"
  • IDENTIFIER 替换为该 Kafka 服务端点的唯一描述性字符串。 本过程中的以下示例假定标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署中已有的 Kafka 服务端点匹配, 新配置会 覆盖 该端点的现有配置。 使用 mc admin config get notify_kafka 查看 MinIO 部署当前已配置的 Kafka 端点。

  • ENDPOINT 替换为逗号分隔的 Kafka broker 列表。 例如:

    "kafka1.example.com:2021,kafka2.example.com:2021"

有关每个配置项的完整说明,请参见 Kafka 存储桶通知配置项

1) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用这些配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 alias

minio server 进程在启动时会为每个已配置的 Kafka 目标打印一行输出, 类似如下:

SQS ARNs: arn:minio:sqs::primary:kafka

在将关联的 Kafka 部署配置为目标时, 你必须在配置存储桶通知时指定该 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:kafka

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:kafka

3) 使用 Kafka 端点作为目标配置存储桶通知

使用 mc event add 命令新增存储桶通知事件, 并将已配置的 Kafka 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:kafka \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 alias
  • BUCKET 替换为要配置该事件的存储桶名称。
  • EVENTS 替换为逗号分隔的 events 列表,MinIO 会在这些事件发生时触发通知。

使用 mc event ls 查看给定通知目标上配置的所有存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:kafka

4) 验证已配置的事件

对配置了新事件的存储桶执行某项操作, 然后在 Kafka 服务中检查通知数据。 所需操作取决于配置存储桶通知时指定了哪些 events

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中创建一个新对象,以触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 Kafka 端点

以下过程会更新 MinIO 部署中现有的 Kafka 服务端点, 用于支持 bucket notifications

前提条件

Kafka 最低版本与支持版本

MinIO 依赖 https://github.com/Shopify/sarama 项目实现 Kafka 连接能力, 并共享该项目对 Kafka 的支持。更多信息请参见 saramaCompatibility and API stability 章节。

MinIO mc 命令行工具

该过程的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc Quickstart

1) 列出部署中已配置的 Kafka 端点

使用 mc admin config get 命令列出部署中当前已配置的 Kafka 服务端点:

mc admin config get ALIAS/ notify_kafka

ALIAS 替换为 MinIO 部署的 alias

命令输出类似如下:

notify_kafka:primary tls_skip_verify="off"  queue_dir="" queue_limit="0" sasl="off" sasl_password="" sasl_username="" tls_client_auth="0" tls="off" brokers="" topic="" client_tls_cert="" client_tls_key="" version=""
notify_kafka:secondary tls_skip_verify="off"  queue_dir="" queue_limit="0" sasl="off" sasl_password="" sasl_username="" tls_client_auth="0" tls="off" brokers="" topic="" client_tls_cert="" client_tls_key="" version=""

notify_kafka 键是 Kafka 通知设置 的顶层配置键。 brokers 键指定给定 notify_kafka 键所对应的 Kafka 服务端点。 notify_kafka:<IDENTIFIER> 后缀描述了该 Kafka 服务端点的唯一标识符。

记下你要在下一步中更新的 Kafka 服务端点标识符。

2) 更新 Kafka 端点

使用 mc admin config set 命令为 Kafka 服务端点设置新配置:

mc admin config set ALIAS/ notify_kafka:<IDENTIFIER> \
   brokers="https://kafka1.example.net:9200, https://kafka2.example.net:9200" \
   topic="<string>" \
   sasl_username="<string>" \
   sasl_password="<string>" \
   sasl_mechanism="<string>" \
   tls_client_auth="<string>" \
   tls="<string>" \
   tls_skip_verify="<string>" \
   client_tls_cert="<string>" \
   client_tls_key="<string>" \
   version="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

notify_kafka brokers 配置项 是 Kafka 服务端点的 最低 必需项。 所有其他配置项均为可选。 有关 Kafka 配置项的完整列表,请参见 Kafka 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用这些配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 alias

minio server 进程在启动时会为每个已配置的 Kafka 目标打印一行输出, 类似如下:

SQS ARNs: arn:minio:sqs::primary:kafka

4) 验证更改

对某个使用已更新 Kafka 服务端点配置了事件的存储桶执行某项操作, 然后在 Kafka 服务中检查通知数据。 所需操作取决于配置存储桶通知时指定了哪些 events

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中创建一个新对象,以触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.8 - 将事件发布到 MySQL

MinIO 支持将 存储桶通知 事件发布到 MySQL 服务端点。MinIO 支持 MySQL 5.7.8 及更高版本。

向 MinIO 部署添加 MySQL 端点

以下过程会向 MinIO 部署添加一个新的 MySQL 服务端点,以支持 存储桶通知

先决条件

MySQL 5.7.8 及更高版本

MinIO 依赖于 MySQL 5.7.8 中引入的功能。

MinIO mc 命令行工具

此过程会在某些操作中使用 mc 命令行工具。 安装说明请参阅 mc 快速入门

1) 将 MySQL 端点添加到 MinIO

你可以使用环境变量 设置运行时配置设置来配置新的 MySQL 服务端点。

MinIO 支持使用 环境变量 指定 MySQL 服务端点及其相关 配置设置。minio server 进程会在下次启动时应用指定的设置。

以下示例代码设置了与配置 MySQL 服务端点相关的 所有 环境变量。最少的 必需 变量为:

说明

Windows

   set MINIO_NOTIFY_MYSQL_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_MYSQL_DSN_STRING_<IDENTIFIER>="user:password@tcp(hostname:port)/database"
   set MINIO_NOTIFY_MYSQL_TABLE_<IDENTIFIER>="minio-events"
   set MINIO_NOTIFY_MYSQL_FORMAT_<IDENTIFIER>="namespace|access"
   set MINIO_NOTIFY_MYSQL_MAX_OPEN_CONNECTIONS_<IDENTIFIER>="2"
   set MINIO_NOTIFY_MYSQL_QUEUE_DIR_<IDENTIFIER>="/opt/minio/events"
   set MINIO_NOTIFY_MYSQL_QUEUE_LIMIT_<IDENTIFIER>="100000"
   set MINIO_NOTIFY_MYSQL_COMMENT_<IDENTIFIER>="MySQL Event Notification Logging for MinIO"
说明

Linux 与 macOS

   export MINIO_NOTIFY_MYSQL_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_MYSQL_DSN_STRING_<IDENTIFIER>="user:password@tcp(hostname:port)/database"
   export MINIO_NOTIFY_MYSQL_TABLE_<IDENTIFIER>="minio-events"
   export MINIO_NOTIFY_MYSQL_FORMAT_<IDENTIFIER>="namespace|access"
   export MINIO_NOTIFY_MYSQL_MAX_OPEN_CONNECTIONS_<IDENTIFIER>="2"
   export MINIO_NOTIFY_MYSQL_QUEUE_DIR_<IDENTIFIER>="/opt/minio/events"
   export MINIO_NOTIFY_MYSQL_QUEUE_LIMIT_<IDENTIFIER>="100000"
   export MINIO_NOTIFY_MYSQL_COMMENT_<IDENTIFIER>="MySQL Event Notification Logging for MinIO"
  • <IDENTIFIER> 替换为该 MySQL 服务端点的唯一描述性字符串。对于与新目标服务端点相关的所有环境变量,请使用相同的 <IDENTIFIER> 值。 以下示例假定标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署中现有的 MySQL 服务 端点匹配,则新设置会 覆盖 该端点的任何现有设置。使用 mc admin config get notify_mysql 查看 MinIO 部署上当前配置的 MySQL 端点。

  • <ENDPOINT> 替换为 MySQL 服务端点的 DSN。 MinIO 期望采用以下格式:

    <user>:<password>@tcp(<host>:<port>)/<database>

    例如:

    "username:password@tcp(mysql.example.com:3306)/miniodb"

有关每个环境变量的完整文档,请参阅 用于存储桶通知的 MySQL 服务

MinIO 支持在运行中的 minio server 进程上使用 mc admin config set 命令 和 notify_mysql 配置键添加或更新 MySQL 端点。你必须重启 minio server 进程,才能应用任何新增或更新的配置设置。

以下示例代码设置了与配置 MySQL 服务端点相关的 所有 设置。最少的 必需 设置为:

mc admin config set ALIAS/ notify_mysql:IDENTIFIER \
   dsn_string="<ENDPOINT>" \
   table="<string>" \
   format="<string>" \
   max_open_connections="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"
  • IDENTIFIER 替换为该 MySQL 服务端点的唯一描述性字符串。 本过程中的以下示例假定标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署中现有的 MySQL 服务 端点匹配,则新设置会 覆盖 该端点的任何现有设置。使用 mc admin config get notify_mysql 查看 MinIO 部署上当前配置的 MySQL 端点。

  • <ENDPOINT> 替换为 MySQL 服务端点的 DSN。 MinIO 期望采用以下格式:

    <user>:<password>@tcp(<host>:<port>)/<database>

    例如:

    "username:password@tcp(mysql.example.com:3306)/miniodb"

有关每项设置的完整文档,请参阅 MySQL 存储桶通知配置设置

1) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 MySQL 目标输出一行,类似如下:

SQS ARNs: arn:minio:sqs::primary:mysql

当将关联的 MySQL 部署配置为目标时,你必须在配置存储桶通知时指定该 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:mysql

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:mysql

3) 使用 MySQL 端点作为目标配置存储桶通知

使用 mc event add 命令添加新的存储桶通知事件,并将已配置的 MySQL 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:mysql \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 别名
  • BUCKET 替换为要在其中配置事件的存储桶名称。
  • EVENTS 替换为以逗号分隔的 事件 列表,MinIO 会在这些事件发生时触发通知。

使用 mc event ls 查看给定通知目标上已配置的所有存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:mysql

4) 验证已配置的事件

对已配置新事件的存储桶执行某个操作,并检查 MySQL 服务中的通知数据。 所需的操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中创建一个新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 MySQL 端点

以下过程会更新 MinIO 部署中现有的 MySQL 服务端点,以支持 存储桶通知

先决条件

MySQL 5.7.8 及更高版本

MinIO 依赖于 MySQL 5.7.8 中引入的功能。

MinIO mc 命令行工具

此过程会在某些操作中使用 mc 命令行工具。 安装说明请参阅 mc 快速入门

1) 列出部署中已配置的 MySQL 端点

使用 mc admin config get 命令列出部署中当前已配置的 MySQL 服务端点:

mc admin config get ALIAS/ notify_mysql

ALIAS 替换为 MinIO 部署的 别名

命令输出类似如下:

notify_mysql:primary format="namespace" table="minio_images" dsn_string="user:pass@tcp(mysql.example.com:3306)/miniodb"
notify_mysql:secondary format="namespace" table="minio_images" dsn_string="user:pass@tcp(mysql.example.com:3306)/miniodb"

notify_mysql 键是 MySQL 通知设置 的顶级配置键。 dsn_string 键指定给定 notify_mysql 键对应的 MySQL 服务端点。notify_mysql:<IDENTIFIER> 后缀描述该 MySQL 服务端点的唯一标识符。

记下你要在下一步更新的 MySQL 服务端点标识符。

2) 更新 MySQL 端点

使用 mc admin config set 命令为 MySQL 服务端点设置新的配置:

mc admin config set ALIAS/ notify_mysql:IDENTIFIER \
   dsn_string="<ENDPOINT>" \
   table="<string>" \
   format="<string>" \
   max_open_connections="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

以下配置设置是 MySQL 服务端点的 最小必需 项:

所有其他配置设置均为 可选。有关 MySQL 配置设置的完整列表,请参阅 MySQL 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 MySQL 目标输出一行,类似如下:

SQS ARNs: arn:minio:sqs::primary:mysql

4) 验证更改

对一个事件配置使用了更新后 MySQL 服务端点的存储桶执行某个操作,并检查 MySQL 服务中的通知数据。所需的操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中创建一个新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.9 - 将事件发布到 PostgreSQL

MinIO 支持将 存储桶通知 事件发布到 PostgreSQL。MinIO 仅支持 PostgreSQL 9.5 及以上版本。

向 MinIO 部署添加 PostgreSQL 端点

以下过程将为 MinIO 部署新增一个 PostgreSQL 服务端点,以支持 存储桶通知

前提条件

PostgreSQL 9.5 及以上版本

MinIO 依赖 PostgreSQL 9.5 引入的特性。

MinIO mc 命令行工具

此过程中的某些操作需要使用 mc 命令行工具。 安装说明参见 mc 快速入门

1) 向 MinIO 添加 PostgreSQL 端点

你可以使用环境变量 运行时配置设置来配置新的 PostgreSQL 服务端点。

MinIO 支持使用 环境变量 指定 PostgreSQL 服务端点及其相关 配置设置。minio server 进程会在下次启动时应用这些设置。

下面的示例代码设置了与配置 PostgreSQL 服务端点相关的 全部 环境变量。 最低 必需 的变量如下:

说明

Windows

   set MINIO_NOTIFY_POSTGRES_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_POSTGRES_CONNECTION_STRING_<IDENTIFIER>="host=postgresql-endpoint.example.net port=4222"
   set MINIO_NOTIFY_POSTGRES_TABLE_<IDENTIFIER>="minioevents"
   set MINIO_NOTIFY_POSTGRES_FORMAT_<IDENTIFIER>="namespace|access"
   set MINIO_NOTIFY_POSTGRES_MAX_OPEN_CONNECTIONS_<IDENTIFIER>="2"
   set MINIO_NOTIFY_POSTGRES_QUEUE_DIR_<IDENTIFIER>="/opt/minio/events"
   set MINIO_NOTIFY_POSTGRES_QUEUE_LIMIT_<IDENTIFIER>="100000"
   set MINIO_NOTIFY_POSTGRES_COMMENT_<IDENTIFIER>="PostgreSQL Notification Event Logging for MinIO"
说明

Linux 与 macOS

   export MINIO_NOTIFY_POSTGRES_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_POSTGRES_CONNECTION_STRING_<IDENTIFIER>="host=postgresql-endpoint.example.net port=4222"
   export MINIO_NOTIFY_POSTGRES_TABLE_<IDENTIFIER>="minioevents"
   export MINIO_NOTIFY_POSTGRES_FORMAT_<IDENTIFIER>="namespace|access"
   export MINIO_NOTIFY_POSTGRES_MAX_OPEN_CONNECTIONS_<IDENTIFIER>="2"
   export MINIO_NOTIFY_POSTGRES_QUEUE_DIR_<IDENTIFIER>="/opt/minio/events"
   export MINIO_NOTIFY_POSTGRES_QUEUE_LIMIT_<IDENTIFIER>="100000"
   export MINIO_NOTIFY_POSTGRES_COMMENT_<IDENTIFIER>="PostgreSQL Notification Event Logging for MinIO"
  • <IDENTIFIER> 替换为 PostgreSQL 服务端点的唯一描述性字符串。 对于与新目标服务端点相关的所有环境变量,请使用相同的 <IDENTIFIER> 值。 以下示例假定标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署上现有的 PostgreSQL 服务 端点匹配,则新设置会 覆盖 该端点的现有设置。使用 mc admin config get notify_postgres 查看 MinIO 部署当前配置的 PostgreSQL 端点。

  • <ENDPOINT> 替换为 PostgreSQL 服务端点的 PostgreSQL 连接字符串。MinIO 支持连接字符串使用 key=value 格式。 例如:

    "host=https://postgresql.example.com port=5432 ..."

    有关受支持的 PostgreSQL 连接字符串参数的完整文档,请参见 PostgreSQL 连接字符串

各环境变量的完整文档请参见 用于存储桶通知的 PostgreSQL 服务

MinIO 支持在正在运行的 minio server 进程上,使用 mc admin config set 命令和 notify_postgres 配置键 来新增或更新 PostgreSQL 端点。你必须重启 minio server 进程, 才能应用任何新增或更新的配置设置。

下面的示例代码设置了与配置 PostgreSQL 服务端点相关的 全部 设置。 最低 必需 的设置如下:

mc admin config set ALIAS/ notify_postgres:IDENTIFIER \
   connection_string="ENDPOINT" \
   table="<string>" \
   format="<string>" \
   max_open_connections="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"
  • IDENTIFIER 替换为 PostgreSQL 服务端点的唯一描述性字符串。 本过程后续示例假定标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署上现有的 PostgreSQL 服务端点 匹配,则新设置会 覆盖 该端点的现有设置。使用 mc admin config get notify_postgres 查看 MinIO 部署当前配置的 PostgreSQL 端点。

  • <ENDPOINT> 替换为 PostgreSQL 服务端点的 PostgreSQL URI 连接字符串。 MinIO 支持 PostgreSQL 连接字符串使用 key=value 格式。例如:

    "host=https://postgresql.example.com port=5432 ..."

    有关受支持的 PostgreSQL 连接字符串参数的完整文档,请参见 PostgreSQL 连接字符串

各设置的完整文档请参见 PostgreSQL 存储桶通知配置设置

1) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 PostgreSQL 目标输出一行内容, 类似如下:

SQS ARNs: arn:minio:sqs::primary:postgresql

当将关联的 PostgreSQL 部署作为目标配置存储桶通知时,你必须指定该 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:postgresql

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:postgresql

3) 将 PostgreSQL 端点作为目标配置存储桶通知

使用 mc event add 命令新增一个以已配置 PostgreSQL 服务为目标的 存储桶通知事件:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:postgresql \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 别名
  • BUCKET 替换为要配置该事件的存储桶名称。
  • EVENTS 替换为以逗号分隔的 事件 列表,MinIO 将在这些事件发生时触发通知。

使用 mc event ls 查看给定通知目标当前配置的所有存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:postgresql

4) 验证已配置的事件

对你为其配置了新事件的存储桶执行一个操作,并检查 PostgreSQL 服务中的通知数据。 所需执行的操作取决于配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中新建对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

在 MinIO 部署中更新 PostgreSQL 端点

以下过程将更新 MinIO 部署中现有的 PostgreSQL 服务端点,以支持 存储桶通知

前提条件

PostgreSQL 9.5 及以上版本

MinIO 依赖 PostgreSQL 9.5 引入的特性。

MinIO mc 命令行工具

此过程中的某些操作需要使用 mc 命令行工具。 安装说明参见 mc 快速入门

1) 列出部署中已配置的 PostgreSQL 端点

使用 mc admin config get 命令列出部署中当前已配置的 PostgreSQL 服务端点:

mc admin config get ALIAS/ notify_postgres

ALIAS 替换为 MinIO 部署的 别名

命令输出类似如下:

notify_postgres:primary queue_dir="" connection_string="postgresql://" queue_limit="0"  table="" format="namespace"
notify_postgres:secondary queue_dir="" connection_string="" queue_limit="0"  table="" format="namespace"

notify_postgres 键是 PostgreSQL 通知设置 的顶层配置键。 connection_string 键为给定的 notify_postgres 键指定 PostgreSQL 服务端点。 notify_postgres:<IDENTIFIER> 后缀描述该 PostgreSQL 服务端点的唯一标识符。

记下你要更新的 PostgreSQL 服务端点标识符,以便下一步使用。

2) 更新 PostgreSQL 端点

使用 mc admin config set 命令设置 PostgreSQL 服务端点的新配置:

mc admin config set ALIAS/ notify_postgres:IDENTIFIER \
   connection_string="ENDPOINT" \
   table="<string>" \
   format="<string>" \
   max_open_connections="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

以下配置设置是 PostgreSQL 服务端点的 最低 必需项:

其他所有配置设置均为 可选。 完整的 PostgreSQL 配置设置列表请参见 PostgreSQL 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 PostgreSQL 目标输出一行内容, 类似如下:

SQS ARNs: arn:minio:sqs::primary:postgresql

4) 验证变更

对某个使用已更新 PostgreSQL 服务端点进行事件配置的存储桶执行操作,并检查 PostgreSQL 服务中的通知数据。所需执行的操作取决于配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件,则可以使用 mc cp 命令在存储桶中新建对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.10 - 将事件发布到 Redis

MinIO 支持将 存储桶通知 事件发布到 Redis 服务端点。

向 MinIO 部署添加 Redis 端点

以下过程会在 MinIO 部署中添加一个新的 Redis 服务端点,用于支持 存储桶通知

前提条件

MinIO mc 命令行工具

此过程在部分操作中使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 将 Redis 端点添加到 MinIO

你可以使用环境变量 运行时配置设置来配置新的 Redis 服务端点。

MinIO 支持使用 环境变量 指定 Redis 服务端点及其相关 配置设置。minio server 进程会在下一次启动时应用这些设置。

以下示例代码设置了与配置 Redis 服务端点相关的 全部 环境变量。 最少的 必需 变量包括:

说明

Windows

   set MINIO_NOTIFY_REDIS_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_REDIS_ADDRESS_<IDENTIFIER>="<ENDPOINT>"
   set MINIO_NOTIFY_REDIS_KEY_<IDENTIFIER>="<STRING>"
   set MINIO_NOTIFY_REDIS_FORMAT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_REDIS_PASSWORD_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_REDIS_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_REDIS_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_REDIS_COMMENT_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_REDIS_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_REDIS_ADDRESS_<IDENTIFIER>="<ENDPOINT>"
   export MINIO_NOTIFY_REDIS_KEY_<IDENTIFIER>="<STRING>"
   export MINIO_NOTIFY_REDIS_FORMAT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_REDIS_PASSWORD_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_REDIS_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_REDIS_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_REDIS_COMMENT_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为目标服务端点的唯一描述性字符串。 对于与新目标服务端点相关的所有环境变量,请使用相同的 <IDENTIFIER> 值。 以下示例假定标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署上现有的 Redis 服务端点匹配, 新设置会 覆盖 该端点的所有现有设置。使用 mc admin config get notify_redis 查看当前在 MinIO 部署上已配置的 Redis 端点。

  • <ENDPOINT> 替换为 Redis 服务端点的 URL。 例如:https://redis.example.com:6369

有关每个环境变量的完整文档,请参见 存储桶通知的 Redis 服务

MinIO 支持在正在运行的 minio server 进程上,使用 mc admin config set 命令和 notify_redis 配置键 添加或更新 Redis 端点。你必须重启 minio server 进程,才能应用任何新的 或更新后的配置设置。

以下示例代码设置了与配置 Redis 服务端点相关的 全部 设置。 最少的 必需 设置包括:

mc admin config set ALIAS/ notify_redis:IDENTIFIER \
  address="ENDPOINT" \
  key="<string>" \
  format="<string>" \
  password="<string>" \
  queue_dir="<string>" \
  queue_limit="<string>" \
  comment="<string>"
  • IDENTIFIER 替换为 Redis 服务端点的唯一描述性字符串。 本过程中的以下示例假定标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署上现有的 Redis 服务端点匹配, 新设置会 覆盖 该端点的所有现有设置。使用 mc admin config get notify_redis 查看当前在 MinIO 部署上已配置的 Redis 端点。

  • ENDPOINT 替换为 Redis 服务端点的 URL。 例如:https://redis.example.com:6369

有关每个设置的完整文档,请参见 Redis 存储桶通知配置设置

1) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 Redis 目标打印一行类似如下的内容:

SQS ARNs: arn:minio:sqs::primary:redis

将关联的 Redis 部署配置为目标来配置存储桶通知时,必须指定该 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:redis

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:redis

3) 将 Redis 端点配置为存储桶通知目标

使用 mc event add 命令新增一个存储桶通知事件,并将已配置的 Redis 服务 作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:redis \
  --event EVENTS
  • ALIAS 替换为某个 MinIO 部署的 别名
  • BUCKET 替换为要配置该事件的存储桶名称。
  • EVENTS 替换为一个以逗号分隔的 事件 列表,MinIO 会为这些事件触发通知。

使用 mc event ls 查看给定通知目标的所有已配置存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:redis

4) 验证已配置的事件

对已为其配置新事件的存储桶执行某个操作,并检查 Redis 服务中的通知数据。 所需的操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 则可以使用 mc cp 命令在存储桶中创建一个新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

在 MinIO 部署中更新 Redis 端点

以下过程会更新 MinIO 部署中现有的 Redis 服务端点,以支持 存储桶通知

前提条件

MinIO mc 命令行工具

此过程在部分操作中使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 列出部署中已配置的 Redis 端点

使用 mc admin config get 命令列出部署中当前已配置的 Redis 服务端点:

mc admin config get ALIAS/ notify_redis

ALIAS 替换为 MinIO 部署的 别名

命令输出类似如下:

notify_redis:primary address="https://redis.example.com:6369" format="namespace" key="minioevent" password="" queue_dir="" queue_limit="0"
notify_redis:secondary address="https://redis.example.com:6369" format="namespace" key="minioevent" password="" queue_dir="" queue_limit="0"

notify_redis 键是 Redis 通知设置 的顶层配置键。 address 键为给定的 notify_redis 键指定 Redis 服务端点。notify_redis:<IDENTIFIER> 后缀表示该 Redis 服务端点的唯一标识符。

记下你要更新的 Redis 服务端点标识符,以便在下一步中使用。

2) 更新 Redis 端点

使用 mc admin config set 命令为 Redis 服务端点设置新配置:

mc admin config set ALIAS/ notify_redis:IDENTIFIER \
   address="ENDPOINT" \
   key="<string>" \
   format="<string>" \
   password="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   comment="<string>"

notify_redis address 配置设置是 Redis 服务端点 最少 必需的配置项。所有其他配置设置均为 可选。有关 Redis 配置设置的完整列表,请参见 Redis 通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署才能应用配置更改。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 别名

minio server 进程在启动时会为每个已配置的 Redis 目标打印一行类似如下的内容:

SQS ARNs: arn:minio:sqs::primary:redis

4) 验证更改

对某个已使用更新后的 Redis 服务端点进行事件配置的存储桶执行操作,并检查 Redis 服务中的通知数据。所需的操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 则可以使用 mc cp 命令在存储桶中创建一个新对象并触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

10.11 - 将事件发布到 Webhook

MinIO 支持将 存储桶通知 事件发布到 Webhook 服务端点。

向 MinIO 部署添加 Webhook 端点

以下过程会为 MinIO 部署新增一个 Webhook 服务端点,以支持 存储桶通知

前提条件

MinIO mc 命令行工具

本过程中的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 向 MinIO 添加 Webhook 端点

你可以使用环境变量,或通过设置运行时配置项来配置新的 Webhook 服务端点。

MinIO 支持使用 环境变量 指定 Webhook 服务端点及其相关配置。minio server 进程会在下一次启动时 应用这些设置。

以下示例代码设置了配置 Webhook 服务端点所需的 全部 环境变量。 最低 必需 变量为 MINIO_NOTIFY_WEBHOOK_ENABLEMINIO_NOTIFY_WEBHOOK_ENDPOINT

说明

Windows

   set MINIO_NOTIFY_WEBHOOK_ENABLE_<IDENTIFIER>="on"
   set MINIO_NOTIFY_WEBHOOK_ENDPOINT_<IDENTIFIER>="ENDPOINT"
   set MINIO_NOTIFY_WEBHOOK_AUTH_TOKEN_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_WEBHOOK_QUEUE_DIR_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_WEBHOOK_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_WEBHOOK_CLIENT_CERT_<IDENTIFIER>="<string>"
   set MINIO_NOTIFY_WEBHOOK_CLIENT_KEY_<IDENTIFIER>="<string>"
说明

Linux 与 macOS

   export MINIO_NOTIFY_WEBHOOK_ENABLE_<IDENTIFIER>="on"
   export MINIO_NOTIFY_WEBHOOK_ENDPOINT_<IDENTIFIER>="ENDPOINT"
   export MINIO_NOTIFY_WEBHOOK_AUTH_TOKEN_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_WEBHOOK_QUEUE_DIR_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_WEBHOOK_QUEUE_LIMIT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_WEBHOOK_CLIENT_CERT_<IDENTIFIER>="<string>"
   export MINIO_NOTIFY_WEBHOOK_CLIENT_KEY_<IDENTIFIER>="<string>"
  • <IDENTIFIER> 替换为该 Webhook 服务端点的唯一描述性字符串。 对于与新目标服务端点相关的所有环境变量,请使用相同的 <IDENTIFIER> 值。以下示例假设该标识符为 PRIMARY

    如果指定的 <IDENTIFIER> 与 MinIO 部署中现有的 Webhook 服务端点匹配,新设置会 覆盖 该端点的任何现有设置。可使用 mc admin config get notify_webhook 查看 MinIO 部署当前配置的 Webhook 端点。

  • <ENDPOINT> 替换为 Webhook 服务端点的 URL。例如:

    https://webhook.example.com

有关每个环境变量的完整文档,请参见 用于存储桶通知的 Webhook 服务

MinIO 支持在运行中的 minio server 进程上,使用 mc admin config set 命令和 notify_webhook 配置键来添加或更新 Webhook 端点。 你必须重启 minio server 进程,才能应用任何新增或更新的 配置设置。

以下示例代码设置了配置 Webhook 服务端点所需的 全部 设置。 最低 必需 设置为 notify_webhook endpoint

mc admin config set ALIAS/ notify_webhook:IDENTIFIER \
   endpoint="<ENDPOINT>" \
   auth_token="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   client_cert="<string>" \
   client_key="<string>"
  • IDENTIFIER 替换为该 Webhook 服务端点的唯一描述性字符串。 本过程后续示例假设该标识符为 PRIMARY

    如果指定的 IDENTIFIER 与 MinIO 部署中现有的 Webhook 服务端点匹配,新设置会 覆盖 该端点的任何现有设置。可使用 mc admin config get notify_webhook 查看 MinIO 部署当前配置的 Webhook 端点。

  • ENDPOINT 替换为 Webhook 服务端点的 URL。例如:

    https://webhook.example.com

有关每个设置的完整文档,请参见 Webhook 存储桶通知配置设置

1) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置变更。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署 别名

minio server 进程在启动时会为每个已配置的 Webhook 目标打印一行, 类似如下:

SQS ARNs: arn:minio:sqs::primary:webhook

在将关联的 Webhook 部署配置为目标时,你必须在配置存储桶通知时指定该 ARN 资源。

说明

识别存储桶通知的 ARN

此前创建端点时,你已定义 <IDENTIFIER>,用于分配给存储桶通知目标 ARN。 以下步骤会返回该部署上已配置的 ARN。 请通过查找你指定的 <IDENTIFIER> 来识别此前创建的 ARN。

查看 JSON 输出

  1. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS
  2. 在 JSON 输出中,查找 info.sqsARN 键。

    你需要的 ARN 就是该键中与所指定 <IDENTIFIER> 匹配的那个值。

    例如,arn:minio:sqs::primary:webhook

使用 jq 从 JSON 中解析该值

  1. 安装 jq

  2. 复制并运行以下命令,将 ALIAS 替换为该部署的 别名

    mc admin info --json ALIAS | jq  .info.sqsARN

    该命令会返回用于通知的 ARN,例如 arn:minio:sqs::primary:webhook

3) 使用 Webhook 端点作为目标来配置存储桶通知

使用 mc event add 命令添加新的存储桶通知事件,并将已配置的 Webhook 服务作为目标:

mc event add ALIAS/BUCKET arn:minio:sqs::primary:webhook \
  --event EVENTS
  • ALIAS 替换为 MinIO 部署的 别名
  • BUCKET 替换为要配置该事件的存储桶名称。
  • EVENTS 替换为以逗号分隔的 事件 列表,MinIO 会针对这些事件触发通知。

使用 mc event ls 可查看给定通知目标的所有已配置存储桶事件:

mc event ls ALIAS/BUCKET arn:minio:sqs::primary:webhook

4) 验证已配置的事件

对配置了新事件的存储桶执行相应操作,并检查 Webhook 服务中的通知数据。 所需操作取决于在配置存储桶通知时指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 你可以使用 mc cp 命令在存储桶中创建新对象,从而触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

更新 MinIO 部署中的 Webhook 端点

以下过程会更新 MinIO 部署中现有的 Webhook 服务端点,以支持 存储桶通知

前提条件

MinIO mc 命令行工具

本过程中的部分操作需要使用 mc 命令行工具。 安装说明请参见 mc 快速入门

1) 列出部署中已配置的 Webhook 端点

使用 mc admin config get 命令列出部署中当前已配置的 Webhook 服务端点:

mc admin config get ALIAS/ notify_webhook

ALIAS 替换为 MinIO 部署的 别名

该命令输出类似如下:

notify_webhook:primary endpoint="https://webhook.example.com" auth_token="" queue_limit="0" queue_dir="" client_cert="" client_key=""
notify_webhook:secondary endpoint="https://webhook.example.com" auth_token="" queue_limit="0" queue_dir="" client_cert="" client_key=""

notify_webhook 键是 Webhook 服务通知设置 的顶层配置键。 endpoint 键为给定的 notify_webhook 键指定 Webhook 服务端点。notify_webhook:<IDENTIFIER> 后缀描述该 Webhook 服务端点的唯一标识符。

记下你想在下一步更新的 Webhook 服务端点标识符。

2) 更新 Webhook 端点

使用 mc admin config set 命令为 Webhook 服务端点设置新配置:

mc admin config set ALIAS/ notify_webhook:IDENTIFIER \
   endpoint="<ENDPOINT>" \
   auth_token="<string>" \
   queue_dir="<string>" \
   queue_limit="<string>" \
   client_cert="<string>" \
   client_key="<string>"

notify_webhook endpoint 配置设置 是 Webhook 服务端点的 最低 必需项。其他所有配置设置均为 可选。 有关 Webhook 配置设置的完整列表,请参见 Webhook 服务通知设置

3) 重启 MinIO 部署

你必须重启 MinIO 部署以应用配置变更。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署 别名

minio server 进程在启动时会为每个已配置的 Webhook 目标打印一行, 类似如下:

SQS ARNs: arn:minio:sqs::primary:webhook

4) 验证变更

对某个使用已更新 Webhook 服务端点进行事件配置的存储桶执行相应操作, 并检查 Webhook 服务中的通知数据。所需操作取决于在配置存储桶通知时 指定了哪些 事件

例如,如果存储桶通知配置包含 s3:ObjectCreated:Put 事件, 你可以使用 mc cp 命令在存储桶中创建新对象,从而触发通知。

mc cp ~/data/new-object.txt ALIAS/BUCKET

11 - 身份与访问管理

MinIO 要求客户端在每次发起新操作时同时完成认证与授权。

Authentication

用于验证连接客户端身份的过程。 MinIO 要求客户端使用 AWS Signature Version 4 protocol 进行认证,同时支持已弃用的 Signature Version 2 协议。 具体来说,客户端必须提供有效的 access key 和 secret key,才能访问任何 S3 或 MinIO 管理 API,例如 PUTGETDELETE 操作。

Authorization

用于限制已认证客户端在部署上可执行操作及可访问资源的过程。 MinIO 使用 基于策略的访问控制 (PBAC),其中每个策略描述一条或多条规则,用于定义某个用户或某组用户的权限。 MinIO 在创建策略时支持 S3 特定的 actionsconditions。 默认情况下,MinIO 会 拒绝 访问用户已分配或继承策略中未显式引用的操作或资源。

Identity Management

MinIO 同时支持内部和外部身份管理:

IDentity Provider (IDP) 说明
MinIO Internal IDP 提供内置身份管理功能。
OpenID 支持通过兼容 OpenID Connect (OIDC) 的服务管理身份。
MinIO Authentication Plugin 支持使用 MinIO Authentication Plugin 扩展对接自定义外部身份管理器。
Active Directory / LDAP 支持通过 Active Directory 或 LDAP 服务管理身份。
Access Management Plugin 支持使用 MinIO Access Management Plugin 扩展对接自定义外部访问管理器。

完成认证后,MinIO 会根据该已认证身份是否 有权 对指定资源执行该操作,决定允许还是拒绝客户端请求。

Access Management

MinIO 使用 基于策略的访问控制 (PBAC) 来定义已认证用户可访问的授权操作和资源。每个策略描述一条或多条 actionsconditions,用于说明某个 usergroup 的权限。

MinIO 负责策略的创建与存储。将策略分配给用户或组的具体流程取决于所配置的 IDentity Provider (IDP)

使用 MinIO Internal IDP 的 MinIO 部署,要求使用 mc admin policy attach 命令将一个或多个策略显式关联到用户。用户也可以继承其所属 groups 上附加的策略。

默认情况下,MinIO 会 拒绝 访问附加或继承策略未显式允许的操作或资源。未被显式分配策略且未继承任何策略的用户,无法执行任何 S3 或 MinIO 管理 API 操作。

对于使用外部 IDP 的 MinIO 部署,策略分配方式取决于所选 IDP:

OpenID Connect (OIDC)

MinIO 会检查 JSON Web Token (JWT) claim(默认是 policy),其中包含要附加到已认证用户的一个或多个策略名称。如果这些策略不存在,则该用户无法在 MinIO 部署上执行任何操作。

MinIO 不支持将 OIDC 用户身份分配到 groups。因此,IDP 管理员必须将所有必需策略分配到用户的 policy claim 中。

更多信息请参见 外部托管身份的访问控制

Active Directory / LDAP (AD/LDAP)

MinIO 会检查是否存在某个策略,其名称与已认证 AD/LDAP 用户的 Distinguished Name (DN) 匹配。

MinIO 还支持查询已认证 AD/LDAP 用户的组成员关系。对于每个返回的组,MinIO 都会分配名称与该组 DN 匹配的策略。

如果没有任何策略与用户 DN 用户任一组 DN 匹配,则该用户无法在 MinIO 部署上执行任何操作。

更多信息请参见 外部托管身份的访问控制

MinIO PBAC 在设计上兼容 AWS IAM 策略语法、结构和行为。MinIO 文档会尽力覆盖 IAM 特定行为和功能。若需要更完整的 IAM、IAM 策略或 IAM JSON 语法文档,请参考 IAM documentation

说明

Deny overrides Allow

MinIO 遵循 AWS IAM 策略求值规则,即在同一操作/资源上,Deny 规则会覆盖 Allow 规则。例如,如果某个用户被显式分配的策略对某个操作/资源包含 Allow 规则,而其所属某个组被分配的策略对同一操作/资源包含 Deny 规则,则 MinIO 只会应用 Deny 规则。

有关 IAM 策略求值逻辑的更多信息,请参见 IAM 文档中的 Determining Whether a Request is Allowed or Denied Within an Account

11.1 - Silo 身份管理

MinIO 内置一个 IDentity Provider (IDP),提供核心身份管理功能。 MinIO IDP 支持在部署中创建任意数量的长期有效用户,以支持客户端认证。

每个用户都由唯一的访问密钥(用户名)及其对应的密钥(密码)组成。 客户端必须同时提供现有 MinIO 用户的有效访问密钥(用户名)及其对应的密钥(密码),才能完成身份认证。

管理员使用 mc admin user 命令创建和管理 MinIO 用户。

MinIO 还支持创建 访问密钥。访问密钥是已认证父用户的子身份,并继承父用户的权限。

默认情况下,MinIO 会拒绝访问任何未被用户已分配或继承 策略 显式允许的操作或资源。 你必须显式为用户分配一个描述其授权操作和资源的 策略或者 将用户加入已关联策略的 。更多信息请参见 Access Management

说明

外部身份管理

MinIO 支持使用 OpenID Connect (OIDC) 或 Active Directory/LDAP IDentity Provider (IDP) 对身份进行外部管理。 更多信息请参见:

AD/LDAP 与 OIDC 配置互斥。 此外,启用 AD/LDAP 外部身份管理后,会禁用 MinIO 内部 IDP,但仍可创建 访问密钥。 你可以在保留 MinIO 管理用户的同时,配置多个 OIDC provider。

11.2 - 用户管理

概述

MinIO 用户由唯一的访问密钥(用户名)及其对应的密钥(密码)组成。 客户端必须同时指定现有 MinIO 用户的有效访问密钥(用户名)及其对应的密钥(密码),才能完成身份认证。

每个用户都可以分配一个或多个 策略, 这些策略会显式列出该用户有权访问的操作和资源。 用户还可以从其所属的 继承策略。

默认情况下,MinIO 会拒绝访问任何未被用户已分配或继承的 策略 显式允许的操作或资源。 你必须显式为用户分配一个描述其授权操作和资源的 策略或者 将用户加入已关联策略的 。更多信息请参见 Access Management

本页介绍 MinIO 内部 IDentity Provider (IDP) 的用户管理。 MinIO 还支持使用 OpenID Connect (OIDC) 或 Active Directory/LDAP IDentity Provider (IDP) 对身份进行外部管理。 更多信息请参见:

启用外部身份管理后,会禁用 MinIO 内部 IDP,但仍可创建 访问密钥

访问密钥

MinIO Access Keys(原称 “Service Accounts”)是已认证 MinIO 用户的子身份,其中也包括 外部管理的身份。 每个访问密钥都会基于其父用户附加的 策略或者 父用户所属组的策略来继承权限。 访问密钥还支持可选的内联策略,用于进一步将访问限制为父用户可用操作和资源的子集。

MinIO 用户可以生成任意数量的访问密钥。 这使应用所有者可以为其应用生成访问密钥,而无需 MinIO 管理员介入。 由于生成的访问密钥拥有与父用户相同或更少的权限,管理员可以专注于管理顶层父用户,而无需细致管理这些生成的访问密钥。

你可以使用 mc admin user svcacct add 命令创建访问密钥。 通过这些方式创建的身份在你移除访问密钥或父账户之前不会过期。

你还可以通过 AssumeRole STS API 端点,以编程方式创建 security token service 账户。 STS token 默认在 1 小时后过期,但你可以将过期时间设置为自创建起最长 7 天。

访问密钥用于编程访问

访问密钥支持应用程序进行编程访问。 你不能使用访问密钥登录 MinIO Console。

MinIO root 用户

每个 MinIO 部署都具有一个 root 用户,可访问该部署上的所有操作和资源, 无论配置的是哪种 身份管理器。当 minio 服务器首次启动时, 会通过检查以下环境变量的值来设置 root 用户凭证:

轮换 root 用户凭证时,需要为部署中的所有 MinIO 服务器更新其中一个或两个变量。 root 凭证应指定为 长、唯一且随机 的字符串。 存储访问密钥和密钥时应采取一切可能的防护措施,确保只有已知且受信任、并且 确实需要 该部署超级用户访问权限的人员才能获取 root 凭证。

  • MinIO 强烈不建议 在任何环境中(开发、预发或生产)使用 root 用户进行常规客户端访问。
  • MinIO 强烈建议 创建用户时,使每个客户端仅拥有执行其分配工作负载所需的最小操作和资源集合。

如果这些变量未设置,minio 默认分别使用 minioadminminioadmin 作为访问密钥和密钥。无论部署环境如何,MinIO 都 强烈不建议 使用默认凭证。

旧版 Root 用户环境变量已弃用

MinIO RELEASE.2021-04-22T15-44-28Z 及后续版本已弃用以下用于设置或更新 root 用户凭证的变量:

用户管理

创建用户

使用 mc admin user add 命令在 MinIO 部署上创建新用户:

mc admin user add ALIAS ACCESSKEY SECRETKEY
  • ALIAS 替换为 MinIO 部署的 alias
  • ACCESSKEY 替换为用户的访问密钥。 MinIO 允许在用户创建后,通过 mc admin user info 命令检索访问密钥。
  • SECRETKEY 替换为用户的密钥。 MinIO 不提供 在密钥设置后再进行检索的任何方法。

ACCESSKEYSECRETKEY 都应指定为唯一、随机且足够长的字符串。 你的组织可能对生成用于访问密钥或密钥的值有特定的内部或监管要求。

创建用户后,使用 mc admin policy attach 为新用户关联 MinIO 基于策略的访问控制。 以下命令分配内置的 readwrite 策略:

mc admin policy attach ALIAS readwrite --user=USERNAME

USERNAME 替换为上一步创建的 ACCESSKEY

删除用户

使用 mc admin user rm 命令从 MinIO 部署中移除用户:

mc admin user rm ALIAS USERNAME
  • ALIAS 替换为 MinIO 部署的 alias
  • USERNAME 替换为要移除的用户名。

11.3 - OpenID Connect 访问管理

MinIO 支持使用兼容 OpenID Connect (OIDC) 的 Identity Provider (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook,来进行外部用户身份管理。

对于由外部 OpenID Connect (OIDC) 兼容提供方管理的身份,MinIO 可以通过以下两种方式之一,将策略分配给已认证用户。

  1. 使用 OIDC 认证流程返回的 JSON Web Token claim,识别需要分配给已认证用户的 策略
  2. 使用授权请求中指定的 RoleArn,分配附加到该提供方 RolePolicy 的策略。

默认情况下,MinIO 会拒绝访问用户已分配或继承的 策略 中未显式允许的任何操作或资源。 由 OIDC 提供方管理的用户必须在 JWT claim 中指定所需策略。如果用户的 JWT claim 没有与之匹配的 MinIO 策略,则该用户无权访问 MinIO 部署中的任何操作或资源。

MinIO 要检查的具体 claim 需要在 使用 OIDC 身份管理部署集群 时进行配置。本页重点介绍如何创建与已配置 OIDC claims 匹配的 MinIO 策略。

认证与授权流程

MinIO 支持两种 OIDC 认证与授权流程:

  1. RolePolicy 流在 MinIO 配置中设置已认证用户的分配策略。

    MinIO 建议在与 OpenID 提供方集成认证时使用 RolePolicy 方法。

  2. JWT 流将已认证用户的分配策略作为 OIDC 配置的一部分进行设置。

MinIO 支持多个 OIDC 提供方配置。 但是,每个部署只能配置 一个 基于 JWT claim 的 OIDC 提供方。 所有其他提供方都必须使用 RolePolicy。

RolePolicy 与 RoleArn

使用 RolePolicy 时,所有通过给定 RoleArn 生成 STS 凭证的客户端,都会获得与该 RoleArn 的 RolePolicy 配置关联的 一个或多个策略

你可以使用 OpenID 策略变量 创建策略,以编程方式控制每个用户可访问的内容。

应用程序使用 OIDC 凭证并采用 RolePolicy claim 流时,其登录流程如下:

  1. 创建 OIDC 配置。

  2. 记录分配给该配置的 RoleArn,可在创建时或 MinIO 启动时获取。 将此 RoleArn 与 AssumeRoleWithWebIdentity STS API 一起使用。

  3. 创建与该 RoleArn 配套使用的 RolePolicy。 使用 MINIO_IDENTITY_OPENID_ROLE_POLICY 环境变量或 identity_openid role_policy 配置项,定义该提供方要使用的策略列表

  4. 用户在登录 MinIO 时选择已配置的 OIDC 提供方。

  5. 用户完成对已配置 OIDC 提供方的认证,并重定向回 MinIO。

    MinIO 仅支持 OpenID Authorization Code Flow。 不支持使用 Implicit Flow 进行认证。

  6. MinIO 验证 API 调用中的 RoleArn,并检查要使用的 RolePolicy。 任何携带该 RoleArn 的认证请求都会获得相同的策略访问权限。

  7. MinIO 在 STS API 响应中返回临时凭证,形式为 access key、secret key 和 session token。 这些凭证的权限与 RolePolicy 中指定的策略一致。

  8. 应用程序使用 STS 端点返回的临时凭证,在 MinIO 上执行已认证的 S3 操作。

JSON Web Token Claim

使用 JSON Web Token 可以为不同用户单独分配策略。 但使用 Web Token 也意味着需要为不同 claim 管理多份策略,管理成本会更高。

应用程序使用 OIDC 凭证并采用 JSON Web Token Claim 流时,其登录流程如下:

  1. 对已配置的 OIDC 提供方进行认证,并获取 JSON Web Token (JWT)

    MinIO 仅支持 OpenID Authorization Code Flow。 不支持使用 Implicit Flow 进行认证。

  2. JWT 提交到 MinIO Security Token Service (STS) AssumeRoleWithWebIdentity API 端点。

    MinIO 会根据已配置的 OIDC 提供方验证 JWT

    如果 JWT 有效,MinIO 会检查其中的 claim,该 claim 指定了要分配给已认证用户的一个或多个 策略 列表。MinIO 默认检查 policy claim。

  3. MinIO 在 STS API 响应中返回临时凭证,形式为 access key、secret key 和 session token。这些凭证的权限与 JWT claim 中指定的策略一致。

  4. 应用程序使用 STS 端点返回的临时凭证,在 MinIO 上执行已认证的 S3 操作。

MinIO 提供了一个示例 Go 应用 web-identity.go,用于处理完整登录流程。

识别 JWT Claim 值

MinIO 使用 OIDC 认证流程返回的 JWT token,识别要分配给已认证用户的具体策略。

你可以使用 JWT Debugging tool 对返回的 JWT token 进行解码,并验证用户属性中是否包含所需 claims。

有关 JWT claim 的更多信息,请参见 RFC 7519: JWT Claim

关于如何配置用户 claims,请参见你所选 OIDC 提供方的文档。

创建与 Claims 匹配的策略

使用 mc admin policy 命令创建与一个或多个 claim 值匹配的策略。

OIDC 策略变量

下表列出了用于授权 OIDC 管理用户 的受支持策略变量。

每个变量都对应认证用户 JWT token 中返回的一项 claim:

变量 说明
jwt:sub 返回用户的 sub claim。
jwt:iss 返回 ID token 中的 Issuer Identifier claim。
jwt:aud 返回 ID token 中的 Audience claim。
jwt:jti 返回客户端认证信息中的 JWT ID claim。
jwt:upn 返回客户端认证信息中的 User Principal Name claim。
jwt:name 返回用户的 name claim。
jwt:groups 返回用户的 groups claim。
jwt:given_name 返回用户的 given_name claim。
jwt:family_name 返回用户的 family_name claim。
jwt:middle_name 返回用户的 middle_name claim。
jwt:nickname 返回用户的 nickname claim。
jwt:preferred_username 返回用户的 preferred_username claim。
jwt:profile 返回用户的 profile claim。
jwt:picture 返回用户的 picture claim。
jwt:website 返回用户的 website claim。
jwt:email 返回用户的 email claim。
jwt:gender 返回用户的 gender claim。
jwt:birthdate 返回用户的 birthdate claim。
jwt:phone_number 返回用户的 phone_number claim。
jwt:address 返回用户的 address claim。
jwt:scope 返回用户的 scope claim。
jwt:client_id 返回用户的 client_id claim。

关于这些 scope 的更多信息,请参阅 OpenID Connect Core 1.0 文档。 你所选的 OIDC 提供方也可能有更具体的补充文档。

例如,以下策略使用变量将认证用户的 preferred_username 替换到 Resource 字段中, 使该用户只能访问与其用户名匹配的前缀:

{
"Version": "2012-10-17",
"Statement": [
      {
         "Action": ["s3:ListBucket"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket"],
         "Condition": {"StringLike": {"s3:prefix": ["${jwt:preferred_username}/*"]}}
      },
      {
         "Action": [
         "s3:GetObject",
         "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket/${jwt:preferred_username}/*"]
      }
   ]
}

MinIO 会将 Resource 字段中的 ${jwt:preferred_username} 变量, 替换为 JWT token 中 preferred_username 的值。 随后,MinIO 会评估该策略,并对请求的 API 和资源授予或撤销访问权限。

11.4 - 组管理

概述

用户 的集合。每个组 都可以分配一个或多个 策略, 这些策略会显式列出允许或拒绝组成员访问的操作和资源。

例如,考虑以下几个组。每个组都分配了一个 内置策略 或受支持的 策略操作。每个组还分配了一个或 多个用户。每个用户的完整权限集合由其 显式分配的权限 以及 从其所属各组继承的权限共同组成。 对于用户被分配或继承的策略中未显式允许的任何资源或操作,MinIO 默认都会 拒绝 访问。

策略

成员

Operations

finance 存储桶上的 readwrite
audit 存储桶上的 readonly

john.doe, jane.doe

Auditing

audit 存储桶上的 readonly

jen.doe, joe.doe

Admin

admin:*

greg.doe, jen.doe

组为具有相同访问模式和工作负载的用户之间管理共享权限提供了一种更简便的方法。 客户端 不能 使用组作为身份向 MinIO 部署进行认证。

mc admin group 命令支持在 MinIO 部署上创建和管理组。 有关用法示例,请参阅该命令的参考文档。

11.5 - Active Directory / LDAP 访问管理

MinIO 支持配置单个 Active Directory 或 LDAP (AD/LDAP) 服务,用于对用户身份进行外部管理。 启用 AD/LDAP 外部身份管理会禁用 MinIO 内部 IDP

对于由外部 AD/LDAP 提供方管理的身份,MinIO 会使用用户的 Distinguished Name,并尝试将其映射到现有的 策略

如果 AD/LDAP 配置中包含查询用户 AD/LDAP 组成员关系所需的设置,MinIO 还会 使用这些组的 Distinguished Name,并尝试将每一个映射到现有的 策略

默认情况下,MinIO 会拒绝访问所有未被用户已分配或继承的 策略 明确允许的操作或资源。 由 AD/LDAP 提供方管理的用户,必须在用户配置文件数据中指定所需策略。 如果没有任何策略与用户 DN 或组 DN 匹配,MinIO 会阻止该部署上对所有操作和资源的访问。

MinIO 用于认证用户并获取其组成员关系的具体 AD/LDAP 查询,是在 使用 Active Directory / LDAP 身份管理部署集群 时配置的。 本页介绍如何创建与可能返回的 Distinguished Name 相匹配的 MinIO 策略。

认证与授权流程

使用 Active Directory / LDAP 凭证的应用程序登录流程如下:

  1. 将 AD/LDAP 凭证提供给 MinIO Security Token Service (STS) AssumeRoleWithLDAPIdentity API 端点。

  2. MinIO 针对 AD/LDAP 服务器校验所提供的凭证。

  3. MinIO 检查是否存在名称与用户 Distinguished Name (DN) 匹配的 策略,并将该策略分配给已认证用户。

    如果配置为执行组查询,MinIO 还会查询该用户所属的 AD/LDAP 组列表。 MinIO 会检查是否存在名称与返回的组 DN 匹配的策略,并将该策略分配给 已认证用户。

  4. MinIO 会在 STS API 响应中返回临时凭证,其形式为 access key、 secret key 和 session token。这些凭证的权限与名称匹配已认证用户 DN 某个组 DN 的那些策略一致。

MinIO 提供了一个示例 Go 应用程序 ldap.go,用于处理完整的 登录流程。

AD/LDAP 用户也可以创建与其 AD/LDAP 用户 Distinguished Name 关联的 访问密钥。 访问密钥是长期有效的凭证,会继承父用户的权限。 父用户在创建访问密钥时还可以进一步限制这些权限。 使用以下方法之一创建新的访问密钥:

使用 mc admin user svcacct add 命令创建访问密钥。 将用户 Distinguished Name 指定为要关联访问密钥的用户名。

将策略映射到用户 DN

以下命令使用 mc idp ldap policy attach 将现有 MinIO 策略 关联到 AD/LDAP 用户 DN。

mc idp ldap policy attach myminio consoleAdmin \
  --user='cn=sisko,cn=users,dc=example,dc=com'

mc idp ldap policy attach myminio readwrite,diagnostics \
  --user='cn=dax,cn=users,dc=example,dc=com'
  • MinIO 会将 consoleAdmin 策略分配给 DN 匹配 cn=sisko,cn=users,dc=example,dc=com 的已认证用户, 从而授予其对 MinIO 服务器的完全访问权限。
  • MinIO 会将 readwritediagnostics 两个策略分配给 DN 匹配 cn=dax,cn=users,dc=example,dc=com 的已认证用户,从而授予其对 MinIO 服务器的一般读写访问权限,以及 诊断性管理操作的访问权限。
  • MinIO 不会为 DN 匹配 cn=quark,cn=users,dc=example,dc=com 的 已认证用户分配任何策略,并会拒绝其对所有 API 操作的访问。

将策略映射到组 DN

以下命令使用 mc idp ldap policy attach 将现有 MinIO 策略 关联到 AD/LDAP 组 DN。

mc idp ldap policy attach myminio consoleAdmin \
  --group='cn=ops,cn=groups,dc=example,dc=com'

mc idp ldap policy attach myminio diagnostics \
  --group='cn=engineering,cn=groups,dc=example,dc=com'
  • MinIO 会将 consoleAdmin 策略分配给任何属于 cn=ops,cn=groups,dc=example,dc=com AD/LDAP 组的认证用户,从而授予其对 MinIO 服务器的完全访问权限。
  • MinIO 会将 diagnostics 策略分配给任何属于 cn=engineering,cn=groups,dc=example,dc=com AD/LDAP 组的认证用户,从而授予其对 诊断性管理操作的访问权限。

11.6 - Silo 外部身份管理插件

概述

MinIO Identity Management Plugin 提供了一个 REST 接口,用于通过 Webhook 服务将认证委托给外部身份管理器。

启用后,客户端应用程序使用 AssumeRoleWithCustomToken STS API 扩展为 MinIO 生成访问令牌。 MinIO 通过向已配置的插件端点发起 POST 请求来验证该令牌,并根据返回的响应判断客户端的认证状态。

配置设置

你可以使用以下环境变量或配置设置来配置 MinIO Identity Management Plugin:

为部署中的每个 MinIO 服务器指定以下 environment variables

MINIO_IDENTITY_PLUGIN_URL="https://external-auth.example.net:8080/auth"
MINIO_IDENTITY_PLUGIN_ROLE_POLICY="consoleAdmin"

# All other envvars are optional
MINIO_IDENTITY_PLUGIN_TOKEN="Bearer TOKEN"
MINIO_IDENTITY_PLUGIN_ROLE_ID="external-auth-provider"
MINIO_IDENTITY_PLUGIN_COMMENT="External Identity Management using PROVIDER"

使用 mc admin config set 命令设置以下配置项:

mc admin config set identity_plugin \
   url="https://external-auth.example.net:8080/auth" \
   role_policy="consoleAdmin" \

   # All other config settings are optional
   token="Bearer TOKEN" \
   role_id="external-auth-provider" \
   comment="External Identity Management using PROVIDER"

认证与授权流程

应用程序的登录流程如下:

  1. 使用 AssumeRoleWithCustomToken API 发起 POST 请求。

    该请求包含一个令牌,供已配置的外部身份管理器用于认证客户端。

  2. MinIO 使用为 STS API 指定的令牌,向已配置的身份插件 URL 发起 POST 调用。

  3. 认证成功后,身份管理器返回一个 200 OK 响应,其 content-typeapplication/json,响应体结构如下:

    {
       "user": "<string>",
       "maxValiditySeconds": 3600,
       "claims": {"KEY": "VALUE", ...}
    }

    user

    所请求凭证的所有者

    maxValiditySeconds

    返回凭证允许的最大过期时长

    claims

    与所请求凭证关联的、由 "key": "value" 键值对组成的 claims JSON 字符串。 如果存在 expparentsub claims 对象,MinIO 会将其保留并忽略。

  4. MinIO 向 STS API 请求返回响应,其中包含可用于发起已认证请求的临时凭证。

如果身份管理器拒绝该认证请求,或在处理过程中发生其他错误,则响应 必须 返回 403 FORBIDDEN HTTP 状态码,content-typeapplication/json,响应体结构如下:

{
     "reason": "<string>"
}

"reason" 字段应包含返回 403 的原因。

创建与 Claims 匹配的策略

使用 mc admin policy 命令创建与一个或多个 claim 值匹配的策略。

11.7 - 访问管理

概述

MinIO 使用 基于策略的访问控制 (PBAC) 来定义已认证用户可访问的授权操作和资源。 每个策略描述一条或多条 actionsconditions,用于说明某个 usergroup 中用户的权限。

MinIO PBAC 在设计上兼容 AWS IAM 策略语法、结构和行为。 MinIO 文档会尽力覆盖 IAM 特定行为和功能。 若需要更完整的 AWS IAM 特定主题文档,请参考 IAM documentation

mc admin policy 命令支持在 MinIO 部署上创建和管理策略。 用法示例请参见命令参考。

基于标签的策略条件

说明

变更: RELEASE.2022-10-02T19-29-29Z

策略可以使用条件,将用户访问限制为仅能访问带有 特定标签 的对象。

对于选定操作,MinIO 支持基于标签的条件。当 API 路径在授权前加载目标对象元数据时,s3:ExistingObjectTag/<key> 读取对象上已经存储的标签。s3:RequestObjectTag/<key>s3:RequestObjectTagKeys 是客户端提供的请求值,不能证明对象已经具有这些标签。PutObjectCreateMultipartUploadPutObjectTagging 会把它们显式绑定到处理器实际消费的标签输入;其他 action 路径为了兼容仍保留历史 X-Amz-Tagging Header 映射,因此请求标签条件只应在 API 确实消费标签时使用。

存储桶标签与对象标签不是同一类数据。PutBucketTagging 不会从 XML 正文填充 s3:RequestObjectTag* 条件键。

内置策略

MinIO 提供以下内置策略,可分配给 usersgroups

consoleAdmin

userpolicy

授予对 MinIO 部署上所有资源执行全部 S3 和管理 API 操作的完整访问权限。 等价于以下 action 集合:

readonly

userpolicy

授予对 MinIO 部署上任意对象的只读权限。 GET 操作 必须 作用于某个具体对象,且不要求具备任何列举权限。 等价于以下 action 集合:

例如,该策略专门支持对特定路径下对象执行 GET 操作(例如 GET play/mybucket/object.file),例如:

有意排除列举权限,因为典型使用场景并不希望“只读”角色对对象存储资源具有完整可发现性 (列出所有存储桶和对象)。

readwrite

userpolicy

授予对 MinIO 服务器上所有存储桶和对象的读写权限。 等价于 s3:*

diagnostics

userpolicy

授予在 MinIO 部署上执行诊断操作的权限。 具体包括以下 action:

writeonly

userpolicy

授予对 MinIO 部署中任意命名空间(存储桶及对象路径)的只写权限。 PUT 操作 必须 作用于某个具体对象位置,且不要求具备任何列举权限。 等价于 s3:PutObject action。

使用 mc admin policy attach 将策略关联到 MinIO 部署上的用户或组。

例如,考虑下表中的用户。每个用户都被分配了一个 内置策略 或某个受支持的 action。该表描述了客户端以对应用户身份完成认证后可执行的一部分操作:

用户

策略

操作

Operations

finance 存储桶上的 readwrite
audit 存储桶上的 readonly
finance 存储桶执行 PUTGET
audit 存储桶执行 GET

Auditing

audit 存储桶上的 readonly

audit 存储桶执行 GET

Admin

admin:*

所有 mc admin 命令。

每个用户只能访问内置角色 显式 授予的那些资源和操作。 默认情况下,MinIO 会拒绝访问任何其他资源或 action。

说明

Deny overrides Allow

MinIO 遵循 IAM 策略求值规则,即在同一操作/资源上,Deny 规则会覆盖 Allow 规则。例如,如果某个用户被显式分配的策略对某个操作/资源包含 Allow 规则,而其所属某个组被分配的策略对同一操作/资源包含 Deny 规则, 则 MinIO 只会应用 Deny 规则。

有关 IAM 策略求值逻辑的更多信息,请参见 IAM 文档中的 Determining Whether a Request is Allowed or Denied Within an Account

策略文档结构

MinIO 策略文档使用与 AWS IAM Policy 文档相同的模式。

以下示例文档为在 MinIO 部署中创建自定义策略提供了模板。 有关 IAM 策略元素的更完整文档,请参见 IAM JSON Policy Elements Reference

任意单个策略文档的最大大小为 20KiB。 可附加到用户或组的策略文档数量没有限制。

{
   "Version" : "2012-10-17",
   "Statement" : [
      {
         "Effect" : "Allow",
         "Action" : [ "s3:<ActionName>", ... ],
         "Resource" : "arn:aws:s3:::*",
         "Condition" : { ... }
      },
      {
         "Effect" : "Deny",
         "Action" : [ "s3:<ActionName>", ... ],
         "Resource" : "arn:aws:s3:::*",
         "Condition" : { ... }
      }
   ]
}
  • 对于 Statement.Action 数组,指定一个或多个 受支持的 S3 API 操作

  • 对于 Statement.Resource 键,指定要对策略进行限制的存储桶或存储桶前缀。 可以按照 S3 Resource Spec 使用 *? 通配符。

    * 通配符可能会基于 模式匹配,导致策略被意外应用到多个存储桶或前缀。 例如,arn:aws:s3:::data* 会匹配存储桶 datadata_privatedata_internal。 如果资源键仅指定 *,则该策略会应用到部署上的所有存储桶和前缀。

    对象模式与存储桶 ARN 不可互换,参见存储桶资源与对象资源

  • 对于 Statement.Condition 键,可以指定一个或多个 受支持的 Conditions

存储桶资源与对象资源

一个资源 ARN 要么指代存储桶本身,要么指代桶内的对象,两种形式授权的是不同的操作:

  • arn:aws:s3:::mybucket 指代 存储桶本身,授权 ListBucketPutBucketPolicy 这类桶级操作。
  • arn:aws:s3:::mybucket/* 指代 桶内的对象,授权 GetObjectPutObject 这类对象操作。

当一个主体两者都需要时,就把两者都授予——这也是"既管理存储桶、又管理其内容"的策略的惯例写法:

"Resource": ["arn:aws:s3:::mybucket", "arn:aws:s3:::mybucket/*"]
警告

十二个桶级写操作需要存储桶 ARN

arn:aws:s3:::mybucket/* 这样的对象级模式 不会 授权以下动作,即使语句授予的是 s3:*

PutBucketPolicyDeleteBucketPolicyPutBucketObjectLockConfigurationPutBucketVersioningPutReplicationConfigurationPutLifecycleConfigurationDeleteBucketForceDeleteBucketPutBucketCorsDeleteBucketCorsPutBucketQOSPutInventoryConfiguration

这些动作中的每一个,都能让调用者拿到对象级授权本来给不了的东西——把访问权发给别的主体、击穿专门针对写权限持有者的保护、在授权被吊销后仍持续生效,或者销毁存储桶实体本身。要授予它们,请在对象模式旁边补上裸的存储桶 ARN。

早期版本也会通过对象模式授权这些动作,因为桶级请求被拿去与字符串 mybucket/ 匹配,而 mybucket/* 同样命中它。那是一种过度授予,参见上游 minio/minio#20449。在调整策略期间,可将 MINIO_API_LEGACY_BUCKET_RESOURCE_MATCH 设为 on 恢复此前的行为。

其余行为一律不变。ListBucketGetBucketLocation、各类存储桶配置 读取 以及 CreateBucket 仍然可以通过对象模式获得授权,因此按这种写法配置的列举与供应流程照常工作。Deny 语句与 NotResource 排除的匹配方式一如既往,所以任何写在 mybucket/* 上的限制都不会被削弱。内置的 readwritereadonlywriteonlydiagnostics 策略使用 arn:aws:s3:::*,不受影响。

受支持的 S3 策略 Action

MinIO 策略文档支持 IAM S3 Action keys 的一个子集。 本节还包括特定 action 在通用受支持键之外额外支持的任何 condition keys

以下 action 用于控制常见 S3 操作的访问。 其余小节记录更高级的 S3 操作所对应的 action:

s3:*

policy-action

选择器,用于匹配 所有 MinIO S3 操作。 将该 action 应用于某个资源后,用户即可对该资源执行 任意 S3 操作。

s3:CreateBucket

policy-action

控制对 CreateBucket S3 API 操作的访问。

s3:DeleteBucket

policy-action

控制对 DeleteBucket S3 API 操作的访问。

s3:ForceDeleteBucket

policy-action

控制对带有 x-minio-force-delete 标志的 DeleteBucket S3 API 操作的访问。 删除非空存储桶时需要此权限。

s3:GetBucketLocation

policy-action

控制对 GetBucketLocation S3 API 操作的访问。

s3:ListAllMyBuckets

policy-action

控制对 ListBuckets S3 API 操作的访问。

s3:DeleteObject

policy-action

控制对 DeleteObject S3 API 操作的访问。

支持以下额外条件键

s3:versionid

s3:GetObject

policy-action

控制对 GetObject S3 API 操作的访问。

支持以下附加 condition keys

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:x-amz-server-side-encryption-aws-kms-key-id
s3:ExistingObjectTag/<key>
s3:versionid

s3:GetObjectAttributes

policy-action

控制对 GetObjectAttributes S3 API 操作的访问。

策略解析器允许此 action 使用以下条件键:

s3:ExistingObjectTag/<key>

但当前处理器在加载对象元数据前完成授权,因此该操作求值时此条件值缺失。

s3:GetObjectVersionAttributes

policy-action

控制对带版本对象执行 GetObjectAttributes S3 API 操作的访问。

支持以下额外条件键

s3:versionid
s3:ExistingObjectTag/<key>

版本 ID 来自请求查询参数。当前处理器在加载对象元数据前完成授权,因此策略解析器虽然允许 s3:ExistingObjectTag/<key>,该操作求值时此值仍然缺失。

s3:RestoreObject

policy-action

控制对 RestoreObject S3 API 操作的访问。

s3:ListBucket

policy-action

控制对 ListObjectsV2 S3 API 操作的访问。

支持以下附加 condition keys

s3:prefix
s3:delimiter
s3:max-keys

s3:PutObject

policy-action

控制对 PutObject S3 API 操作的访问。

支持以下附加 condition keys

s3:x-amz-copy-source
s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:x-amz-server-side-encryption-aws-kms-key-id
s3:x-amz-metadata-directive
s3:x-amz-storage-class
s3:versionid
s3:object-lock-retain-until-date
s3:object-lock-mode
s3:object-lock-legal-hold
s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>

s3:PutObjectTagging

policy-action

控制对 PutObjectTagging S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>
s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>

s3:GetObjectTagging

policy-action

控制对 GetObjectTagging S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

s3:DeleteObjectTagging

policy-action

控制对 DeleteObjectTagging S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

存储桶配置

s3:GetBucketPolicy

policy-action

控制对 GetBucketPolicy S3 API 操作的访问。

s3:PutBucketPolicy

policy-action

控制对 PutBucketPolicy S3 API 操作的访问。

s3:DeleteBucketPolicy

policy-action

控制对 DeleteBucketPolicy S3 API 操作的访问。

s3:GetBucketTagging

policy-action

控制对 GetBucketTagging S3 API 操作的访问。

s3:PutBucketTagging

policy-action

控制对 PutBucketTagging S3 API 操作的访问。

策略解析器出于兼容性保留以下条件键:

s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>

处理器 不会 从存储桶标签 XML 正文填充这些键;只有历史兼容的客户端 X-Amz-Tagging Header 回退可以填充它们,而这个 Header 并不能约束最终从正文写入的存储桶标签。不要用这些键强制约束 PutBucketTagging 请求的内容。

s3:GetBucketPolicyStatus

policy-action

控制对 GetBucketPolicyStatus S3 API 操作的访问。

分段上传

s3:AbortMultipartUpload

policy-action

控制对 AbortMultipartUpload S3 API 操作的访问。

s3:ListMultipartUploadParts

policy-action

控制对 ListParts S3 API 操作的访问。

s3:ListBucketMultipartUploads

policy-action

控制对 ListMultipartUploads S3 API 操作的访问。

版本控制与保留

s3:PutBucketVersioning

policy-action

控制对 PutBucketVersioning S3 API 操作的访问。

s3:GetBucketVersioning

policy-action

控制对 GetBucketVersioning S3 API 操作的访问。

s3:DeleteObjectVersion

policy-action

控制对 DeleteObjectVersion S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid

s3:ListBucketVersions

policy-action

控制对 ListBucketVersions S3 API 操作的访问。

支持以下附加 condition keys

s3:prefix
s3:delimiter
s3:max-keys

s3:PutObjectVersionTagging

policy-action

控制对 PutObjectVersionTagging S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>
s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>

s3:GetObjectVersionTagging

policy-action

控制对 GetObjectVersionTagging S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

s3:DeleteObjectVersionTagging

policy-action

控制对 DeleteObjectVersionTagging S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

s3:GetObjectVersion

policy-action

控制对 GetObjectVersion S3 API 操作的访问。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

s3:BypassGovernanceRetention

policy-action

控制对处于 GOVERNANCE 保留模式下锁定对象的以下 S3 API 操作的访问:

  • s3:PutObjectRetention
  • s3:PutObject
  • s3:DeleteObject

更多信息请参见 S3 文档中的 s3:BypassGovernanceRetention

支持以下附加 condition keys

s3:versionid
s3:object-lock-remaining-retention-days
s3:object-lock-retain-until-date
s3:object-lock-mode
s3:object-lock-legal-hold
s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>

s3:PutObjectRetention

policy-action

控制对 PutObjectRetention S3 API 操作的访问。

对于任何指定了 保留元数据PutObject 操作,都需要此权限。

支持以下附加 condition keys

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:x-amz-server-side-encryption-aws-kms-key-id
s3:object-lock-remaining-retention-days
s3:object-lock-retain-until-date
s3:object-lock-mode
s3:versionid

s3:GetObjectRetention

policy-action

控制对 GetObjectRetention S3 API 操作的访问。

若要在 GetObjectHeadObject 操作的响应中包含 对象锁定元数据,则需要此权限。

支持以下附加 condition keys

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:x-amz-server-side-encryption-aws-kms-key-id
s3:versionid

s3:GetObjectLegalHold

policy-action

控制对 GetObjectLegalHold S3 API 操作的访问。

若要在 GetObjectHeadObject 操作的响应中包含 对象锁定元数据,则需要此权限。

s3:PutObjectLegalHold

policy-action

控制对 PutObjectLegalHold S3 API 操作的访问。

对于任何指定了 legal hold 元数据PutObject 操作,都需要此权限。

支持以下附加 condition keys

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:x-amz-server-side-encryption-aws-kms-key-id
s3:object-lock-legal-hold
s3:versionid

s3:GetBucketObjectLockConfiguration

policy-action

控制对 GetObjectLockConfiguration S3 API 操作的访问。

s3:PutBucketObjectLockConfiguration

policy-action

控制对 PutObjectLockConfiguration S3 API 操作的访问。

存储桶通知

s3:GetBucketNotification

policy-action

控制对 GetBucketNotification S3 API 操作的访问。

s3:PutBucketNotification

policy-action

控制对 PutBucketNotification S3 API 操作的访问。

s3:ListenNotification

policy-action

用于控制与 MinIO 存储桶通知 相关 API 操作的 MinIO 扩展。

此 action 用于其他兼容 S3 的服务。

s3:ListenBucketNotification

policy-action

用于控制与 MinIO 存储桶通知 相关 API 操作的 MinIO 扩展。

此 action 用于其他兼容 S3 的服务。

对象生命周期管理

s3:PutLifecycleConfiguration

policy-action

控制对 PutLifecycleConfiguration S3 API 操作的访问。

s3:GetLifecycleConfiguration

policy-action

控制对 GetLifecycleConfiguration S3 API 操作的访问。

对象加密

s3:PutEncryptionConfiguration

policy-action

控制对 PutEncryptionConfiguration S3 API 操作的访问。

s3:GetEncryptionConfiguration

policy-action

控制对 GetEncryptionConfiguration S3 API 操作的访问。

存储桶复制

s3:GetReplicationConfiguration

policy-action

控制对 GetBucketReplication S3 API 操作的访问。

s3:PutReplicationConfiguration

policy-action

控制对 PutBucketReplication S3 API 操作的访问。

s3:ReplicateObject

policy-action

用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。

MinIO 服务器端复制需要此权限。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

s3:ReplicateDelete

policy-action

用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。

作为 MinIO 服务器端复制的一部分,在同步 删除操作 时需要此权限。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

s3:ReplicateTags

policy-action

用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。

MinIO 服务器端复制需要此权限。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

s3:GetObjectVersionForReplication

policy-action

用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。

MinIO 服务器端复制需要此权限。

支持以下附加 condition keys

s3:versionid
s3:ExistingObjectTag/<key>

受支持的 S3 策略条件键

MinIO 策略文档支持 IAM 条件语句

每个条件元素都由 operators 和条件键组成。MinIO 支持 IAM 条件键的一个子集。 有关任何列出条件键的完整信息,请参见 IAM Condition Element Documentation

对于所有受支持的 actions,MinIO 支持以下条件键:

  • aws:Referer
  • aws:SourceIp
  • aws:UserAgent
  • aws:SecureTransport
  • aws:CurrentTime
  • aws:EpochTime
  • aws:PrincipalType
  • aws:userid
  • aws:username
  • s3:x-amz-content-sha256
  • s3:signatureAge
注意

警告

aws:Refereraws:SourceIpaws:UserAgent 键可能被伪造,因此存在潜在安全风险。aws:SourceIp 的可信程度取决于负责提供或覆写转发请求头的代理边界。MinIO 建议仅将这些条件键作为辅助安全措施用于 拒绝 访问。

绝不要 仅凭这三个键授予访问权限。

条件值来源与优先级

警告

尚未发布的服务端行为(截至 2026-08-03)

下表描述配套服务端改动 1a6d5b415 之后的行为。该改动目前仅存在于本地 pgsty/minio 分支:尚未进入公开 origin/master,最新公开服务端版本 RELEASE.2026-08-04T00-00-00Z 也不包含它。已发布构建仍保留此前行为。在依赖这些优先级保证前,请先核对服务端发布说明。

Silo 按请求字段的实际语义来源构造条件值映射,而不是把所有请求头与查询参数混为一谈。原始请求头或查询参数即使与内部条件键同名,也不能覆盖服务端计算出的值,或伪造服务端没有提供的值。

条件键类别 策略求值使用的来源 优先级与兼容性
身份、时间、传输、认证、s3:versionids3:LocationConstraint、LDAP 与 JWT 值 已认证的凭据与声明、服务端时钟与传输状态,或该操作解析出的 API 字段 同名原始请求头与查询参数不能增加或覆盖这些值。aws:Refereraws:UserAgent 按定义仍由客户端控制;aws:SourceIp 的限制见上方警告。
s3:signatureAge SigV4 预签名请求校验器计算出的已过去时间 只有通过校验的 SigV4 预签名请求才有该值;其他请求类型中客户端提供的 x-amz-signature-age Header 会被忽略。
s3:prefixs3:delimiters3:max-keys 仅查询字符串 同名请求头不会参与这些列表条件的求值。
s3:x-amz-content-sha256s3:x-amz-copy-sources3:x-amz-metadata-directive 与服务端加密条件键 仅对应的 HTTP 请求头 查询字符串中的替代值不能满足这些条件。尤其是预签名请求校验所使用的 X-Amz-Content-Sha256 查询值,不会作为策略条件值暴露。
s3:x-amz-storage-class X-Amz-Storage-Class 请求头,兼容回退到查询字符串 只要请求头存在就优先,即使它是空值。查询形式继续保留,以兼容现有上传路径。
s3:RequestObjectTag/<key>s3:RequestObjectTagKeys 默认来自 X-Amz-Tagging Header;标签感知处理器可显式传入实际标签集 PutObjectCreateMultipartUpload 从 Header 或兼容查询形式取值,Header 存在时优先;PutObjectTagging 使用解析后的 XML 请求正文。无关操作会忽略 query 标签。对于策略映射允许这些键的 action,历史 Header 回退仍为兼容性保留,因此在上述三个处理器之外,请求标签条件本身不能证明该操作会消费或持久化这些标签。
s3:ExistingObjectTag/<key> 从目标对象存储状态加载的标签 请求头与查询参数永远不能提供已有对象标签。只有在授权前加载这些标签的 API 路径上才有该值,包括对象 GET/HEAD 与对象标签处理器。
对象锁条件键 对象锁请求头,或处理器计算出的保留值 查询字符串中的同名字段会被忽略。

如果某条 API 路径没有加载或计算上述来源,相应条件键就是缺失的,其结果由所用策略操作符的语义决定。不要因为某个动作列出了条件键,就假定服务端一定会为它合成一个值。

对于特定 S3 action 支持的其他键,请参见该 action 的参考文档。

MinIO 扩展条件键

MinIO 在 S3 标准条件键基础上扩展了以下键:

sts:DurationSeconds

说明

新增: MinIO

SERVER RELEASE.2024-02-06T21-36-22Z

指定一个以秒为单位的时间,用于限制由 AssumeRoleWithWebIdentity 生成的 所有 Security Token Service 凭证的有效期。

此值会覆盖客户端指定的 DurationSeconds 字段。

例如:

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Effect": "Allow",
            "Action": [
               "sts:AssumeRoleWithWebIdentity"
            ],
            "Condition": {
               "NumericLessThanEquals": {
                  "sts:DurationSeconds": "300"
               }
            }
      }
   ]
}

mc admin 策略 Action 键

MinIO 支持以下 action,用于为 mc admin 操作定义策略。 这些 action 对 MinIO 部署有效, 用于其他兼容 S3 的服务:

admin:*

policy-action

所有 admin action 键的选择器。

admin:Heal

policy-action

允许执行 heal 命令

admin:StorageInfo

policy-action

允许列出服务器信息

admin:DataUsageInfo

policy-action

允许列出数据使用信息

admin:TopLocksInfo

policy-action

允许列出 top locks

admin:Profiling

policy-action

允许 profiling

admin:ServerTrace

policy-action

允许列出 server trace

admin:ConsoleLog

policy-action

允许在终端列出 console log

admin:KMSCreateKey

policy-action

允许创建新的 KMS 主密钥

虽然此选项仍受支持,但更推荐使用 kms:CreateKey

admin:KMSKeyStatus

policy-action

允许获取 KMS 密钥状态

虽然此选项仍受支持,但更推荐使用 kms:KeyStatus

admin:ServerInfo

policy-action

允许列出服务器信息

admin:OBDInfo

policy-action

允许获取集群 on-board diagnostics

admin:ServerUpdate

policy-action

允许更新 MinIO 二进制文件

admin:ServiceRestart

policy-action

允许重启 MinIO 服务。

admin:ServiceStop

policy-action

允许停止 MinIO 服务。

admin:ConfigUpdate

policy-action

允许管理 MinIO 配置

admin:CreateUser

policy-action

允许创建 MinIO 用户

admin:DeleteUser

policy-action

允许删除 MinIO 用户

admin:ListUsers

policy-action

允许列出用户

admin:EnableUser

policy-action

允许启用用户

admin:DisableUser

policy-action

允许禁用用户

admin:GetUser

policy-action

允许对用户信息执行 GET

admin:AddUserToGroup

policy-action

允许将用户添加到组

admin:RemoveUserFromGroup

policy-action

允许将用户从组中移除

admin:GetGroup

policy-action

允许获取组信息

admin:ListGroups

policy-action

允许列出组

admin:EnableGroup

policy-action

允许启用组

admin:DisableGroup

policy-action

允许禁用组

admin:CreatePolicy

policy-action

允许创建策略

admin:DeletePolicy

policy-action

允许删除策略

admin:GetPolicy

policy-action

允许获取策略

admin:AttachUserOrGroupPolicy

policy-action

允许将策略附加到用户/组

admin:ListUserPolicies

policy-action

允许列出用户策略

admin:CreateServiceAccount

policy-action

允许创建 MinIO Access Key

admin:UpdateServiceAccount

policy-action

允许更新 MinIO Access Key

admin:RemoveServiceAccount

policy-action

允许删除 MinIO Access Key

admin:ListServiceAccounts

policy-action

允许列出 MinIO Access Key

admin:SetBucketQuota

policy-action

允许设置存储桶配额

admin:GetBucketQuota

policy-action

允许获取存储桶配额

admin:SetBucketTarget

policy-action

允许设置存储桶目标

admin:GetBucketTarget

policy-action

允许获取存储桶目标

admin:SetTier

policy-action

允许使用 mc ilm tier 命令创建和修改远程存储层。

admin:ListTier

policy-action

允许使用 mc ilm tier 命令列出已配置的远程存储层。

admin:BandwidthMonitor

policy-action

允许获取与当前带宽消耗相关的指标。

admin:Prometheus

policy-action

允许访问 MinIO metrics。 仅当 MinIO 要求采集指标时进行认证才需要此权限。

admin:ListBatchJobs

policy-action

允许访问并列出活动中的批处理作业。

admin:DescribeBatchJob

policy-action

允许访问并查看正在运行的批处理作业的定义详情。

admin:StartBatchJob

policy-action

允许用户启动批处理作业运行。

admin:CancelBatchJob

policy-action

允许用户停止当前正在执行的批处理作业。

admin:Rebalance

policy-action

允许访问并启动、查询或停止跨不同可用存储空间池的对象重平衡。

KMS 策略 action 键

MinIO 支持通过策略限制密钥管理服务 (KMS) action。

可以在策略中使用以下任一 KMS action 来限制 KMS 活动:

kms:Status

policy-action

检查 KMS 状态。

kms:Metrics

policy-action

获取 Prometheus 格式指标。

kms:API

policy-action

列出受支持的 API 端点。

kms:Version

policy-action

获取 KMS 版本。

kms:CreateKey

policy-action

创建新的 KMS 密钥。

kms:ListKeys

policy-action

获取现有 KMS 密钥列表。

kms:KeyStatus

policy-action

获取指定 KMS 密钥的状态。

若要选择所有可用的 kms 策略 action,可使用 kms:*

说明

变更: RELEASE.2024-07-16T23-46-41Z

KMS action 可以按资源或资源前缀进行限制。 可以使用通配符 * 将 KMS action 策略应用到所有匹配该前缀的资源。

例如,以下策略文档允许用户列出密钥、创建新密钥,并检查任何以 keys-abc-myuser- 开头资源上的密钥状态。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateKey",
                "kms:KeyStatus",
                "kms:ListKeys"
            ],
            "Resource": [
                "arn:minio:kms:::keys-abc-*",
                "arn:minio:kms:::myuser-*"
            ]
        }
    ]
}

mc admin 策略条件键

MinIO 支持以下条件,用于为 mc admin actions 定义策略。

  • aws:Referer
  • aws:SourceIp
  • aws:UserAgent
  • aws:SecureTransport
  • aws:CurrentTime
  • aws:EpochTime

有关任何列出条件键的完整信息,请参见 IAM Condition Element Documentation

策略变量

MinIO 支持使用策略变量,将来自已认证用户和/或操作的上下文自动替换到分配给该用户的一个或多个策略中。 使用 ${POLICYVARIABLE} 格式在策略的 ConditionResource 定义中指定变量。 MinIO 策略变量的工作方式类似于 AWS IAM policy elements: Variables and tags

每种 MinIO identity provider 都支持其各自的一组策略变量:

MinIO 策略变量

下表列出了用于授权 MinIO-managed users 的推荐策略变量:

变量 说明
aws:referrer 已认证 API 调用的 HTTP 头中的 referrer。
aws:SourceIp 已认证 API 调用的 HTTP 头中的源 IP。
aws:username 与已认证 API 调用关联的用户名。

例如,以下策略使用变量将已认证用户的用户名替换到 Resource 字段中,使该用户只能访问与其用户名匹配的那些前缀:

{
"Version": "2012-10-17",
"Statement": [
      {
         "Action": ["s3:ListBucket"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket"],
         "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
      },
      {
         "Action": [
         "s3:GetObject",
         "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
      }
   ]
}

MinIO 会将 Resource 字段中的 ${aws:username} 变量替换为用户名。 随后 MinIO 对策略进行求值,并授予或撤销对所请求 API 和资源的访问。

OpenID 策略变量

下表列出了用于授权 OIDC 管理用户 的受支持策略变量。

每个变量都对应认证用户 JWT token 中返回的一项 claim:

变量 说明
jwt:sub 返回用户的 sub claim。
jwt:iss 返回 ID token 中的 Issuer Identifier claim。
jwt:aud 返回 ID token 中的 Audience claim。
jwt:jti 返回客户端认证信息中的 JWT ID claim。
jwt:upn 返回客户端认证信息中的 User Principal Name claim。
jwt:name 返回用户的 name claim。
jwt:groups 返回用户的 groups claim。
jwt:given_name 返回用户的 given_name claim。
jwt:family_name 返回用户的 family_name claim。
jwt:middle_name 返回用户的 middle_name claim。
jwt:nickname 返回用户的 nickname claim。
jwt:preferred_username 返回用户的 preferred_username claim。
jwt:profile 返回用户的 profile claim。
jwt:picture 返回用户的 picture claim。
jwt:website 返回用户的 website claim。
jwt:email 返回用户的 email claim。
jwt:gender 返回用户的 gender claim。
jwt:birthdate 返回用户的 birthdate claim。
jwt:phone_number 返回用户的 phone_number claim。
jwt:address 返回用户的 address claim。
jwt:scope 返回用户的 scope claim。
jwt:client_id 返回用户的 client_id claim。

关于这些 scope 的更多信息,请参阅 OpenID Connect Core 1.0 文档。 你所选的 OIDC 提供方也可能有更具体的补充文档。

例如,以下策略使用变量将认证用户的 preferred_username 替换到 Resource 字段中, 使该用户只能访问与其用户名匹配的前缀:

{
"Version": "2012-10-17",
"Statement": [
      {
         "Action": ["s3:ListBucket"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket"],
         "Condition": {"StringLike": {"s3:prefix": ["${jwt:preferred_username}/*"]}}
      },
      {
         "Action": [
         "s3:GetObject",
         "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket/${jwt:preferred_username}/*"]
      }
   ]
}

MinIO 会将 Resource 字段中的 ${jwt:preferred_username} 变量, 替换为 JWT token 中 preferred_username 的值。 随后,MinIO 会评估该策略,并对请求的 API 和资源授予或撤销访问权限。

Active Directory / LDAP 策略变量

下表列出了用于授权 AD/LDAP users 的受支持策略变量:

变量

说明

ldap:username

已认证用户的简单用户名(name)。

这不同于用户的 DistinguishedName 或 CommonName。

ldap:user

已认证用户使用的 Distinguished Name。

ldap:groups

已认证用户的组 Distinguished Name。

例如,以下策略使用变量将已认证用户的 name 替换到 Resource 字段中,使该用户只能访问与其名称匹配的那些前缀:

{
"Version": "2012-10-17",
"Statement": [
      {
         "Action": ["s3:ListBucket"],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket"],
         "Condition": {"StringLike": {"s3:prefix": ["${ldap:username}/*"]}}
      },
      {
         "Action": [
         "s3:GetObject",
         "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": ["arn:aws:s3:::mybucket/${ldap:username}/*"]
      }
   ]
}

MinIO 会将 Resource 字段中的 ${ldap:username} 变量替换为已认证用户的 name 值。 随后 MinIO 对策略进行求值,并授予或撤销对所请求 API 和资源的访问。

11.8 - Silo 外部访问管理插件

概述

MinIO Access Management Plugin 提供了一个 REST 接口,可通过 Webhook 服务将授权流程卸载到外部系统。

启用后,MinIO 会将每次 API 调用的请求及凭证详情发送到已配置的外部 HTTP(S) 端点,并查找 ALLOWDENY 响应。 因此,MinIO 可以将访问管理委托给外部系统,而不是依赖 S3 基于策略的访问控制

配置设置

你可以使用以下环境变量或配置设置来配置 MinIO 外部访问管理插件。

为部署中的每个 MinIO 服务器指定以下 环境变量

MINIO_POLICY_PLUGIN_URL="https://external-authz.example.net:8080/authz"

# All other envvars are optional
MINIO_POLICY_PLUGIN_AUTH_TOKEN="Bearer TOKEN"
MINIO_POLICY_PLUGIN_ENABLE_HTTP2="OFF"
MINIO_POLICY_PLUGIN_COMMENT="External Access Management using PROVIDER"

使用 mc admin config set 命令设置以下配置项:

mc admin config set policy_plugin \
   url="https://external-authz.example.net:8080/authz" \

   # All other config settings are optional
   auth_token="Bearer TOKEN" \
   enable_http2="off" \
   comment="External Access Management using PROVIDER"

认证与授权流程

应用程序的登录流程如下:

  1. 客户端在执行 API 调用时携带认证信息
  2. 已配置的身份管理器对客户端进行认证
  3. MinIO 向已配置的访问管理插件 URL 发起 POST 调用,其中包含该 API 调用的上下文和认证数据
  4. 授权成功时,访问管理器会返回 200 OK 响应,其 JSON 响应体格式为 result true"result" : { "allow" : true }

如果访问管理器拒绝该授权请求,MinIO 会自动拦截并拒绝该 API 调用。

请求体示例

以下 JSON 展示了发送到已配置访问管理器 Webhook 的 POST 请求体示例。

{
   "input": {
      "account": "minio",
      "groups": null,
      "action": "s3:ListBucket",
      "bucket": "test",
      "conditions": {
         "Authorization": [
         "AWS4-HMAC-SHA256 Credential=minio/20220507/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=62012db6c47d697620cf6c68f0f45f6e34894589a53ab1faf6dc94338468c78a"
         ],
         "CurrentTime": [ "2022-05-07T18:31:41Z" ],
         "Delimiter": [ "/" ],
         "EpochTime": [
         "1651948301"
         ],
         "Prefix": [ "" ],
         "Referer": [ "" ],
         "SecureTransport": [ "false" ],
         "SourceIp": [ "127.0.0.1" ],
         "User-Agent": [ "MinIO (linux; amd64) minio-go/v7.0.24 mc/DEVELOPMENT.2022-04-20T23-07-53Z" ],
         "UserAgent": [ "MinIO (linux; amd64) minio-go/v7.0.24 mc/DEVELOPMENT.2022-04-20T23-07-53Z" ],
         "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ],
         "X-Amz-Date": [ "20220507T183141Z" ],
         "authType": [ "REST-HEADER" ],
         "principaltype": [ "Account" ],
         "signatureversion": [ "AWS4-HMAC-SHA256" ],
         "userid": [ "minio" ],
         "username": [ "minio" ],
         "versionid": [ "" ]
      },
      "owner": true,
      "object": "",
      "claims": {},
      "denyOnly": false
   }
}

响应体示例

MinIO 要求 Access Management 服务返回的响应体满足以下两种格式之一:

{ "result" : true }

{ "result" : { "allow" : true } }

12 - 对象的服务器端加密

MinIO 服务器端加密(SSE)在写入操作期间保护对象,使客户端能够利用服务器的处理能力在存储层保障对象安全(静态加密)。 SSE 还为与安全锁定和擦除相关的监管与合规要求提供关键能力。

MinIO SSE 使用 MinIO Key Encryption Service (KES) 和外部密钥管理服务(KMS)来大规模执行安全的加密操作。 MinIO 也支持客户端管理的密钥管理模式,由应用程序全权负责创建和管理供 MinIO SSE 使用的加密密钥。

MinIO SSE 在功能和 API 上与 AWS Server-Side Encryption 兼容,并支持以下加密策略:

MinIO 支持使用存储在外部 KMS 上的特定外部密钥(EK),为写入某个存储桶的所有对象启用自动 SSE-KMS 加密。 客户端可以在写入操作中指定显式密钥,以覆盖存储桶默认的 EK

对于未启用自动 SSE-KMS 加密的存储桶,客户端也可以在写入操作时指定一个 EK

MinIO 会在启用服务器端加密时对后端数据进行加密。 SSE-KMS 加密一旦启用便无法禁用。

与 SSE-S3 和 SSE-C 相比,SSE-KMS 提供更细粒度且可定制的加密能力,因此更推荐使用这种方式,而不是其他受支持的加密方法。

如需在本地(非生产)MinIO 部署中启用 SSE-KMS 的教程,请参阅 快速开始。 对于生产环境的 MinIO 部署,请使用以下指南之一:

MinIO 支持使用存储在外部 KMS 上的一个 EK,为写入某个存储桶的所有对象 启用自动 SSE-S3 加密。MinIO SSE-S3 在整个部署范围内仅支持 一个 EK

对于未启用自动 SSE-S3 加密的存储桶,客户端也可以在写入操作中请求 SSE 加密。

MinIO 会在启用服务器端加密时对后端数据进行加密。 SSE-KMS 加密一旦启用便无法禁用。

如需在本地(非生产)MinIO 部署中启用 SSE-s3 的教程,请参阅 快速开始。对于生产环境的 MinIO 部署,请使用以下指南之一:

客户端在对象写入操作中指定一个 EK。 MinIO 使用指定的 EK 执行 SSE-S3。

SSE-C 不支持存储桶默认加密设置,并要求客户端执行所有密钥管理操作。

MinIO SSE 需要启用 网络加密(TLS)

安全擦除与锁定

MinIO 需要访问用于 SSE 操作的加密密钥(EK)以及 外部密钥管理系统 (KMS)才能解密对象。你可以利用这一依赖关系,通过禁用对用于加密的 EK 或 KMS 的访问,来安全地擦除对象并锁定对其的访问。

常见策略包括但不限于:

  • Seal KMS 使 MinIO Server 无法再访问它。这样会锁定所有由存储在 KMS 上的任意 EK 保护的 SSE-KMS 或 SSE-S3 加密对象。只要 KMS 保持 sealed,这些加密对象就始终不可读。

  • Seal/Unmount 一个 EK。这样会锁定所有由该 EK 保护的 SSE-KMS 或 SSE-S3 加密对象。只要 CMK(s) 处于 sealed 状态,这些加密对象就始终不可读。

  • 删除一个 EK。这样会使所有由该 EK 保护的 SSE-KMS 或 SSE-S3 加密对象 永久不可读。删除 EK 并同时删除数据的组合方式,可能满足围绕数据安全删除的 监管要求。

    删除一个 EK 通常是不可逆的。在有意删除主密钥之前务必极其谨慎。

如需了解更多信息,请参阅:

12.1 - 使用按存储桶划分密钥的服务端加密(SSE-KMS)

MinIO 服务端加密(SSE)在写入操作过程中保护对象,使客户端能够利用服务端的处理能力在存储层保护对象(静态加密)。 SSE 还为围绕安全锁定和擦除的监管与合规要求提供关键能力。

MinIO SSE 使用 MinIO Key Encryption Service (KES) 和受支持的 外部密钥管理服务(KMS),以安全地大规模执行加密操作。 MinIO 还支持由客户端管理密钥的模式,此时应用程序对为 MinIO SSE 创建和管理加密密钥承担全部责任。

MinIO SSE-KMS 使用由密钥管理系统(KMS)管理的外部密钥(EK)对对象进行加密或解密。 每个存储桶和对象都可以拥有单独的 EK,从而在部署中支持更细粒度的加密操作。 只有在 MinIO 同时能够访问 KMS 以及 用于加密该对象的 EK 时,才能解密该对象。

你可以使用 mc encrypt set 命令启用存储桶默认的 SSE-KMS 加密:

mc encrypt set sse-kms EXTERNALKEY play/mybucket
  • EXTERNALKEY 替换为用于加密该存储桶中对象的 EK 名称。
  • play/mybucket 替换为你要启用自动 SSE-KMS 加密的 alias 和存储桶。

MinIO SSE-KMS 在功能上与 AWS S3 使用存储在 AWS 中的 KMS 密钥进行服务端加密 兼容,同时将支持扩展到以下 KMS 提供商:

快速开始

警告

重要

在 MinIO 部署上启用 SSE 后, 会自动使用默认加密密钥对该部署的后端数据进行加密。

MinIO 必须能够访问 KES 和外部 KMS, 才能解密后端并正常启动。 KMS 必须维护并提供对 MINIO_KMS_KES_KEY_NAME 的访问。 之后你不能再禁用 KES, 也不能在后续“撤销”该 SSE 配置。

以下过程使用 play MinIO KES 沙箱,在评估和早期开发环境中为 SSE 提供 SSE-KMS 支持。

对于扩展开发环境或生产环境,请使用以下受支持的外部密钥管理服务(KMS)之一:

警告

重要

MinIO KES Play sandbox 是公开环境, 并会为所有创建的 External Keys(EK)授予 root 级访问权限。 任何存储在 Play sandbox 上的 EK 都可能随时被访问或销毁, 从而使受保护数据暴露风险或永久不可读。

  • 切勿 使用 Play sandbox 保护你无法承受丢失或泄露的数据。
  • 切勿 使用会暴露组织私有、机密或内部命名约定的名称来生成 EK
  • 切勿 在生产环境中使用 Play sandbox。

此过程需要以下组件:

1) 为 SSE-KMS 加密创建加密密钥

使用 kes 命令行工具创建一个新的外部密钥(EK),供 SSE-KMS 加密使用。

以下命令获取 play KES 服务器的 root 身份

curl -sSL --tlsv1.2 \
  -O 'https://raw.githubusercontent.com/minio/kes/master/root.key' \
  -O 'https://raw.githubusercontent.com/minio/kes/master/root.cert'

在终端或 shell 中设置以下环境变量:

export KES_CLIENT_KEY=root.key
export KES_CLIENT_CERT=root.cert

KES_CLIENT_KEY

KES 服务器上某个 身份 的私钥。 该身份至少必须被授予对 /v1/create/v1/generate/v1/list API 端点 的访问权限。 本步骤使用 MinIO play KES 沙箱中的 root 身份,该身份可访问 KES 服务器上的所有操作。

KES_CLIENT_CERT

KES 服务器上该 身份 对应的证书。 本步骤使用 MinIO play KES 沙箱中的 root 身份,该身份可访问 KES 服务器上的所有操作。

以下命令通过 KES 创建一个新的 EK

kes key create my-minio-sse-kms-key

本教程使用示例名称 my-minio-sse-kms-key 以便引用。 请指定唯一的密钥名称,以避免与现有密钥冲突。

2) 配置 MinIO 以进行 SSE-KMS 对象加密

在部署中的每台 MinIO 服务器主机上,于 shell 或终端中指定以下环境变量:

export MINIO_KMS_KES_ENDPOINT=https://play.min.io:7373
export MINIO_KMS_KES_API_KEY=<API-key-identity-string-from-KES> # Replace with the key string for your credentials
export MINIO_KMS_KES_KEY_NAME=my-minio-sse-s3-key
说明

说明

  • API 密钥是与 KES 服务器进行身份验证的首选方式,因为它提供了更简洁且更安全的认证流程。

  • 或者,也可以指定 MINIO_KMS_KES_KEY_FILEMINIO_KMS_KES_CERT_FILE,而不是 MINIO_KMS_KES_API_KEY

    API 密钥与基于证书的身份验证互斥。 请指定 API 密钥变量, 指定密钥文件和证书文件变量。

  • 本站文档使用 API 密钥。

MINIO_KMS_KES_ENDPOINT

MinIO Play KES 服务的端点。

MINIO_KMS_KES_API_KEY

KES 为 MinIO 部署 生成的 API 密钥。 该 API 密钥对应的身份必须具有创建、生成和解密密钥的权限。

API 密钥是与 KES 服务器进行身份验证的首选方式。 如果情况需要,请改为指定 MINIO_KMS_KES_KEY_FILEMINIO_KMS_KES_CERT_FILE。 请指定 API 密钥, 指定密钥文件和证书文件。 不要 同时填充这三个环境变量。

MINIO_KMS_KES_KEY_NAME

用于执行 SSE 加密操作的外部密钥(EK)名称。 KES 会从已配置的密钥管理服务(KMS)中检索该 EK。 指定上一步创建的密钥名称。

3) 重启 MinIO 部署以启用 SSE-KMS

你必须重启 MinIO 部署以应用配置变更。 使用 mc admin service restart 命令重启该部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 alias

4) 配置自动存储桶加密

使用 mc encrypt set 命令,为写入特定存储桶的所有对象启用自动 SSE-KMS 保护。

mc encrypt set sse-kms my-minio-sse-kms-key ALIAS/BUCKET
  • ALIAS 替换为已启用 SSE-KMS 的 MinIO 部署的 alias
  • BUCKET 替换为你要启用自动 SSE-KMS 的 存储桶或存储桶前缀的完整路径。

写入指定存储桶的对象会自动使用指定的 EK 加密。

对于每个要启用自动 SSE-KMS 加密的存储桶,请重复此步骤。 你可以按存储桶或存储桶前缀生成额外的密钥,从而将每个 EK 的作用范围限制为对象子集。

安全擦除与锁定

SSE-KMS 使用在存储桶自动加密设置中指定的 EK,或在写入操作中指定的 EK 来保护对象。 因此,MinIO 在解密该对象时 必须 能够访问该 EK

  • 禁用 EK 会暂时锁定使用该 EK 加密的对象,使其变得不可读。 之后你可以重新启用该 EK,以恢复这些对象的正常读取操作。
  • 删除 EK 会使所有由该 EK 加密的对象 永久 不可读。 如果 KMS 没有该 EK 的备份或不支持其备份,则此过程 不可逆

单个 EK 的作用范围取决于:

  • 哪些存储桶将该 EK 指定为自动 SSE-KMS 加密所用密钥, 以及
  • 哪些写入操作在请求 SSE-KMS 加密时指定了该 EK

例如,假设一个 MinIO 部署为每个存储桶使用一个 EK。 禁用其中一个 EK 会使关联存储桶中的所有对象不可读,而不会影响其他存储桶。 如果该部署改为对所有对象和存储桶使用同一个 EK,则禁用该 EK 会使部署中的所有对象都不可读。

加密过程

说明

说明

本节介绍 MinIO 的内部逻辑和功能。 这些信息仅用于帮助理解,并不是配置或实现任何 MinIO 功能的前提条件。

SSE-KMS 使用由已配置密钥管理系统(KMS)管理的外部密钥(EK) 来执行加密操作并保护对象。下表描述了加密过程的各个阶段:

阶段

说明

启用 SSE 的写入操作

MinIO 接收到一个请求使用 SSE-KMS 加密的写入操作。 该写入操作 必须 关联一个用于加密对象的外部密钥(EK)。

  • 对于位于已启用自动 SSE-KMS 的存储桶中的写入操作, MinIO 使用该存储桶的 EK。如果写入操作包含显式指定的 EK, MinIO 会使用它来 替代 存储桶 EK。

  • 对于位于 启用自动 SSE-KMS 的存储桶中的写入操作, MinIO 使用该写入操作指定的 EK。

生成数据加密密钥(DEK)

MinIO 使用 EK 生成数据加密密钥(DEK)。 具体来说,MinIO Key Encryption Service (KES) 会以 EK 作为“根”密钥,向 KMS 请求新的加密密钥。

KES 会返回 DEK 的明文形式 以及 其经过 EK 加密后的表示。 MinIO 将加密后的表示作为对象元数据的一部分进行存储。

生成密钥加密密钥(KEK)

MinIO 使用确定性算法生成唯一的 256 位密钥加密密钥(KEK)。 该密钥派生算法使用伪随机函数,并以明文 DEK、随机生成的初始化向量以及由 存储桶名称、对象名称等值构成的上下文作为输入。

MinIO 会在每次加密或解密操作时生成 KEK,并且 绝不会 将 KEK 存储到磁盘上。

生成对象加密密钥(OEK)

MinIO 会生成随机且唯一的 256 位对象加密密钥(OEK),并使用该密钥加密对象。 MinIO 不会将 OEK 的明文形式存储到磁盘上。 在加密或解密操作期间,OEK 的明文仅驻留在 RAM 中。

加密对象

MinIO 在将对象写入驱动器 之前 使用 OEK 对对象进行加密。 然后,MinIO 再使用 KEK 对 OEK 进行加密。

MinIO 将 OEK 和 DEK 的加密表示作为元数据的一部分存储。

对于读取操作,MinIO 会先获取 EK 以解密 DEK。 随后 MinIO 会重新生成 KEK、解密 OEK,并解密该对象。

12.2 - 部署级服务端加密密钥(SSE-S3)

MinIO 服务端加密(SSE)在写入操作期间保护对象,使客户端能够利用服务端的处理能力, 在存储层保护对象(静态加密)。SSE 还为围绕安全锁定和擦除的监管与合规要求提供关键能力。

MinIO SSE 使用 MinIO Key Encryption Service (KES) 和外部 Key Management Service (KMS) 以安全方式大规模执行加密操作。MinIO 还支持 客户端自主管理密钥,即由应用全权负责创建和管理供 MinIO SSE 使用的加密密钥。

MinIO SSE-S3 使用由 Key Management System (KMS) 管理的 EK 对对象进行加/解密。 你必须在启动 MinIO 服务器时通过 MINIO_KMS_KES_KEY_NAME 环境变量指定 该 EK。对于 所有 SSE-S3 加密操作,MinIO 都使用同一个 EK。

你可以使用 mc encrypt set 命令启用存储桶默认 SSE-S3 加密:

mc encrypt set sse-s3 play/mybucket
  • play/mybucket 替换为你要启用自动 SSE-KMS 加密的 alias 和存储桶。

MinIO SSE-S3 在功能上兼容 AWS S3 Server-Side Encryption with Amazon S3-Managed Keys, 同时将支持扩展到以下 KMS 提供商:

快速开始

警告

重要

在 MinIO 部署上启用 SSE 后, 会自动使用默认加密密钥对该部署的后端数据进行加密。

MinIO 必须能够访问 KES 和外部 KMS, 才能解密后端并正常启动。 KMS 必须维护并提供对 MINIO_KMS_KES_KEY_NAME 的访问。 之后你不能再禁用 KES, 也不能在后续“撤销”该 SSE 配置。

以下流程使用 play MinIO KES 沙箱,在评估和早期开发环境中为 SSE-S3 提供 SSE 支持。

对于较长期的开发环境或生产环境,请使用以下受支持的外部 Key Management Services (KMS) 之一:

警告

重要

MinIO KES Play sandbox 是公开环境, 并会为所有创建的 External Keys(EK)授予 root 级访问权限。 任何存储在 Play sandbox 上的 EK 都可能随时被访问或销毁, 从而使受保护数据暴露风险或永久不可读。

  • 切勿 使用 Play sandbox 保护你无法承受丢失或泄露的数据。
  • 切勿 使用会暴露组织私有、机密或内部命名约定的名称来生成 EK
  • 切勿 在生产环境中使用 Play sandbox。

此流程需要以下组件:

1) 为 SSE-S3 加密创建加密密钥

使用 kes 命令行工具创建一个新的 EK,供 SSE-S3 加密使用。

以下命令获取已连接到 KES play 沙箱的 KES 服务器的 root identity

curl -sSL --tlsv1.2 \
  -O 'https://raw.githubusercontent.com/minio/kes/master/root.key' \
  -O 'https://raw.githubusercontent.com/minio/kes/master/root.cert'

在终端或 shell 中设置以下环境变量:

export KES_CLIENT_KEY=root.key
export KES_CLIENT_CERT=root.cert

KES_CLIENT_KEY

KES 服务器上某个 identity 的私钥。 该 identity 至少必须被授予对 /v1/create/v1/generate/v1/list API endpoints 的访问权限。 此步骤使用 MinIO play KES 沙箱的 root identity,它可访问 KES 服务器上的所有操作。

KES_CLIENT_CERT

KES 服务器上该 identity 对应的证书。 此步骤使用 MinIO play KES 沙箱的 root identity,它可访问 KES 服务器上的所有操作。

以下命令通过 KES CLI 创建一个新的 EK

kes key create my-minio-sse-s3-key

本教程使用示例名称 my-minio-sse-s3-key 以便引用。 请指定唯一的密钥名称,以避免与现有密钥冲突。

2) 配置 MinIO 以启用 SSE-S3 对象加密

在部署中每个 MinIO 服务器主机的 shell 或终端中设置以下环境变量:

export MINIO_KMS_KES_ENDPOINT=https://play.min.io:7373
export MINIO_KMS_KES_API_KEY=<API-key-identity-string-from-KES> # Replace with the key string for your credentials
export MINIO_KMS_KES_KEY_NAME=my-minio-sse-s3-key
说明

说明

  • API key 是与 KES 服务器进行身份验证的首选方式,因为它为 KES 服务器提供了 更精简且安全的认证流程。

  • 或者,使用 MINIO_KMS_KES_KEY_FILEMINIO_KMS_KES_CERT_FILE 替代 MINIO_KMS_KES_API_KEY

    API key 与基于证书的身份验证互斥。 请在 API key 变量与 Key File 和 Cert File 变量之间 二选一

  • 本站文档使用 API key。

MINIO_KMS_KES_ENDPOINT

MinIO Play KES 服务的端点。

MINIO_KMS_KES_KEY_FILE

与 KES 服务上的某个 identity 对应的私钥文件。该 identity 必须具备创建、生成和解密密钥的权限。 请指定与上一步中 KES_KEY_FILE 环境变量相同的 identity 私钥文件。

MINIO_KMS_KES_CERT_FILE

与 KES 服务上的某个 identity 对应的公钥证书文件。该 identity 必须具备创建、生成和解密密钥的权限。 请指定与上一步中 KES_CERT_FILE 环境变量相同的 identity 证书文件。

MINIO_KMS_KES_KEY_NAME

用于执行 SSE 加密操作的 EK 名称。 KES 从已配置的 Key Management System (KMS) 中获取该 EK。 请指定上一步创建的密钥名称。

3) 重启 MinIO 部署以启用 SSE-S3

必须重启 MinIO 部署以应用配置变更。 使用 mc admin service restart 命令重启部署。

mc admin service restart ALIAS

ALIAS 替换为要重启的部署的 alias

4) 配置存储桶自动加密

可选

如果你只打算使用客户端驱动的 SSE-S3,可以跳过此步骤。

使用 mc encrypt set 命令,为写入特定存储桶的所有对象启用自动 SSE-S3 保护。

mc encrypt set sse-s3 ALIAS/BUCKET
  • ALIAS 替换为已启用 SSE-S3 的 MinIO 部署的 alias
  • BUCKET 替换为你要启用自动 SSE-S3 的 存储桶或存储桶前缀的完整路径。

安全擦除与锁定

SSE-S3 使用服务器启动时通过 MINIO_KMS_KES_KEY_NAME 环境变量指定的 EK 来保护对象。因此,MinIO 必须 访问该 EK 才能解密该对象。

  • 禁用该 EK 会使部署中经 SSE-S3 加密的对象暂时无法读取,从而被临时锁定。 你之后可以重新启用该 EK,以恢复正常读取操作。
  • 删除该 EK 会使部署中所有经 SSE-S3 加密的对象 永久 无法读取。 如果 KMS 没有该 EK 的备份或不支持其备份,此过程 不可逆

EK 的作用范围取决于:

  • 哪些存储桶指定了自动 SSE-S3 加密,以及
  • 哪些写入操作请求了 SSE-S3 加密。

加密过程

说明

说明

以下部分描述 MinIO 的内部逻辑和功能。 这些信息仅用于帮助理解,并非配置或实现任何 MinIO 功能所必需。

SSE-S3 使用由已配置的 Key Management System (KMS) 管理的 EK 来执行加密操作并 保护对象。下表描述了加密过程的各个阶段:

阶段

说明

启用 SSE 的写入操作

MinIO 接收到一个请求执行 SSE-S3 加密的写入操作。 MinIO 将 MINIO_KMS_KES_KEY_NAME 中指定的密钥名称用作 EK。

生成数据加密密钥(DEK)

MinIO 使用 EK 生成数据加密密钥(DEK)。 具体来说,MinIO Key Encryption Service (KES) 会以 EK 作为“根”密钥,向 KMS 请求新的加密密钥。

KES 会返回 DEK 的明文形式 以及 其经过 EK 加密后的表示。 MinIO 将加密后的表示作为对象元数据的一部分进行存储。

生成密钥加密密钥(KEK)

MinIO 使用确定性算法生成唯一的 256 位密钥加密密钥(KEK)。 该密钥派生算法使用伪随机函数,并以明文 DEK、随机生成的初始化向量以及由 存储桶名称、对象名称等值构成的上下文作为输入。

MinIO 会在每次加密或解密操作时生成 KEK,并且 绝不会 将 KEK 存储到磁盘上。

生成对象加密密钥(OEK)

MinIO 会生成随机且唯一的 256 位对象加密密钥(OEK),并使用该密钥加密对象。 MinIO 不会将 OEK 的明文形式存储到磁盘上。 在加密或解密操作期间,OEK 的明文仅驻留在 RAM 中。

加密对象

MinIO 在将对象写入磁盘 之前 使用 OEK 对对象进行加密。 随后,MinIO 使用 KEK 对 OEK 进行加密。

MinIO 将 OEK 和 DEK 的加密表示形式作为元数据的一部分进行存储。

12.3 - 使用客户端管理密钥的服务端加密(SSE-C)

MinIO Server-Side Encryption (SSE) 在写入操作过程中保护对象, 使客户端能够利用服务端处理能力在存储层实现对象保护 (静态加密,encryption-at-rest)。SSE 还提供满足安全锁定与擦除相关 监管和合规要求所需的关键能力。

本页中的步骤用于配置并启用使用客户端管理密钥的服务端加密 (SSE-C)。MinIO SSE-C 支持由客户端在对象写入磁盘 之前 驱动对象加密。客户端在执行读取操作时必须提供正确的密钥 才能解密对象。

MinIO SSE-C 在功能上兼容 Amazon Server-Side Encryption with Customer-Provided Keys.

安全擦除与锁定

SSE-C 在写入操作期间使用客户端指定的 EK 来保护对象。 前提是客户端侧的密钥管理支持禁用或删除这些密钥:

  • 禁用 EK 会通过使使用该 EK 加密的对象变得不可读,

    从而暂时锁定这些对象。之后您可以重新启用该 EK, 以恢复对这些对象的正常读取操作。

  • 删除 EK 会使所有使用该 EK 加密的对象

    永久 不可读。如果客户端侧 KMS 不支持 对 EK 进行备份,则该过程 不可逆

单个 EK 的影响范围取决于在请求 SSE-C 加密时 有多少次写入操作指定了该 EK

注意事项

复制场景中的 SSE-C

说明

变更: Server

RELEASE.2024-03-30T09-41-56Z

使用 SSE-C 加密的对象现在可以通过站点复制或存储桶复制进行复制。 早期版本的 MinIO Object Store 不会复制经过 SSE-C 加密的对象。

经过压缩的 SSE-C 加密对象与 MinIO bucket replicationsite replication 不兼容。 请使用 SSE-KMSSSE-S3,以确保加密对象与复制兼容。

SSE-C 会覆盖 SSE-S3 和 SSE-KMS

使用 SSE-C 加密对象后,MinIO 将不会再对该对象应用 SSE-KMSSSE-S3 加密。

快速开始

MinIO SSE-C 要求客户端执行所有密钥创建和存储操作。

本流程使用 mc 对源 MinIO 部署执行操作。 请在可访问该源部署网络的机器上安装 mc。 有关下载和安装 mc 的说明,请参见 mc Installation Quickstart

SSE-C 密钥 必须 是一个 256 位原始编码字符串或十六进制编码字符串。 客户端应用负责生成并存储该加密密钥。 MinIO 不会 存储 SSE-C 加密密钥,并且在没有客户端管理密钥的情况下无法解密 SSE-C 加密对象。

说明

说明

MinIO Client 从 RELEASE.2024-06-20T14-50-54Z 开始支持十六进制编码密钥。

1) 生成加密密钥

生成一个 256 位 base64 原始编码字符串或十六进制编码字符串作为加密密钥。

以下示例生成一个满足加密密钥要求的字符串。 生成的字符串适用于非生产环境:

cat /dev/urandom | head -c 32 | base64 -

请遵循您所在组织关于生成加密安全密钥的要求。

复制该加密密钥,以便在下一步中使用。

2) 使用 SSE-C 加密对象

MinIO 支持使用以下 AWS S3 请求头指定 SSE-C 加密:

  • X-Amz-Server-Side-Encryption-Customer-Algorithm 设置为 AES256
  • X-Amz-Server-Side-Encryption-Customer-Key 设置为加密密钥值。
  • X-Amz-Server-Side-Encryption-Customer-Key-MD5 设置为加密密钥的 128 位 MD5 摘要。

MinIO mc 命令行工具及兼容 S3 的 SDK 提供了设置这些请求头的特定语法。 某些 mc 命令(例如 mc cp)包含用于启用 SSE-S3 加密的 专用参数:

mc cp ~/data/mydata.json ALIAS/BUCKET/mydata.json \
   --encrypt-key "ALIAS/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo="
  • ALIAS 替换为您要写入 SSE-C 加密对象的 MinIO 部署的 alias
  • BUCKET 替换为您要写入 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。

3) 复制 SSE-C 加密对象

MinIO 支持使用以下 AWS S3 请求头,将 SSE-C 加密对象复制到另一个兼容 S3 的服务:

  • X-Amz-Copy-Source-Server-Side-Encryption-Algorithm 设置为 AES256
  • X-Amz-Copy-Source-Server-Side-Encryption-Key 设置为加密密钥值。 如果指定的密钥与用于对该对象执行 SSE-C 加密的密钥不匹配, 复制操作将失败。
  • X-Amz-Copy-Source-Server-Side-Encryption-Key-MD5 设置为加密密钥的 128 位 MD5 摘要。

MinIO mc 命令行工具及兼容 S3 的 SDK 提供了设置这些请求头的特定语法。 某些 mc 命令(例如 mc cp)包含用于启用 SSE-S3 加密的 专用参数:

mc cp SOURCE/BUCKET/mydata.json TARGET/BUCKET/mydata.json  \
--encrypt-key "SOURCE/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo=,TARGET/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo="
  • SOURCE/BUCKET 替换为您要读取 加密对象所在的 MinIO 部署的 alias, 以及您要读取 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。
  • TARGET/BUCKET 替换为您要写入 加密对象的 MinIO 部署的 alias, 以及您要写入 SSE-C 加密对象的存储桶或存储桶前缀的完整路径。

13 - 存储桶复制

MinIO 支持在源存储桶与目标存储桶之间进行服务端和客户端对象复制。

Server-Side Bucket Replication

为每个存储桶配置规则,以便在 MinIO 部署之间自动同步对象。 配置存储桶复制规则的部署充当“源”,而配置的远端部署充当“目标”。 MinIO 会在对象写入操作(例如 PUT)期间应用规则,并自动同步新对象以及对象变更,例如新的对象版本或对象元数据的变更。

MinIO 服务端存储桶复制仅支持将处于相同发行版本的 MinIO 集群作为远端复制目标。

客户端存储桶复制

使用命令流程在同一 S3 兼容集群内的存储桶之间,或在两个相互独立的 S3 兼容集群之间同步对象。 使用 mc mirror 的客户端复制支持 MinIO 到 S3 以及类似的复制配置。

说明

存储桶复制与站点复制

存储桶复制与 站点复制 不同,且二者互斥。

  • 存储桶复制在存储桶级别同步数据,例如存储桶前缀路径和对象。

    你可以在任何时候配置存储桶复制,并且远端 MinIO 部署上的复制目标存储桶中可以预先存在数据。

  • 站点复制在存储桶复制的基础上扩展到包含 IAM、安全令牌、访问密钥以及存储桶级配置。

    站点复制通常在最初部署 MinIO 对等站点时配置。 在初始配置时,任意存储桶或对象只能由一个站点持有。

服务端存储桶复制

MinIO 服务端存储桶复制是一种自动化的存储桶级配置,用于在源存储桶和目标存储桶之间同步对象。 MinIO 服务端复制 要求 源存储桶和目标存储桶分别位于两个独立的 MinIO 集群中,且运行相同的 MinIO 服务端版本。

对于写入存储桶的每次操作,MinIO 都会检查该存储桶上配置的所有复制规则,并应用已配置优先级最高的匹配规则。 MinIO 会同步新对象以及对象变更,例如新的对象版本或对象元数据变更。 这也包括启用或修改对象锁定或保留设置等元数据操作。

MinIO 服务端存储桶复制在功能上类似于 Amazon S3 replication,同时增加了以下 MinIO 专有特性:

  • 源存储桶和目标存储桶名称可以相同,从而支持 Splunk 或 Veeam BC/DR 等站点到站点用例。
  • 相比 S3 存储桶复制配置,实现更简化,无需配置 AccessControlTranslation、Metrics 和 SourceSelectionCriteria 等设置。
  • 支持源存储桶与目标存储桶之间对象的 Active-Active(双向)复制。
  • 支持在三个或更多 MinIO 部署之间进行对象的多站点复制

重新同步(灾难恢复)

重新同步主要用于在副本配置中利用健康部署,在某个 MinIO 部署发生部分或全部数据丢失后进行恢复。 使用 mc replicate resync 命令,可基于指定的源存储桶对远端目标(mc admin bucket remote)执行完整重新同步。

重新同步过程会根据所有已配置且包含 现有对象复制 的复制规则检查源存储桶中的所有对象。 对于每个匹配规则的对象,重新同步过程都会将其放入复制 队列,而不考虑该对象当前的 复制状态

对于远端副本与源对象完全一致(包括对象元数据)的对象,MinIO 会跳过同步。 除此之外,MinIO 不会基于目标端已有内容对队列进行优先级调整或修改。

mc replicate resync 在存储桶级别运行, 支持前缀级粒度。 在大型存储桶上启动重新同步可能会显著增加与复制相关的负载和流量。 请谨慎使用此命令,并仅在必要时使用。

对于已配置 对象转换(分层) 的存储桶,复制重新同步会以未转换状态恢复对象,且不包含任何关联的转换元数据。 因此,任何先前已转换到远端存储的数据都会与远端 MinIO 部署永久断开关联。 对于在远端配置中将明确的人类可读前缀作为一部分指定的分层配置,你可以安全地清除该前缀中的已转换数据,以避免与这些“丢失”数据相关的成本。

删除操作的复制

MinIO 支持复制 删除 操作,即同步删除特定对象版本以及新的 删除标记。删除操作复制使用与其他所有复制操作相同的 复制流程

MinIO 要求显式启用带版本的删除和删除标记复制。 使用 mc replicate add --replicate 字段,通过指定 delete 和/或 delete-marker 来分别启用带版本的删除和删除标记复制。 若要同时启用两者,请使用逗号分隔符 delete,delete-marker 指定这两个字符串。

对于删除标记复制,MinIO 会在删除操作创建删除标记后启动复制流程。 MinIO 使用 X-Minio-Replication-DeleteMarker-Status 元数据字段来跟踪删除标记复制状态。 在 active-active 复制配置中,如果两个集群同时为某个对象创建删除标记,或者在复制事件同步之前其中一个或两个集群处于宕机状态,MinIO 可能会产生重复的删除标记。

对于复制删除某个特定对象版本的操作,在复制完成之前,MinIO 会将该对象版本标记为 PENDING。 一旦远端目标删除了该对象版本,MinIO 就会删除源端上的该对象。 虽然这一过程可确保接近同步的版本删除,但它可能导致在初始删除操作之后,列表操作仍返回该对象版本。 MinIO 使用 X-Minio-Replication-Delete-Status 跟踪删除版本的复制状态。

MinIO 仅复制由客户端显式发起的删除操作。 MinIO 不会 复制因应用 生命周期管理过期规则 而删除的对象。 对于 active-active 配置,请在 所有 复制存储桶上设置相同的过期规则,以确保对象过期行为一致。

MinIO 会在源存储桶和远端存储桶上裁剪空对象前缀

如果删除操作移除了某个存储桶前缀中的最后一个对象,MinIO 会递归删除该前缀中所有为空的部分,直到存储桶根目录。 MinIO 仅对在对象写入过程中 隐式 创建的前缀应用这种递归删除行为,也就是说,该前缀不是通过 mc mb 之类的显式目录创建命令创建的。

如果复制规则启用了删除操作复制,那么复制过程在目标 MinIO 集群上 也会 应用这种隐式前缀裁剪行为。

例如,考虑一个名为 photos 的存储桶,其中包含以下对象前缀:

  • photos/2021/january/myphoto.jpg
  • photos/2021/february/myotherphoto.jpg
  • photos/NYE21/NewYears.jpg

photos/NYE21唯一一个 使用 mc mb 显式创建的前缀。 其他所有前缀都是在写入位于该前缀下的对象时 隐式 创建的。

  • 某个命令删除了 myphoto.jpg。MinIO 会自动裁剪空的 /janaury 前缀。
  • 随后某个命令删除了 myotherphoto.jpg。MinIO 会自动裁剪 /february 前缀以及此时已为空的 /2021 前缀。
  • 某个命令删除了 NewYears.jpg 对象。MinIO 会保留 /NYE21 前缀,因为它是 显式 创建的。

现有对象的复制

默认情况下,MinIO 会将源存储桶中的现有对象复制到配置好的远端,类似于 AWS: Replicating existing objects between S3 buckets,但无需联系技术支持的额外成本。

MinIO 会将所有满足复制规则的对象或对象前缀标记为可同步到远端集群和存储桶。 MinIO 仅排除没有版本 ID 的对象,例如在存储桶启用版本控制之前写入的对象。

你可以在配置或修改存储桶复制规则时禁用现有对象复制。 在创建或修改时,必须指定 所有 需要的复制特性:

禁用现有对象复制不会移除任何已经复制到远端存储桶的对象。

同步复制与异步复制

对于给定的远端目标,MinIO 支持指定异步复制(默认)或同步复制。

在异步复制模式下,MinIO 会在将对象放入 复制队列 之前 完成发起的 PUT 操作。 因此,发起请求的客户端可能会在对象完成复制 之前 就看到 PUT 操作成功。 虽然这可能导致远端对象陈旧或缺失,但它降低了因复制负载而导致写入变慢的风险。

在同步复制模式下,MinIO 会在完成发起的 PUT 操作 之前 尝试复制对象。 无论复制尝试是否成功,MinIO 都会返回一个成功的 PUT 操作结果。 这降低了写入变慢的风险,但代价是远端位置可能出现陈旧或缺失对象。

在使用 mc admin bucket remote add 命令配置远端目标时,你必须通过 add 标志显式启用同步复制。

复制内部机制

本节记录复制的内部行为,对使用或实现复制而言并非关键。 本文档仅用于学习和教育目的。

复制流程

MinIO 使用一个复制排队系统,并由多个并发复制工作线程处理该队列。 MinIO 会持续执行复制并从队列中移除对象,同时扫描新的未复制对象并将其加入队列。

说明

变更: RELEASE.2022-07-18T17-49-40Z

MinIO 会将失败的复制操作加入队列,并最多重试三(3)次。

对于在三次尝试后仍复制失败的操作,MinIO 会将其移出队列。 扫描器稍后可以再次发现这些受影响对象,并将其重新加入复制队列。

说明

变更: RELEASE.2022-08-11T04-37-28Z

在执行列表操作或任何 GETHEAD API 方法时,失败或待处理的复制会自动重新入队。 例如,在远端位置恢复在线后,使用 mc statmc catmc ls 会使复制重新入队。

MinIO 会根据对象的复制状态设置 X-Amz-Replication-Status 元数据字段:

复制状态

说明

PENDING

该对象尚未被复制。如果对象满足该存储桶上配置的某条复制规则,MinIO 就会应用此状态。 MinIO 会持续扫描尚未进入复制队列的 PENDING 对象,并在队列有可用空间时将其加入队列。

对于多站点复制,对象会一直保持 PENDING 状态,直到复制到该存储桶或存储桶前缀配置的 所有 远端。

COMPLETED

该对象已成功复制到远端集群。

FAILED

该对象复制到远端集群失败。

MinIO 会持续扫描尚未进入复制队列的 FAILED 对象,并在队列有可用空间时将其加入队列。

REPLICA

该对象本身就是来自远端源的副本。

复制流程通常具有以下几种流转路径之一:

  • PENDING -> COMPLETED
  • PENDING -> FAILED -> COMPLETED

13.1 - 设置存储桶复制的要求

存储桶复制使用规则将一个 MinIO 部署中的存储桶内容同步到远端 MinIO 部署中的存储桶。

复制可以通过以下任一方式完成:

  • Active-Passive 符合条件的对象会从源存储桶复制到远端存储桶。 远端存储桶上的任何更改都不会反向复制回来。
  • Active-Active 任一存储桶中符合条件对象的更改都会以双向方式复制到另一个存储桶。
  • Multi-Site Active-Active 任何已设置存储桶复制的存储桶中符合条件对象的更改,都会复制到所有其他存储桶。

在设置这些复制配置之前,请确保满足以下前提条件。

设置存储桶复制所需的权限

要配置和启用复制规则,存储桶复制要求源端和目标端部署具备特定权限。

下列策略提供了在部署上配置和启用复制所需的权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "admin:SetBucketTarget",
                "admin:GetBucketTarget",
                "admin:ListBatchJobs",
                "admin:DescribeBatchJob",
                "admin:StartBatchJob",
                "admin:CancelBatchJob"
            ],
            "Effect": "Allow",
            "Sid": "EnableRemoteBucketConfiguration"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:GetBucketLocation",
                "s3:GetBucketVersioning",
                "s3:GetObjectRetention",
                "s3:GetObjectLegalHold",
                "s3:PutReplicationConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ],
            "Sid": "EnableReplicationRuleConfiguration"
        }
    ]
}
  • "EnableRemoteBucketConfiguration" 语句授予创建远端目标以支持复制的权限。
  • "EnableReplicationRuleConfiguration" 语句授予在存储桶上创建复制规则的权限。 "arn:aws:s3:::* 资源会将复制权限应用到源部署上的 任意 存储桶。 你可以按需将该用户策略限制到特定存储桶。

下列代码使用所需策略创建一个 MinIO 管理用户。 将 TARGET 替换为你要配置复制的 MinIO 部署的 别名

wget -O - https://silo.pgsty.com/extra/examples/ReplicationAdminPolicy.json | \
mc admin policy create TARGET ReplicationAdminPolicy /dev/stdin
mc admin user add TARGET ReplicationAdmin LongRandomSecretKey
mc admin policy attach TARGET ReplicationAdminPolicy --user=ReplicationAdmin

对于配置了 Active Directory/LDAPOpenID Connect 用户管理的 MinIO 部署,则应改为为存储桶复制创建专用 访问密钥

下列策略提供了将复制数据同步 该部署所需的权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:GetBucketLocation",
                "s3:GetBucketVersioning",
                "s3:GetBucketObjectLockConfiguration",
                "s3:GetEncryptionConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ],
            "Sid": "EnableReplicationOnBucket"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ReplicateTags",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionTagging",
                "s3:PutObject",
                "s3:PutObjectRetention",
                "s3:PutBucketObjectLockConfiguration",
                "s3:PutObjectLegalHold",
                "s3:DeleteObject",
                "s3:ReplicateObject",
                "s3:ReplicateDelete"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ],
            "Sid": "EnableReplicatingDataIntoBucket"
        }
    ]
}
  • "EnableReplicationOnBucket" 语句授予远端目标获取存储桶级配置的权限, 从而支持在 MinIO 部署中 所有 存储桶上执行复制操作。 如果要将策略限制到特定存储桶,请像 "arn:aws:s3:::bucketName" 一样, 在 Resource 数组中指定这些存储桶。
  • "EnableReplicatingDataIntoBucket" 语句授予远端目标将数据同步到 MinIO 部署中 任意 存储桶的权限。 如果要将策略限制到特定存储桶,请像 "arn:aws:s3:::bucketName/*" 一样, 在 Resource 数组中指定这些存储桶。

下列代码使用所需策略创建一个 MinIO 管理用户。 将 TARGET 替换为你要配置复制的 MinIO 部署的 别名

wget -O - https://silo.pgsty.com/extra/examples/ReplicationRemoteUserPolicy.json | \
mc admin policy create TARGET ReplicationRemoteUserPolicy /dev/stdin
mc admin user add TARGET ReplicationRemoteUser LongRandomSecretKey
mc admin policy attach TARGET ReplicationRemoteUserPolicy --user=ReplicationRemoteUser

对于配置了 Active Directory/LDAPOpenID Connect 用户管理的 MinIO 部署,则应改为为存储桶复制创建专用 访问密钥

关于在 MinIO 部署中添加用户、访问密钥和策略的更完整文档,请参见 mc admin usermc admin user svcacctmc admin policy

存储桶复制的对象加密设置需保持一致

MinIO 支持复制使用 SSE-KMSSSE-S3 加密的对象:

  • 对于使用 SSE-KMS 加密的对象,MinIO 要求 目标存储桶支持使用与源存储桶对象 加密时 相同的密钥名称 对对象执行 SSE-KMS 加密。
  • 对于使用 SSE-S3 加密的对象,MinIO 要求 目标存储桶同样支持 SSE-S3 对象加密,而不考虑密钥名称。

在复制过程中,MinIO 会先在源存储桶上对对象进行 解密,再通过网络传输未加密的 对象。目标 MinIO 部署随后会使用目标端的加密设置重新对该对象进行加密。 因此,MinIO 强烈建议 在源端和目标端部署上都 启用 TLS,以确保对象在传输过程中的安全。

MinIO 支持复制客户端加密对象(SSE-C)。

存储桶复制要求使用 MinIO 部署

MinIO 服务端复制仅适用于 MinIO 部署之间。 源端和目标端部署 都必须 运行版本匹配的 MinIO Server。

如需在任意 S3 兼容服务之间配置复制,请使用 mc mirror

复制要求启用版本控制

MinIO 依赖 版本控制 提供的不可变性保护来支持 复制和重新同步。

使用 mc version info 验证源存储桶和远端存储桶的版本控制状态。 必要时使用 mc version enable 命令启用版本控制。

如果你在源存储桶中将某个前缀或文件夹排除在版本控制之外,MinIO 就无法复制该文件夹 或前缀中的对象。

对象锁定状态需与存储桶复制保持一致

MinIO 支持复制受 WORM 锁定 保护的对象。 两个复制存储桶 都必须 启用对象锁定,MinIO 才能复制被锁定的对象。 对于主动-主动配置,MinIO 建议在两个存储桶上使用 相同的 保留规则,以确保跨站点 行为一致。

根据 S3 的行为要求,你必须在创建存储桶时启用对象锁定。 随后,你可以在任何时候配置对象保留规则。 在开始此过程 之前,请先在状态异常的目标存储桶上配置所需规则。

13.2 - 启用服务端单向存储桶复制

本页面中的过程会创建一条新的存储桶复制规则,用于将对象从一个 MinIO 存储桶单向复制到另一个 MinIO 存储桶。 这些存储桶既可以位于同一个 MinIO 部署中,也可以位于不同的 MinIO 部署中。

主动-被动复制会将数据从源 MinIO 部署同步到远程 MinIO 部署。
说明

说明

如需在任意兼容 S3 的服务之间配置复制(不一定是 MinIO),请使用 mc mirror

要求

复制要求所有参与的集群满足 以下要求。 本过程假定你已经审阅并验证了这些要求。

如需更多详细信息,请参见 存储桶复制要求 页面。

注意事项

点击展开以下任一项:

现有对象的复制

MinIO 支持自动复制存储桶中的现有对象。

MinIO 要求使用 mc replicate add --replicatemc replicate update --replicate 显式启用现有对象复制,并包含 existing-objects 复制功能标志。 本过程包含启用现有对象复制所需的标志。

删除操作的复制

MinIO 支持将 S3 DELETE 操作复制到目标存储桶。 具体来说,MinIO 可以复制版本控制的 Delete Markers,以及删除特定版本对象的操作:

  • 对于对象的删除操作,MinIO 复制也会在目标存储桶上创建删除标记。
  • 对于对象某个版本的删除操作,MinIO 复制也会在目标存储桶上删除这些版本。

MinIO 要求使用 mc replicate add --replicatemc replicate update --replicate 显式启用删除操作复制。 本过程包含启用删除操作和删除标记复制所需的标志。

MinIO 不会 复制因应用 生命周期管理过期规则 而产生的删除操作。

更完整的文档请参见 删除操作的复制对象删除

多站点复制

MinIO 支持为每个存储桶或存储桶前缀配置多个远程目标。 例如,你可以将一个存储桶配置为把数据复制到两个或更多远程 MinIO 部署,其中一个部署是 1:1 副本(复制包括删除在内的所有操作),另一个部署则是完整的历史记录(仅复制非破坏性的写入操作)。

本过程说明了到单个远程 MinIO 部署的单向复制。 你可以重复本教程,将单个存储桶复制到多个远程目标。

过程

使用命令行 mc 配置单向存储桶复制

本过程使用 别名 SOURCEREMOTE 来引用每个配置了复制的 MinIO 部署。 请将这些值替换为你的目标 MinIO 部署对应的别名。

本过程假定每个别名都对应一个具有 必要复制权限 的用户。

说明

变更: RELEASE.2022-12-24T15-21-38Z

mc replicate add 会自动创建所需的复制目标,因此不再需要使用已弃用的 mc admin remote bucket add 命令。 本过程仅说明该版本起的操作流程。

1) 创建新的存储桶复制规则

使用 mc replicate add 命令,为每个 MinIO 部署添加新的复制规则。

mc replicate add ALIAS/BUCKET \
   --remote-bucket 'https://USER:PASSWORD@HOSTNAME:PORT/BUCKET' \
   --replicate "delete,delete-marker,existing-objects"
  • ALIAS 替换为源 MinIO 部署的 别名。 该名称 必须 与上一步创建远端目标时指定的存储桶名称一致。

  • BUCKET 替换为源部署上要作为复制源的存储桶名称。

  • 使用 --remote-bucket 指定 ALIAS/BUCKET 要复制到的远端 MinIO 部署和存储桶。

    USER:PASSWORD 必须对应远端部署上具有 所需复制权限 的用户。

    HOSTNAME:PORT 必须能解析到远端部署上可访问的 MinIO 实例。 BUCKET 必须已存在,并满足其他所有 复制要求

  • --replicate "delete,delete-marker,existing-objects" 标志会启用以下复制功能:

    有关更完整的文档,请参阅 mc replicate add --replicate。 省略任意字段即可禁用对应组件的复制。

可按需为 mc replicate add 指定其他受支持的可选参数。

2) 验证复制配置

在其中一个部署上,使用 mc cp 将新对象复制到已启用复制的存储桶中。

mc cp ~/foo.txt ALIAS/BUCKET

使用 mc ls 验证目标存储桶中存在该对象:

mc ls ALIAS/BUCKET
说明

另请参阅

13.3 - 启用双向服务端存储桶复制

本页中的过程会创建新的存储桶复制规则,用于在 MinIO 存储桶之间对对象执行双向“主动-主动”同步。

主动-主动复制在两个远程集群之间同步数据。

本教程介绍如何在两个 MinIO 集群之间配置主动-主动复制。有关在三个或更多 MinIO 集群之间进行多站点复制的教程,请参见 启用多站点服务端存储桶复制

要求

您必须满足 存储桶复制要求 中描述的所有存储桶复制基础要求。

此外,要设置主动-主动存储桶复制,您还必须满足以下附加要求:

访问两个集群

要设置主动-主动存储桶复制,您必须能够通过网络访问两个部署,并拥有具有所需权限的登录凭证。

您可以安装 mc 并通过命令行访问这些部署。 使用 mc alias set 命令为两个 MinIO 部署创建别名。

创建别名时,需要为部署中的某个用户指定 access key。 该用户 必须 具有在该部署上创建和管理用户及策略的权限。

具体而言,请确保该用户 至少 具有以下权限:

注意事项

使用一致的复制设置

MinIO 支持自定义复制配置,以启用或禁用以下复制行为:

  • 删除操作 的复制
  • 删除标记的复制
  • 现有对象的复制
  • 仅元数据变更的复制

为存储桶配置复制规则时,请确保参与主动-主动复制的两个 MinIO 部署使用 相同 的复制行为,以确保对象同步一致且可预测。

现有对象的复制

MinIO 支持自动复制存储桶中的现有对象。

MinIO 要求使用 mc replicate add --replicatemc replicate update --replicate 显式启用现有对象复制,并包含 existing-objects 复制功能标志。 此过程包含启用现有对象复制所需的标志。

删除操作的复制

MinIO 支持将删除操作复制到目标存储桶。 具体而言,MinIO 可以复制版本控制中的 Delete Markers 以及特定已版本化对象的删除:

  • 对于对象上的删除操作,MinIO 复制也会在目标存储桶上创建删除标记。
  • 对于对象某个版本的删除操作,MinIO 复制也会删除目标存储桶上的这些版本。

MinIO 要求使用 mc replicate add --replicatemc replicate update --replicate 显式启用删除操作复制。 此过程包含启用删除操作和删除标记复制所需的标志。

MinIO 不会 复制因应用 lifecycle management expiration rules 而产生的删除操作。 请在源存储桶和目标存储桶上配置匹配的过期规则,以确保对象过期行为一致。

有关更完整的文档,请参见 删除操作的复制对象删除

多站点复制

MinIO 支持为每个存储桶或存储桶前缀配置多个远程目标。 这使得可以在 MinIO 部署之间配置多站点主动-主动复制。

本过程介绍 两个 MinIO 站点之间的主动-主动复制。 您可以针对复制网格中的每一“对”MinIO 部署重复此过程。有关专门教程,请参见 启用多站点服务端存储桶复制

操作步骤

使用命令行 mc 配置双向存储桶复制

此过程会在两个 MinIO 部署之间创建双向、主动-主动复制。

此过程假定您已使用具有 所需复制权限 的用户为每个部署定义了别名。

说明

变更: RELEASE.2022-12-24T15-21-38Z

mc replicate add 会自动创建所需的复制目标,因此不再需要使用已弃用的 mc admin remote bucket add 命令。 本文档仅说明自该版本起的过程。

1) 在每个部署上创建新的存储桶复制规则

使用 mc replicate add 命令,为每个 MinIO 部署添加新的复制规则。

mc replicate add ALIAS/BUCKET \
   --remote-bucket 'https://USER:PASSWORD@HOSTNAME:PORT/BUCKET' \
   --replicate "delete,delete-marker,existing-objects"
  • ALIAS 替换为源 MinIO 部署的 别名。 该名称 必须 与上一步创建远端目标时指定的存储桶名称一致。

  • BUCKET 替换为源部署上要作为复制源的存储桶名称。

  • 使用 --remote-bucket 指定 ALIAS/BUCKET 要复制到的远端 MinIO 部署和存储桶。

    USER:PASSWORD 必须对应远端部署上具有 所需复制权限 的用户。

    HOSTNAME:PORT 必须能解析到远端部署上可访问的 MinIO 实例。 BUCKET 必须已存在,并满足其他所有 复制要求

  • --replicate "delete,delete-marker,existing-objects" 标志会启用以下复制功能:

    有关更完整的文档,请参阅 mc replicate add --replicate。 省略任意字段即可禁用对应组件的复制。

可按需为 mc replicate add 指定其他受支持的可选参数。

在另一个 MinIO 部署上重复此步骤。 将 ALIAS--remote-bucket 的值修改为与第一个部署对应。

完成此步骤后,您应已配置两条复制规则:每个部署上一条,并指向另一个部署上的存储桶。 使用 mc replicate ls 命令验证已创建的复制规则。

2) 验证复制配置

在其中一个部署上,使用 mc cp 将新对象复制到已启用复制的存储桶中。

mc cp ~/foo.txt ALIAS/BUCKET

使用 mc ls 验证目标存储桶中存在该对象:

mc ls ALIAS/BUCKET

通过将另一个对象复制到第二个部署,并验证该对象会复制到第一个部署,来重复执行此测试。

当两个对象都存在于两个部署上时,您就已成功在 MinIO 存储桶之间设置了双向、主动-主动复制。

说明

另请参阅

13.4 - 启用多站点服务端存储桶复制

本页中的过程用于在多个 MinIO 部署之间配置自动化的服务端存储桶复制。多站点 Active-Active 复制基于 启用双向服务端存储桶复制 过程,并增加了额外注意事项,以确保所有站点上的复制行为可预测。

Active-Active 复制可在多个远程部署之间同步数据。

多站点 Active-Active 复制配置可以跨越多个机架、数据中心或地理位置。多站点配置的部署与维护复杂度通常会随着站点数量和每个站点规模的增加而提高。计划实施多站点复制的企业应考虑借助 MinIO SUBNET 支持,以获取应对此类用例所需的专业知识、规划能力和工程资源。

说明

另请参阅

要求

你必须满足 Bucket Replication Requirements 中描述的所有存储桶复制基础要求。

此外,要创建多站点存储桶复制配置,你还必须满足以下额外要求:

访问所有集群

要设置多站点 Active-Active 存储桶复制,你必须具备访问所有部署的网络连通性,以及具有正确权限的登录凭证。

你可以通过安装 mc 并使用命令行访问这些部署。 使用 mc alias set 命令为每个 MinIO 部署创建别名。

创建别名时,需要指定该部署上某个用户的 access key。 该用户 必须 具有在该部署上创建和管理用户及策略的权限。

具体来说,请确保该用户 至少 具有以下权限:

注意事项

点击展开以下任意条目:

使用一致的复制设置

MinIO 支持自定义复制配置,以启用或禁用以下复制行为:

  • 复制 delete operations
  • 复制删除标记
  • 复制现有对象
  • 复制仅元数据变更

为存储桶配置复制规则时,请确保参与多站点复制的所有 MinIO 部署使用 相同 的复制行为,以保证对象同步的一致性和可预测性。

现有对象复制

MinIO 支持自动复制存储桶中的现有对象。

MinIO 要求使用 mc replicate add --replicatemc replicate update --replicate 显式启用现有对象复制,并包含 existing-objects 复制功能标志。 本过程包含用于启用现有对象复制的必需标志。

删除操作复制

MinIO 支持将 delete operations 复制到目标存储桶。 具体来说,MinIO 可以复制版本控制中的 Delete Markers,以及删除指定版本对象的操作:

  • 对对象执行删除操作时,MinIO 复制也会在目标存储桶上创建删除标记。
  • 对对象的某个版本执行删除操作时,MinIO 复制也会在目标存储桶上删除这些版本。

MinIO 要求使用 mc replicate add --replicatemc replicate update --replicate 显式启用删除操作复制。 本过程包含用于启用删除操作和删除标记复制的必需标志。

MinIO 不会 复制因应用 lifecycle management expiration rules 而产生的删除操作。 请在所有复制站点上为该存储桶配置一致的过期规则,以确保对象过期策略得到一致应用。

过程

对于参与多站点复制配置的每个 MinIO 部署,都需要重复执行本过程中的步骤。根据部署数量的不同,该过程在实施时可能需要投入大量时间并格外谨慎。MinIO 建议在尝试执行文档中的步骤之前,先完整阅读本过程。

使用命令行 mc 配置多站点存储桶复制

本过程使用占位符 ALIAS 来引用每个被配置为复制端点的 MinIO 部署的 alias。 请将这些值替换为各个 MinIO 部署对应的实际别名。

本过程假设每个别名都对应一个具备 necessary replication permissions 的用户。

说明

变更: RELEASE.2022-12-24T15-21-38Z

mc replicate add 会自动创建所需的复制目标,因此不再需要使用已弃用的 mc admin remote bucket add 命令。 本过程仅记录该版本及之后的操作方式。

1) 创建新的存储桶复制规则

使用 mc replicate add 命令,为每个 MinIO 部署添加新的复制规则。

mc replicate add ALIAS/BUCKET \
   --remote-bucket 'https://USER:PASSWORD@HOSTNAME:PORT/BUCKET' \
   --replicate "delete,delete-marker,existing-objects"
  • ALIAS 替换为源 MinIO 部署的 别名。 该名称 必须 与上一步创建远端目标时指定的存储桶名称一致。

  • BUCKET 替换为源部署上要作为复制源的存储桶名称。

  • 使用 --remote-bucket 指定 ALIAS/BUCKET 要复制到的远端 MinIO 部署和存储桶。

    USER:PASSWORD 必须对应远端部署上具有 所需复制权限 的用户。

    HOSTNAME:PORT 必须能解析到远端部署上可访问的 MinIO 实例。 BUCKET 必须已存在,并满足其他所有 复制要求

  • --replicate "delete,delete-marker,existing-objects" 标志会启用以下复制功能:

    有关更完整的文档,请参阅 mc replicate add --replicate。 省略任意字段即可禁用对应组件的复制。

可按需为 mc replicate add 指定其他受支持的可选参数。

对于参与多站点复制配置的每个远程 MinIO 部署,都要重复执行这些命令。 例如,一个由 MinIO 部署 minio1minio2minio3 组成的多站点复制配置,需要在每个部署上针对每个远程端重复执行此步骤。

具体来说,在这种场景下,需要在每个部署上执行两次此步骤:

  • minio1 部署上,为 minio2 创建一条规则,再为 minio3 单独创建另一条规则。
  • minio2 部署上,为 minio1 创建一条规则,再为 minio3 单独创建另一条规则。
  • minio3 部署上,为 minio1 创建一条规则,再为 minio2 单独创建另一条规则。

2) 验证复制配置

在其中一个部署上,使用 mc cp 将新对象复制到已启用复制的存储桶中。

mc cp ~/foo.txt ALIAS/BUCKET

使用 mc ls 验证目标存储桶中存在该对象:

mc ls ALIAS/BUCKET

在每个部署上重复执行此测试:复制一个新的唯一文件,并检查该文件是否已复制到其他每个部署。

你也可以使用 mc stat 检查该文件,以查看对象当前的 replication stage

13.5 - 从远程副本重新同步存储桶

本页中的步骤使用健康的复制远端来重新同步 MinIO 存储桶中的内容。重新同步可用于在副本配置下的 MinIO 部署发生部分或全部数据丢失后进行恢复。

例如,考虑如下所示的 MinIO 主动-主动复制配置:

主动-主动复制在两个远程部署之间同步数据。

重新同步允许使用其中一个参与复制的 MinIO 部署上的健康数据,作为重建另一个部署的源。

重新同步是按存储桶执行的过程。对于远端中每个遭受部分或全部数据丢失的存储桶,都必须重复执行重新同步。

说明

BC/DR 操作期间的专业支持

MinIO SUBNET 用户可以 登录 并创建与重新同步相关的新 issue。通过 SUBNET 与 MinIO Engineering 协调,可以确保重新同步成功并恢复正常运行,包括性能测试和健康诊断。

社区用户可以通过 MinIO Community Slack 寻求支持。社区支持仅按尽力而为原则提供,不对响应速度提供 SLA。

要求

MinIO 部署必须在线

重新同步要求源部署和目标部署都在线,并且能够接受读写操作。源端 必须 具备到远端的完整网络连通性。

远端部署可以处于“不健康”状态,即发生了部分或全部数据丢失。只要源端和目标端保持连通,重新同步就可以修复这些数据丢失问题。

重新同步要求现有复制配置

重新同步要求健康的源部署已经为不健康的目标存储桶配置好了复制配置。此外,重新同步仅适用于使用 existing object replication 选项创建的那些复制规则。

使用 mc replicate ls 查看健康源存储桶已配置的复制规则和目标。

复制要求对象加密设置匹配

MinIO 支持复制使用 SSE-KMSSSE-S3 加密的对象:

  • 对于使用 SSE-KMS 加密的对象,MinIO 要求 目标存储桶支持使用与源存储桶对象 加密时 相同的密钥名称 对对象执行 SSE-KMS 加密。
  • 对于使用 SSE-S3 加密的对象,MinIO 要求 目标存储桶同样支持 SSE-S3 对象加密,而不考虑密钥名称。

在复制过程中,MinIO 会先在源存储桶上对对象进行 解密,再通过网络传输未加密的 对象。目标 MinIO 部署随后会使用目标端的加密设置重新对该对象进行加密。 因此,MinIO 强烈建议 在源端和目标端部署上都 启用 TLS,以确保对象在传输过程中的安全。

MinIO 支持复制客户端加密对象(SSE-C)。

复制要求使用 MinIO 部署

MinIO 服务端复制仅适用于 MinIO 部署之间。 源端和目标端部署 都必须 运行版本匹配的 MinIO Server。

如需在任意 S3 兼容服务之间配置复制,请使用 mc mirror

复制要求启用版本控制

MinIO 依赖 版本控制 提供的不可变性保护来支持 复制和重新同步。

使用 mc version info 验证源存储桶和远端存储桶的版本控制状态。 必要时使用 mc version enable 命令启用版本控制。

如果你在源存储桶中将某个前缀或文件夹排除在版本控制之外,MinIO 就无法复制该文件夹 或前缀中的对象。

复制要求对象锁定状态匹配

MinIO 支持复制受 WORM 锁定 保护的对象。 两个复制存储桶 都必须 启用对象锁定,MinIO 才能复制被锁定的对象。 对于主动-主动配置,MinIO 建议在两个存储桶上使用 相同的 保留规则,以确保跨站点 行为一致。

根据 S3 的行为要求,你必须在创建存储桶时启用对象锁定。 随后,你可以在任何时候配置对象保留规则。 在开始此过程 之前,请先在状态异常的目标存储桶上配置所需规则。

注意事项

重新同步需要时间

重新同步是一个后台过程,会持续检查源 MinIO 存储桶中的对象,并在需要时将其复制到远端。完成复制所需的时间会因对象数量和大小、到远端 MinIO 部署的吞吐量以及源 MinIO 部署上的负载而异。由于这些变量的存在,总完成时间通常无法预测。

MinIO 建议在同步完成之前,通过配置负载均衡器或代理,仅将流量导向健康集群。以下命令可帮助了解重新同步状态:

  • 在源端执行 mc replicate resync status 以跟踪重新同步进度。
  • 在源端和远端执行 mc replicate status 以跟踪正常复制数据。
  • 在源端和远端都运行 mc ls -r --versions ALIAS/BUCKET | wc -l,以验证两端的对象总数和对象版本总数。

在数据丢失后重新同步对象

此过程使用现有的 MinIO replication configuration,将缺失数据恢复到参与该配置的某个 MinIO 部署。具体来说,一个健康的 MinIO 部署(即 SOURCE)会将其现有数据同步到不健康的 MinIO 部署(即 TARGET)。

此过程假定 SOURCE 已存在一个 alias,并且该别名具有配置复制所需的 necessary permissions

你可以对每个需要重新同步的存储桶重复执行此过程。每个存储桶同时最多只能运行一个复制作业。

1) 列出健康源端上已配置的复制目标

运行 mc replicate ls 命令,列出健康 SOURCE 部署上针对需要重新同步的 BUCKET 已配置的远程目标。

mc replicate ls SOURCE/BUCKET --json
  • SOURCE 替换为源 MinIO 部署的 alias
  • BUCKET 替换为要作为重新同步源的存储桶名称。

输出类似如下:

{
   "op": "",
   "status": "success",
   "url": "",
   "rule": {
      "ID": "cer1tuk9a3p5j68crk60",
      "Status": "Enabled",
      "Priority": 0,
      "DeleteMarkerReplication": {
         "Status": "Enabled"
      },
      "DeleteReplication": {
         "Status": "Enabled"
      },
      "Destination": {
         "Bucket": "arn:minio:replication::UUID:BUCKET"
      },
      "Filter": {
         "And": {},
         "Tag": {}
      },
      "SourceSelectionCriteria": {
         "ReplicaModifications": {
            "Status": "Enabled"
         }
      },
      "ExistingObjectReplication": {
         "Status": "Enabled"
      }
   }
}

输出中的每个文档都表示一条已配置的复制规则。 Destination.Bucket 字段指定该存储桶上某条规则对应的 ARN。 找出你希望从中重新同步对象的存储桶对应的正确 ARN。

2) 启动重新同步过程

运行 mc replicate resync start 命令以开始重新同步过程:

mc replicate resync start --remote-bucket "arn:minio:replication::UUID:BUCKET" SOURCE/BUCKET
  • --remote-bucket 的值替换为 TARGET MinIO 部署上不健康 BUCKET 的 ARN。
  • SOURCE 替换为源 MinIO 部署的 alias
  • BUCKET 替换为健康 SOURCE MinIO 部署上的存储桶名称。

该命令会返回一个重新同步作业 ID,表示该过程已经开始。

3) 监控重新同步

在源部署上使用 mc replicate resync status 命令跟踪已接收的复制数据:

mc replicate resync status ALIAS/BUCKET

输出类似如下:

mc replicate resync status /data
Resync status summary:
● arn:minio:replication::6593d572-4dc3-4bb9-8d90-7f79cc612f01:data
   Status: Ongoing
   Replication Status | Size (Bytes)    | Count
   Replicated         | 2.3 GiB         | 18
   Failed             | 0 B             | 0

重新同步过程完成后,Status 会更新为 Completed

4) 后续步骤

  • 如果 TARGET 存储桶的损坏已波及复制规则,则必须重新创建这些规则,使其与之前的复制配置一致。更多指导请参见 启用双向服务端存储桶复制
  • 执行基础验证,确认复制配置中的所有存储桶在 mc lsmc stat 等命令下显示出相近的结果。
  • 在恢复所有复制规则并验证站点间复制之后,你可以配置负责管理连接的反向代理、负载均衡器或其他网络控制平面,使其恢复向已重新同步的部署发送流量。

14 - 批处理框架

概述

MinIO 批处理框架允许使用 YAML 格式的作业定义文件(“batch file”)来创建、管理、监控和执行作业。 批处理作业直接在 MinIO 部署上运行,从而利用服务端处理能力,而不受运行 MinIO Client 的本地机器限制。

一个批处理文件定义一个作业任务。

启动后,MinIO 会开始处理该作业。 完成所需时间取决于部署可用的资源。

如果作业的任何部分失败,MinIO 会按照作业定义中指定的次数上限重试该作业。

MinIO 批处理框架支持以下作业类型:

作业类型 说明
replicate 执行一次性复制流程,将数据从一个 MinIO 位置复制到另一个 MinIO 位置。
keyrotate 执行一次性流程,轮换对象上的 sse-s3 or sse-kms 加密密钥。
expire 对存储桶中的对象执行一次性立即过期操作。

MinIO 批处理 CLI

mc batch 命令包括:

mc batch generate

mc batch generate 命令会为指定作业类型创建一个基础的 YAML 格式模板文件。

mc batch start

mc batch start 命令根据批处理作业 YAML 文件启动一个批处理作业。

mc batch list

mc batch list 命令会输出部署中当前正在进行的批处理作业列表。

mc batch status

mc batch status 命令会输出 MinIO 服务器上作业事件的汇总信息。

mc batch describe

mc batch describe 命令会输出指定作业 ID 的作业定义。

mc batch cancel

mc batch cancel 可停止正在进行的批处理作业。

mc batch 的访问权限

每个批处理作业都使用批处理定义中指定的凭证执行。 批处理作业能否成功,取决于这些凭证是否具有执行所有请求操作所需的适当 权限

执行批处理作业的用户必须具有以下权限。 也可以通过阻止或限制对这些操作的访问,来限制用户使用这些功能:

admin:ListBatchJobs

授予用户查看当前正在处理的批处理作业的能力。

admin:DescribeBatchJobs

授予用户查看当前正在处理的批处理作业定义详情的能力。

admin:StartBatchJob

授予用户启动批处理作业的能力。 该作业还可能受到其用于访问源部署或目标部署的凭证进一步限制。

admin:CancelBatchJob

允许用户停止当前正在进行的批处理作业。

可以将这些操作中的任意一个单独分配给用户,也可以任意组合分配。

内置的 ConsoleAdmin 策略包含执行所有这些类型批处理作业操作所需的充分访问权限。

Local 部署

可通过向 mc batch 命令传递一个 alias,对特定部署运行批处理作业。 命令中指定的部署会在该批处理作业的上下文中成为 local 部署。

15 - 核心管理概念

以下核心概念是管理 MinIO 部署的基础,包括但不限于对象保留、加密和访问管理。

什么是对象存储?

对象 是二进制数据,有时也称为 Binary Large OBject (BLOB)。 Blob 可以是图像、音频文件、电子表格,甚至是二进制可执行代码。 像 MinIO 这样的对象存储平台提供专门的工具和能力,用于存储、检索和搜索 Blob。

MinIO 对象存储使用 存储桶 来组织对象。 存储桶类似于文件系统中的文件夹或目录,每个存储桶都可以容纳任意数量的对象。 MinIO 存储桶提供与 AWS S3 存储桶相同的功能。

例如,考虑一个承载 Web 博客的应用程序。 该应用程序需要存储多种 Blob,包括视频和图像等富媒体内容。

MinIO 通过 prefixing 功能支持多级嵌套目录,从而支持变化最频繁的对象存储工作负载。

MinIO 如何确定对对象的访问权限?

MinIO 要求客户端在每次新操作时同时完成身份验证和授权。 因此,身份与访问管理(IAM) 是 MinIO 配置中的关键组成部分。

身份验证 用于验证连接客户端的身份。 MinIO 要求客户端使用 AWS Signature Version 4 协议 进行身份验证,并支持已弃用的 Signature Version 2 协议。 具体而言,客户端必须提供有效的 access key 和 secret key,才能访问任何 S3 或 MinIO 管理 API,例如 PUTGETDELETE 操作。

然后,MinIO 会检查已通过身份验证的用户或客户端是否具有在部署上执行操作或使用资源的 授权。 MinIO 使用 基于策略的访问控制(PBAC),其中每项策略描述一条或多条规则,用于定义用户或用户组的权限。 创建策略时,MinIO 支持 S3 特定的 操作条件

默认情况下,MinIO 会 拒绝 访问用户已分配或继承策略中未明确引用的操作或资源。

MinIO 将访问管理功能作为软件的一部分提供。 或者,你可以将 MinIO 配置为通过 Active Directory/LDAPOpenID/OIDC 之一与多个外部 IAM 提供方进行身份验证。

MinIO 如何保护数据?

MinIO 支持在对象位于磁盘上时(encryption-at-rest)以及从一个位置传输到另一个位置期间(encryption-in-transit,或 “in flight”)对对象进行加密的方法。 启用后,MinIO 使用 服务器端加密 以加密状态写入对象。 要检索并读取加密对象,用户必须具备适当的访问权限,并提供对象的解密密钥。

MinIO 支持 Transport Layer Security (TLS) 1.2 和 1.3,可对对象传输进行加密。 TLS 取代了此前使用且现已弃用的 Secure Socket Layer (SSL) 方法。 TLS 标准由 Internet Engineering Task Force (IETF) 维护,定义了互联网通信所使用的标准,以支持加密、身份验证和数据完整性。

对用户进行身份验证并验证其对象访问权限的过程称为 TLS Handshake。 身份验证完成后,TLS 提供用于加密和解密服务器与请求客户端之间信息传输的密码机制。

MinIO 支持多种 服务器端加密 方法。

我可以在存储桶内按文件夹结构组织对象吗?

MinIO 为每个对象使用 prefix 方法,以模拟传统文件系统中的文件夹结构。 前缀化是指在对象名称前附加一个固定字符串。

使用前缀时,无需手动创建文件夹和子文件夹。 相反,MinIO 会在对象名称的前缀中查找 / 字符。 每个 / 都表示一个新的文件夹或子文件夹。

MinIO 使用对象名称及其前缀,自动为已存储对象生成一系列文件夹和子文件夹。 当你在多个对象上使用相同的前缀字符串时,MinIO 会将其识别为相似对象或分组对象。

例如,名为 /articles/john.doe/2022-01-02-MinIO-Object-Storage.md 的对象最终会位于 articles 存储桶中名为 john.doe 的文件夹下。

一个 MinIO 对象存储可能类似于以下结构,其中包含三个存储桶。 MinIO 会根据这些对象的前缀在 articles 存储桶中自动生成两个文件夹。

/ #root
/images/
   2022-01-02-MinIO-Diagram.png
   2022-01-03-MinIO-Advanced-Deployment.png
   MinIO-Logo.png
/videos/
   2022-01-04-MinIO-Interview.mp4
/articles/
   /john.doe/
      2022-01-02-MinIO-Object-Storage.md
      2022-01-02-MinIO-Object-Storage-comments.json
   /jane.doe/
      2022-01-03-MinIO-Advanced-Deployment.png
      2022-01-02-MinIO-Advanced-Deployment-comments.json
      2022-01-04-MinIO-Interview.md

MinIO 本身不限制任何特定前缀可包含的对象数量。 但在前缀规模较大时,硬件和网络条件可能会对性能产生影响。

  • 对于采用普通或预算导向型硬件的部署,工作负载架构应以每个前缀 10,000 个对象作为基线目标。 再根据真实工作负载的基准测试和监控结果,将该目标提高到硬件能够有效承载的上限。
  • 使用高性能或企业级 硬件 的部署通常可以处理包含数百万个甚至更多对象的前缀。

MinIO SUBNET 企业账户可以将年度架构审查纳入部署和维护策略,以确保依赖 MinIO 的项目在长期内保持性能并获得成功。

有关限制前缀内容所带来收益的更深入讨论,请参阅 优化 S3 性能 一文。

如何在 MinIO 上备份和恢复对象?

MinIO 提供两种复制类型,用于将对象、其版本及其元数据从一个位置复制到另一个位置。 你可以在 存储桶级别站点级别 配置复制。

  • 存储桶级别复制既可以作为单向、主动-被动复制运行(例如用于归档),也可以作为双向、主动-主动复制运行,以保持两个存储桶彼此同步。
  • 站点级别复制以双向、主动-主动复制方式运行,以保持多个数据位置(例如不同地理位置的数据中心)彼此同步。

除复制外,MinIO 还提供镜像服务。 mc mirror 仅将实际对象复制到任何其他兼容 S3 的数据存储中,包括其他 MinIO 存储。 但是,版本和元数据不会随 mc mirror 命令一起备份。

说明

磁盘独占访问

MinIO 要求 对用于对象存储的磁盘或卷拥有 独占 访问权限。 任何其他进程、软件、脚本或人员都不应直接对提供给 MinIO 的磁盘或卷, 或 MinIO 在其上放置的对象或文件执行 任何 操作。

除非得到 MinIO Engineering 的明确指示,否则不要使用脚本或工具直接修改、 删除或移动这些磁盘上的任何数据分片、校验分片或元数据文件,包括在磁盘或节点 之间迁移这些文件。 这类操作极有可能导致大范围损坏和数据丢失,超出 MinIO 的自愈能力。

MinIO 提供哪些工具可根据访问速度和频率管理对象?

分层规则 允许将频繁访问的对象存储在热存储或温存储上,这类存储通常成本更高,但可提供更好的性能。

较少访问的对象可以迁移到冷存储。 冷存储通常以较低成本换取较慢性能。

MinIO 如何保护对象免受意外覆盖或删除?

锁定

锁是一种 Write Once Read Many (WORM) 机制,可防止对象被删除或修改。 对象被锁定后,MinIO 会无限期保留这些对象,直到有人移除锁或锁到期。

MinIO 提供:

  • 法律保留:面向所有用户的无限期保留锁
  • 合规保留:面向所有用户的基于时间的限制
  • 治理锁:面向非特权用户的基于时间的规则

版本控制

默认情况下,以相同名称(包括前缀)写入的对象会覆盖同名的现有对象。 MinIO 提供可创建启用版本控制的存储桶的配置选项。 版本控制 使你可以访问某个唯一命名对象随时间变化产生的不同版本。 启用后,MinIO 会将发生变更的对象写入与原始对象不同的版本,从而允许同时访问原始对象和更新后的对象。

MinIO 存储桶上的其他配置决定了存储桶中每个对象的旧版本保留时长。