文档

访问管理

概述

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

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

MinIO 服务器端复制所需的权限。

支持以下附加 条件键

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

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

用于同步 MinIO 服务器端复制的一部分的 删除操作 所需的权限。

支持以下附加 条件键

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

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

MinIO 服务器端复制所需的权限。

支持以下附加 条件键

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

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

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 会将 ${ldap:username} 变量在 Resource 字段中替换为经过身份验证用户的 name 的值。然后 MinIO 会评估策略,并授予或撤销对请求的 API 和资源的访问权限。