文档

访问管理

概述

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

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

在 MinIO 部署中,mc admin policy 命令支持创建和管理策略。有关使用示例,请参阅命令参考。

基于标签的策略条件

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 文档关于 s3:BypassGovernanceRetention 的内容。

支持以下额外的 条件键

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

aws:SourceIp

aws:username

已认证 API 调用的 HTTP 标头中的源 IP。

aws:username

{
"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}/*"]
      }
   ]
}

与已认证 API 调用关联的用户名。

例如,以下策略使用变量将已认证用户的用户名替换为 Resource 字段的一部分,以便用户只能访问与其用户名匹配的前缀

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 声明。

{
"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}/*"]
      }
   ]
}

有关这些范围的更多信息,请参阅 OpenID Connect Core 1.0 文档。您选择的 OIDC 提供者可能具有更具体的文档。

例如,以下策略使用变量将已认证用户的 preferred_username 替换为 Resource 字段的一部分,以便用户只能访问与其用户名匹配的前缀

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

{
"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}/*"]
      }
   ]
}

已认证用户的组 Distinguished Name。