文档

访问管理

概述

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 操作(例如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

控制对 DeleteBucket S3 API 操作的访问,用于带有 x-minio-force-delete 标志的操作。要求删除非空存储桶。

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

Warning

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