文档

访问管理

概述

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 部署上的用户或组关联。

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

用户

策略

操作

操作

readwrite on finance bucket
readonly on audit bucket
PUT and GET on finance bucket.
GET on audit bucket

审计

readonly on audit bucket

GET on audit bucket

管理员

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

警告

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 metrics。仅当 MinIO 需要身份验证才能抓取指标时才需要。

admin:ListBatchJobs

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

admin:DescribeBatchJobs

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

admin:StartBatchJob

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

admin:CancelBatchJob

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

admin:Rebalance

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

mc admin 策略条件键

MinIO 支持以下条件,用于定义 mc admin actions 的策略。

  • 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 和资源的访问权限。