文档

访问管理

概述

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

MinIO PBAC 构建为与 AWS IAM 策略语法、结构和行为兼容。MinIO 文档尽最大努力涵盖 IAM 特定的行为和功能。对于 AWS IAM 特定主题的更完整文档,请考虑参考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 操作(例如 GET play/mybucket/object.file),例如

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

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: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

已认证用户使用的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和资源的访问权限。