文档

访问管理

概述

MinIO 使用基于策略的访问控制 (PBAC) 来定义经过身份验证的用户有权访问的授权操作和资源。每个策略都描述了一个或多个操作条件,这些操作和条件概述了用户用户组的权限。

MinIO PBAC 构建为与 AWS IAM 策略语法、结构和行为兼容。MinIO 文档尽力涵盖特定于 IAM 的行为和功能。请考虑参考IAM 文档以获取有关特定于 AWS IAM 主题的更完整文档。

mc admin policy命令支持在 MinIO 部署上创建和管理策略。请参阅命令参考以获取使用示例。

基于标签的策略条件

在版本 RELEASE.2022-10-02T19-29-29Z 中更改: 策略可以使用条件将用户的访问权限仅限于具有特定标签的对象。

MinIO 支持基于标签的条件用于选定操作的策略。在策略的Condition语句中使用s3:ExistingObjectTag/<key>

内置策略

MinIO 提供以下内置策略,用于分配给用户

consoleAdmin

授予对 MinIO 部署上所有资源的所有 S3 和管理 API 操作的完全访问权限。相当于以下操作集

readonly

授予对 MinIO 部署上任何对象的只读权限。GET 操作*必须*应用于特定对象,无需任何列表。相当于以下操作集

例如,此策略专门支持对特定路径(例如GET play/mybucket/object.file)上的对象的 GET 操作,例如

排除列表权限是有意的,因为典型用例不希望“只读”角色对对象存储资源具有完全的可发现性(列出所有存储桶和对象)。

readwrite

授予 MinIO 服务器上所有存储桶和对象的读写权限。等效于 s3:*

diagnostics

授予对 MinIO 部署执行诊断操作的权限。具体包括以下操作

writeonly

授予 MinIO 部署中任何命名空间(存储桶和对象路径)的只写权限。PUT 操作*必须*应用于特定对象位置,无需任何列出操作。等效于 s3:PutObject 操作。

使用 mc admin policy attach 将策略关联到 MinIO 部署上的用户或组。

例如,考虑以下用户表。每个用户都分配了一个 内置策略 或受支持的 操作。该表描述了如果以该用户身份进行身份验证,客户端可以执行的一些操作。

用户

策略

操作

操作

readwritefinance 存储桶上
readonlyaudit 存储桶上
PUTGETfinance 存储桶上。
GETaudit 存储桶上

审计

readonlyaudit 存储桶上

GETaudit 存储桶上

管理员

admin:*

所有 mc admin 命令。

每个用户只能访问内置角色*明确*授予的那些资源和操作。默认情况下,MinIO 拒绝访问任何其他资源或操作。

Deny 覆盖 Allow

MinIO 遵循 IAM 策略评估规则,其中 Deny 规则会覆盖同一操作/资源上的 Allow 规则。例如,如果用户有一个明确分配的策略,其中包含一个针对操作/资源的 Allow 规则,而其某个组有一个分配的策略,其中包含针对该操作/资源的 Deny 规则,则 MinIO 仅应用 Deny 规则。

有关 IAM 策略评估逻辑的更多信息,请参阅 IAM 文档上的 确定帐户内请求是否允许或拒绝

策略文档结构

MinIO 策略文档使用与 AWS IAM 策略 文档相同的模式。

以下示例文档提供了用于创建自定义策略以与 MinIO 部署一起使用的模板。有关 IAM 策略元素的完整文档,请参阅 IAM JSON 策略元素参考

任何单个策略文档的最大大小为 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 资源规范 使用 *? 通配符。

    * 通配符可能会导致策略意外地应用于多个存储桶或前缀,具体取决于 模式匹配。例如,arn:aws:s3:::data* 将匹配存储桶 datadata_privatedata_internal。仅将 * 指定为资源键会将策略应用于部署上的所有存储桶和前缀。

  • 对于 Statement.Condition 键,您可以指定一个或多个 受支持的条件

受支持的 S3 策略操作

MinIO 策略文档支持 IAM S3 操作键 的一个子集。本节还包括特定操作支持的任何 条件键,这些键超出了受支持键的通用集合。

以下操作控制对常用 S3 操作的访问。其余小节记录了更高级 S3 操作的操作

s3:*

所有 MinIO S3 操作的选择器。将此操作应用于给定资源允许用户对该资源执行*任何* S3 操作。

s3:CreateBucket

控制对 CreateBucket S3 API 操作的访问。

s3:DeleteBucket

控制对 DeleteBucket S3 API 操作的访问。

s3:ForceDeleteBucket

控制对具有 x-minio-force-delete 标志的操作的 DeleteBucket S3 API 操作的访问。删除非空存储桶需要此操作。

s3:GetBucketLocation

控制对 GetBucketLocation S3 API 操作的访问。

s3:ListAllMyBuckets

控制对 ListBuckets S3 API 操作的访问。

s3:DeleteObject

控制对 DeleteObject S3 API 操作的访问。

s3:GetObject

控制对 GetObject S3 API 操作的访问。

支持以下其他 条件键

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:ExistingObjectTag/<key>
s3:versionid
s3:ListBucket

控制对 ListObjectsV2 S3 API 操作的访问。

支持以下其他 条件键

s3:prefix
s3:delimiter
s3:max-keys
s3:PutObject

控制对 PutObject S3 API 操作的访问。

支持以下其他 条件键

s3:x-amz-copy-source
s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
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

控制对 PutObjectTagging S3 API 操作的访问。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>
s3:GetObjectTagging

控制对 GetObjectTagging S3 API 操作的访问。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:DeleteObjectTagging

控制对 DeleteObjectTagging S3 API 操作的访问。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>

存储桶配置

s3:GetBucketPolicy

控制对 GetBucketPolicy S3 API 操作的访问。

s3:PutBucketPolicy

控制对 PutBucketPolicy S3 API 操作的访问。

s3:DeleteBucketPolicy

控制对 DeleteBucketPolicy S3 API 操作的访问权限。

s3:GetBucketTagging

控制对 GetBucketTagging S3 API 操作的访问权限。

s3:PutBucketTagging

控制对 PutBucketTagging S3 API 操作的访问权限。

支持以下其他 条件键

s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>

分段上传

s3:AbortMultipartUpload

控制对 AbortMultipartUpload S3 API 操作的访问权限。

s3:ListMultipartUploadParts

控制对 ListParts S3 API 操作的访问权限。

s3:ListBucketMultipartUploads

控制对 ListMultipartUploads S3 API 操作的访问权限。

版本控制和保留

s3:PutBucketVersioning

控制对 PutBucketVersioning S3 API 操作的访问权限。

s3:GetBucketVersioning

控制对 GetBucketVersioning S3 API 操作的访问权限。

s3:DeleteObjectVersion

控制对 DeleteObjectVersion S3 API 操作的访问权限。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:ListBucketVersions

控制对 ListBucketVersions S3 API 操作的访问权限。

支持以下其他 条件键

s3:prefix
s3:delimiter
s3:max-keys
s3:PutObjectVersionTagging

控制对 PutObjectVersionTagging S3 API 操作的访问权限。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:RequestObjectTagKeys
s3:RequestObjectTag/<key>
s3:GetObjectVersionTagging

控制对 GetObjectVersionTagging S3 API 操作的访问权限。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:DeleteObjectVersionTagging

控制对 DeleteObjectVersionTagging S3 API 操作的访问权限。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:GetObjectVersion

控制对 GetObjectVersion S3 API 操作的访问权限。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:BypassGovernanceRetention

控制对在 GOVERNANCE 保留模式下锁定的对象的以下 S3 API 操作的访问权限

  • s3:PutObjectRetention

  • s3:PutObject

  • s3:DeleteObject

有关更多信息,请参阅有关 s3:BypassGovernanceRetention 的 S3 文档。

支持以下其他 条件键

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

控制对 PutObjectRetention S3 API 操作的访问权限。

对于指定 保留元数据 的任何 PutObject 操作都必需。

支持以下其他 条件键

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:x-amz-object-lock-remaining-retention-days
s3:x-amz-object-lock-retain-until-date
s3:x-amz-object-lock-mode
s3:versionid
s3:GetObjectRetention

控制对 GetObjectRetention S3 API 操作的访问权限。

需要将 对象锁定元数据 作为对 GetObjectHeadObject 操作的响应的一部分。

支持以下其他 条件键

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:versionid
s3:GetObjectLegalHold

控制对 GetObjectLegalHold S3 API 操作的访问权限。

需要将 对象锁定元数据 作为对 GetObjectHeadObject 操作的响应的一部分。

s3:PutObjectLegalHold

控制对 PutObjectLegalHold S3 API 操作的访问权限。

对于指定 法律保留元数据 的任何 PutObject 操作都必需。

支持以下其他 条件键

s3:x-amz-server-side-encryption
s3:x-amz-server-side-encryption-customer-algorithm
s3:object-lock-legal-hold
s3:versionid
s3:GetBucketObjectLockConfiguration

控制对 GetObjectLockConfiguration S3 API 操作的访问权限。

s3:PutBucketObjectLockConfiguration

控制对 PutObjectLockConfiguration S3 API 操作的访问权限。

存储桶通知

s3:GetBucketNotification

控制对 GetBucketNotification S3 API 操作的访问权限。

s3:PutBucketNotification

控制对 PutBucketNotification S3 API 操作的访问权限。

s3:ListenNotification

MinIO 扩展,用于控制与 MinIO 存储桶通知相关的 API 操作。

此操作**不**适用于其他与 S3 兼容的服务。

s3:ListenBucketNotification

MinIO 扩展,用于控制与 MinIO 存储桶通知相关的 API 操作。

此操作**不**适用于其他与 S3 兼容的服务。

对象生命周期管理

s3:PutLifecycleConfiguration

控制对 PutLifecycleConfiguration S3 API 操作的访问权限。

s3:GetLifecycleConfiguration

控制对 GetLifecycleConfiguration S3 API 操作的访问权限。

对象加密

s3:PutEncryptionConfiguration

控制对 PutEncryptionConfiguration S3 API 操作的访问权限。

s3:GetEncryptionConfiguration

控制对 GetEncryptionConfiguration S3 API 操作的访问权限。

存储桶复制

s3:GetReplicationConfiguration

控制对 GetBucketReplication S3 API 操作的访问权限。

s3:PutReplicationConfiguration

控制对 PutBucketReplication S3 API 操作的访问权限。

s3:ReplicateObject

MinIO 扩展,用于控制与 服务器端存储桶复制 相关的 API 操作。

MinIO 服务器端复制所需。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:ReplicateDelete

MinIO 扩展,用于控制与 服务器端存储桶复制 相关的 API 操作。

作为 MinIO 服务器端复制的一部分,同步 删除操作 所需。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:ReplicateTags

MinIO 扩展,用于控制与 服务器端存储桶复制 相关的 API 操作。

MinIO 服务器端复制所需。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>
s3:GetObjectVersionForReplication

MinIO 扩展,用于控制与 服务器端存储桶复制 相关的 API 操作。

MinIO 服务器端复制所需。

支持以下其他 条件键

s3:versionid
s3:ExistingObjectTag/<key>

支持的 S3 策略条件键

MinIO 策略文档支持 IAM 条件语句

每个条件元素都包含 运算符 和条件键。MinIO 支持 IAM 条件键的一个子集。有关任何列出的条件键的完整信息,请参阅 IAM 条件元素文档

MinIO 支持以下条件键,适用于所有受支持的 操作

  • aws:Referer

  • aws:SourceIp

  • aws:UserAgent

  • aws:SecureTransport

  • aws:CurrentTime

  • aws:EpochTime

  • aws:PrincipalType

  • aws:userid

  • aws:username

  • x-amz-content-sha256

  • s3:signatureAge

警告

aws:Refereraws:SourceIpaws.UserAgent 键很容易被伪造,因此存在潜在的安全风险。MinIO 建议仅使用这些条件键来 *拒绝* 访问,作为辅助安全措施。

**切勿** 单独使用这三个键来授予访问权限。

有关特定 S3 操作支持的其他键,请参阅该操作的参考文档。

MinIO 扩展条件键

MinIO 使用以下扩展键扩展了 S3 标准条件键

sts:DurationSeconds

MinIO 版本新增功能: SERVER RELEASE.2024-02-06T21-36-22Z

指定一个以秒为单位的时间,以限制由 AssumeRoleWithWebIdentity 生成的 *所有* 安全令牌服务凭证的持续时间。

此值会覆盖指定给客户端的 DurationSeconds 字段。

例如

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Effect": "Allow",
            "Action": [
               "sts:AssumeRoleWithWebIdentity"
            ],
            "Condition": {
               "NumericLessThanEquals": {
                  "sts:DurationSeconds": "300"
               }
            }
      }
   ]
}

mc admin 策略操作键

MinIO 支持以下操作,用于定义 mc admin 操作的策略。这些操作 *仅* 对 MinIO 部署有效,不适用于其他与 S3 兼容的服务

admin:*

所有 admin 操作键的选择器。

admin:Heal

允许执行 heal 命令。

admin:StorageInfo

允许列出服务器信息。

admin:DataUsageInfo

允许列出数据使用信息。

admin:TopLocksInfo

允许列出顶级锁。

admin:Profiling

允许进行性能分析。

admin:ServerTrace

允许列出服务器跟踪。

admin:ConsoleLog

允许在终端上列出控制台日志。

admin:KMSCreateKey

允许创建一个新的 KMS 主密钥。

admin:KMSKeyStatus

允许获取 KMS 密钥状态。

admin:ServerInfo

允许列出服务器信息。

admin:OBDInfo

允许获取集群板载诊断信息。

admin:ServerUpdate

允许 MinIO 二进制文件更新。

admin:ServiceRestart

允许重新启动 MinIO 服务。

admin:ServiceStop

允许停止 MinIO 服务。

admin:ConfigUpdate

允许 MinIO 配置管理。

admin:CreateUser

允许创建 MinIO 用户。

admin:DeleteUser

允许删除 MinIO 用户。

admin:ListUsers

允许列出用户权限。

admin:EnableUser

允许启用用户权限。

admin:DisableUser

允许禁用用户权限。

admin:GetUser

允许对用户信息执行 GET 操作。

admin:AddUserToGroup

允许将用户添加到组的权限。

admin:RemoveUserFromGroup

允许将用户从组中移除的权限。

admin:GetGroup

允许获取组信息。

admin:ListGroups

允许列出组的权限。

admin:EnableGroup

允许启用组的权限。

admin:DisableGroup

允许禁用组的权限。

admin:CreatePolicy

允许创建策略的权限。

admin:DeletePolicy

允许删除策略的权限。

admin:GetPolicy

允许获取策略的权限。

admin:AttachUserOrGroupPolicy

允许将策略附加到用户/组。

admin:ListUserPolicies

允许列出用户策略。

admin:CreateServiceAccount

允许创建 MinIO 访问密钥。

admin:UpdateServiceAccount

允许更新 MinIO 访问密钥。

admin:RemoveServiceAccount

允许删除 MinIO 访问密钥。

admin:ListServiceAccounts

允许列出 MinIO 访问密钥。

admin:SetBucketQuota

允许设置存储桶配额。

admin:GetBucketQuota

允许获取存储桶配额

admin:SetBucketTarget

允许设置存储桶目标

admin:GetBucketTarget

允许获取存储桶目标

admin:SetTier

允许使用mc ilm tier命令创建和修改远程存储层。

admin:ListTier

允许使用mc ilm tier命令列出已配置的远程存储层。

admin:BandwidthMonitor

允许检索与当前带宽消耗相关的指标。

admin:Prometheus

允许访问 MinIO 指标。仅当 MinIO 需要身份验证才能抓取指标时才需要。

admin:ListBatchJobs

允许访问列出活动批处理作业。

admin:DescribeBatchJobs

允许访问查看正在运行的批处理作业的定义详细信息。

admin:StartBatchJob

允许用户开始批处理作业运行。

admin:CancelBatchJob

允许用户停止当前正在处理的批处理作业。

admin:Rebalance

允许访问启动、查询或停止跨具有不同可用存储空间的池的对象重新平衡。

mc admin 策略条件键

MinIO 支持以下条件,用于与为 mc admin 操作 定义策略一起使用。

  • aws:Referer

  • aws:SourceIp

  • aws:UserAgent

  • aws:SecureTransport

  • aws:CurrentTime

  • aws:EpochTime

有关任何列出的条件键的完整信息,请参阅IAM 条件元素文档

策略变量

MinIO 支持使用策略变量来自动将来自已认证用户和/或操作的上下文替换到用户分配的策略或策略中。使用 ${POLICYVARIABLE} 格式将变量指定给策略,作为 ConditionResource 定义的一部分。MinIO 策略变量的功能类似于AWS IAM 策略元素:变量和标签

每个 MinIO 身份提供程序 支持其自己的一组策略变量

MinIO 策略变量

下表包含用于授权MinIO 管理的用户的推荐策略变量列表

变量

描述

aws:referrer

已认证 API 调用的 HTTP 标头中的推荐来源。

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 令牌的一部分返回的声明

变量

描述

jwt:sub

返回用户的 sub 声明。

jwt:iss

返回 ID 令牌中的发行者标识符声明。

jwt:aud

返回 ID 令牌中的受众声明。

jwt:jti

返回客户端身份验证信息中的 JWT ID 声明。

jwt:upn

返回客户端身份验证信息中的用户主体名称声明。

jwt:name

返回用户的 name 声明。

jwt:groups

返回用户的 groups 声明。

jwt:given_name

返回用户的 given_name 声明。

jwt:family_name

返回用户的 family_name 声明。

jwt:middle_name

返回用户的 middle_name 声明。

jwt:nickname

返回用户的 nickname 声明。

jwt:preferred_username

返回用户的 preferred_username 声明。

jwt:profile

返回用户的 profile 声明。

jwt:picture

返回用户的 picture 声明。

jwt:website

返回用户的 website 声明。

jwt:email

返回用户的 email 声明。

jwt:gender

返回用户的 gender 声明。

jwt:birthdate

返回用户的 birthdate 声明。

jwt:phone_number

返回用户的 phone_number 声明。

jwt:address

返回用户的 address 声明。

jwt:scope

返回用户的 scope 声明。

jwt:client_id

返回用户的 client_id 声明。

有关这些范围的更多信息,请参阅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 令牌中 preferred_username 的值。然后,MinIO 会评估策略并授予或撤销对请求的 API 和资源的访问权限。

Active Directory / LDAP 策略变量

下表包含用于授权AD/LDAP 用户的支持的策略变量列表

变量

描述

ldap:username

已认证用户的简单用户名 (name)。

这与用户的 DistinguishedName 或 CommonName 不同。

ldap:user

已认证用户使用的可分辨名称。

ldap:groups

已认证用户的组可分辨名称。

例如,以下策略使用变量将已认证用户的 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 和资源的访问权限。