跳转到主要内容

访问管理

概述

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 和资源的访问。