访问管理
概述
MinIO 使用基于策略的访问控制(PBAC)来定义经过身份验证的用户有权访问的授权操作和资源。 每个策略描述一个或多个动作和条件概述权限的用户 or group的用户。
MinIO PBAC 专为兼容 AWS IAM 策略语法、结构和行为而构建。 MinIO 文档会尽力涵盖 IAM 特定的行为和功能。 建议参考IAM 文档有关 AWS IAM 特定主题的更完整文档。
Themc admin policy该命令支持在 MinIO 部署上创建和管理策略。
有关使用示例,请参阅命令参考文档。
基于标签的策略条件
Changed in version RELEASE.2022-10-02T19-29-29Z:策略可以使用条件来限制用户仅能访问具有特定属性的对象特定标签.
MinIO 支持基于标签的条件语句对于政策selected actions使用s3:ExistingObjectTag/<key>在Condition政策声明。
内置策略
- 只读
授予对 MinIO 部署中任何对象的只读权限。GET 操作必须应用于特定对象,无需任何列表。 等同于以下一组操作:
例如,此策略专门支持对特定路径上的对象执行GET操作(例如,
GET play/mybucket/object.file),例如:排除列出权限是故意的,因为典型使用场景并不希望"只读"角色对对象存储资源具有完全可发现性(列出所有存储桶和对象)。
- 读写
授予对 MinIO 服务器上所有存储桶和对象的读写权限。相当于
s3:*.
- 只写
授予对任何命名空间(存储桶和对象路径)的仅写权限 MinIO 部署。PUT 操作必须应用于特定对象 位置,无需任何列表。 相当于
s3:PutObject动作。
使用mc admin policy attach将策略关联到 MinIO 部署中的用户或组。
例如,考虑以下用户表。每个用户被分配了一个内置策略或 受支持的行动该表描述了客户端在通过该用户身份验证后可以执行的操作子集:
用户 |
政策 |
操作 |
|---|---|---|
|
PUT和GET on financebucket.GET on audit桶 |
|
|
readonly on audit桶 |
|
|
All |
每个用户只能访问那些资源和操作明确地由内置角色授予的权限。MinIO 默认拒绝访问任何其他资源或操作。
Deny覆盖Allow
MinIO 遵循 IAM 策略评估规则,其中Deny规则覆盖Allow同一操作/资源上的规则。例如,如果用户拥有一个明确分配的包含Allow操作/资源的规则
当其某个组具有已分配的策略时Deny该操作/资源的规则,MinIO 将仅应用Denyrule.
有关IAM策略评估逻辑的更多信息,请参阅IAM文档中的确定账户内请求是被允许还是被拒绝.
策略文档结构
MinIO 策略文档使用与AWS IAM Policy文档。
以下示例文档提供了一个模板,用于创建与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.Actionarray, specify one or more支持的 S3 API 操作.对于
Statement.Resourcekey, 指定要限制策略的存储桶或存储桶前缀。 您可以使用*和?通配符字符按照S3 Resource Spec.The
*通配符可能导致策略意外应用于多个存储桶或前缀模式匹配例如,arn:aws:s3:::data*将匹配这些存储桶data,data_private和data_internal仅指定*由于资源键将策略应用于部署中的所有存储桶和前缀。对于
Statement.Condition键,您可以指定一个或多个支持的 Conditions.
支持的 S3 策略操作
MinIO 策略文档支持 IAM 的子集功能S3 Action keys本节还包括任何条件键除了通用支持键集之外,还受到特定操作的支持。
以下操作控制对常见 S3 操作的访问权限。 其余小节将记录更高级 S3 操作的相关操作:
- s3:*
选择器用于全部MinIO S3 operations. Applying this action to a given resource allows the user to perform任何对该资源的 S3 操作。
- s3:CreateBucket
控制对CreateBucketS3 API 操作
- s3:DeleteBucket
控制对DeleteBucketS3 API 操作
- s3:ForceDeleteBucket
控制对DeleteBucketS3 API 操作,用于执行与
x-minio-force-deleteflag. 删除非空存储桶时需要此参数。
- s3:GetBucketLocation
控制对GetBucketLocationS3 API 操作。
- s3:ListAllMyBuckets
控制对ListBucketsS3 API 操作。
- s3:DeleteObject
控制对DeleteObjectS3 API 操作。
- s3:GetObject
控制对GetObjectS3 API 操作。
支持以下附加功能条件键:
s3:x-amz-server-side-encryption s3:x-amz-server-side-encryption-customer-algorithm s3:ExistingObjectTag/<key> s3:versionid
- s3:GetObjectAttributes
控制对GetObjectAttributesS3 API 操作。
- s3:GetObjectVersionAttributes
控制对GetObjectAttributesS3 API 对版本化对象的操作。
- s3:RestoreObject
控制对RestoreObjectS3 API 操作。
- s3:ListBucket
控制对ListObjectsV2S3 API 操作。
支持以下附加功能条件键:
s3:prefix s3:delimiter s3:max-keys
- s3:PutObject
控制对PutObjectS3 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
控制对PutObjectTaggingS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key> s3:RequestObjectTagKeys s3:RequestObjectTag/<key>
- s3:GetObjectTagging
控制对GetObjectTaggingS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
- s3:DeleteObjectTagging
控制对DeleteObjectTaggingS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
Bucket Configuration
- s3:GetBucketPolicy
控制对GetBucketPolicyS3 API 操作。
- s3:PutBucketPolicy
控制对PutBucketPolicyS3 API 操作。
- s3:DeleteBucketPolicy
控制对DeleteBucketPolicyS3 API 操作。
- s3:GetBucketTagging
控制对GetBucketTaggingS3 API 操作。
- s3:PutBucketTagging
控制对PutBucketTaggingS3 API 操作。
支持以下附加功能条件键:
s3:RequestObjectTagKeys s3:RequestObjectTag/<key>
- s3:GetBucketPolicyStatus
控制对GetBucketPolicyStatusS3 API 操作。
Multipart Upload
- s3:AbortMultipartUpload
控制对中止分段上传S3 API 操作。
- s3:ListMultipartUploadParts
控制对ListPartsS3 API 操作
- s3:ListBucketMultipartUploads
控制对列出分段上传S3 API 操作。
版本控制与保留策略
- s3:PutBucketVersioning
控制对PutBucketVersioningS3 API 操作。
- s3:GetBucketVersioning
控制对GetBucketVersioningS3 API 操作。
- s3:DeleteObjectVersion
控制对DeleteObjectVersionS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
- s3:ListBucketVersions
控制对ListBucketVersionsS3 API 操作。
支持以下附加功能条件键:
s3:prefix s3:delimiter s3:max-keys
- s3:PutObjectVersionTagging
控制对PutObjectVersionTaggingS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key> s3:RequestObjectTagKeys s3:RequestObjectTag/<key>
- s3:GetObjectVersionTagging
控制对GetObjectVersionTaggingS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
- s3:DeleteObjectVersionTagging
控制对DeleteObjectVersionTaggingS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
- s3:GetObjectVersion
控制对GetObjectVersionS3 API 操作。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
- s3:BypassGovernanceRetention
控制对以下S3 API操作的访问权限,这些操作针对被锁定的对象:
GOVERNANCE保留模式:s3:PutObjectRetentions3:PutObjects3: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
控制对PutObjectRetentionS3 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
控制对GetObjectRetentionS3 API 操作。
包含所需对象锁定元数据作为对某个请求的响应的一部分
GetObjectorHeadObject操作。支持以下附加功能条件键:
s3:x-amz-server-side-encryption s3:x-amz-server-side-encryption-customer-algorithm s3:versionid
- s3:GetObjectLegalHold
控制对GetObjectLegalHoldS3 API 操作。
包含所需对象锁定元数据作为对某个请求的响应的一部分
GetObjectorHeadObject操作。
- s3:PutObjectLegalHold
控制对PutObjectLegalHoldS3 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
控制对GetObjectLockConfigurationS3 API 操作。
- s3:PutBucketObjectLockConfiguration
控制对PutObjectLockConfigurationS3 API 操作。
存储桶通知
- s3:GetBucketNotification
控制对GetBucketNotificationS3 API 操作。
- s3:PutBucketNotification
控制对PutBucketNotificationS3 API 操作。
对象生命周期管理
- s3:PutLifecycleConfiguration
控制对PutLifecycleConfigurationS3 API 操作。
- s3:GetLifecycleConfiguration
控制对GetLifecycleConfigurationS3 API 操作。
对象加密
- s3:PutEncryptionConfiguration
控制对PutEncryptionConfigurationS3 API 操作。
- s3:GetEncryptionConfiguration
控制对GetEncryptionConfigurationS3 API 操作。
存储桶复制
- s3:GetReplicationConfiguration
控制对GetBucketReplicationS3 API 操作。
- s3:PutReplicationConfiguration
控制对PutBucketReplicationS3 API 操作。
- s3:ReplicateObject
MinIO 扩展,用于控制与 API 操作相关的服务器端存储桶复制.
MinIO 服务器端复制所需。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
- s3:ReplicateDelete
MinIO 扩展,用于控制与 API 操作相关的服务器端存储桶复制.
同步所需删除操作作为 MinIO 服务器端复制的一部分。
支持以下附加功能条件键:
s3:versionid s3:ExistingObjectTag/<key>
支持的 S3 策略条件键
MinIO policy documents support IAM条件语句.
每个条件元素由运算符和条件键。MinIO 支持 IAM 条件键的一个子集。 有关任何列出的条件键的完整信息,请参阅IAM 条件元素文档
MinIO 支持以下适用于所有受支持操作的条件键:动作:
aws:Refereraws:SourceIpaws:UserAgentaws:SecureTransportaws:CurrentTimeaws:EpochTimeaws:PrincipalTypeaws:useridaws:usernamex-amz-content-sha256s3:signatureAge
警告
Theaws:Referer, aws:SourceIp和aws.UserAgent密钥可能容易被伪造,因此存在潜在的安全风险。
MinIO建议仅将这些条件密钥用于拒绝作为辅助安全措施的访问权限。
从不使用这三个密钥自行授予访问权限。
有关特定 S3 操作支持的附加键,请参阅该操作的参考文档。
MinIO 扩展条件键
MinIO 扩展了 S3 标准条件键,新增了以下扩展键:
sts:DurationSeconds
MinIO 版本新增功能:SERVER RELEASE.2024-02-06T21-36-22Z
指定一个以秒为单位的时间来限制持续时间全部由 Security Token Service 生成的凭据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:KMSCreateKey
允许创建新的KMS主密钥
虽然此选项仍受支持,
kms:CreateKey首选。
- admin:KMSKeyStatus
允许获取KMS密钥状态
虽然此选项仍受支持,
kms:KeyStatus首选。
- admin:SetTier
允许使用远程存储层创建和修改功能
mc ilm tier命令。
- admin:ListTier
允许使用以下命令列出已配置的远程存储层级
mc ilm tier命令。
- admin:Prometheus
允许访问 MinIO指标仅当 MinIO 需要身份验证才能抓取指标时才需要。
KMS 策略操作密钥
MinIO 支持通过策略限制密钥管理服务(KMS)操作。
您可以在策略中使用以下任意 KMS 操作来限制 KMS 活动:
要选择所有可用的 KMS 策略操作,请使用kms:*.
Changed in version RELEASE.2024-07-16T23-46-41Z:KMS 操作可以通过资源或资源前缀进行限制。
通配符*可用于将KMS操作策略应用于所有匹配此前缀的资源。
例如,以下策略文档允许用户列出密钥、创建新密钥以及检查以keys-abc- or myuser-.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:CreateKey",
"kms:KeyStatus",
"kms:ListKeys"
],
"Resource": [
"arn:minio:kms:::keys-abc-*",
"arn:minio:kms:::myuser-*"
]
}
]
}
mc admin策略条件键
MinIO 支持以下用于定义策略的条件:mc admin 动作.
aws:Refereraws:SourceIpaws:UserAgentaws:SecureTransportaws:CurrentTimeaws:EpochTime
有关任何列出的条件键的完整信息,请参阅IAM 条件元素文档.
策略变量
MinIO 支持使用策略变量来自动将经过身份验证的用户和/或操作的上下文替换到分配给用户的策略中。
使用${POLICYVARIABLE}format 将变量指定为策略的一部分Condition or Resource定义。
MinIO 策略变量的功能类似于AWS IAM 策略元素:变量和标签.
每个 MinIO身份提供者支持其自身的一组策略变量:
MinIO Policy Variables
以下表格包含用于授权的推荐策略变量列表MinIO管理的用户:
变量 |
描述 |
|---|---|
HTTP 头部中用于身份验证 API 调用的引用来源。 |
|
已验证 API 调用的 HTTP 标头中的源 IP。 |
|
与经过身份验证的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 取代了${aws:username}变量在Resource包含用户名的字段。
MinIO 随后评估策略并授予或撤销对请求的 API 和资源的访问权限。
OpenID 策略变量
以下表格包含可用于授权的受支持策略变量列表OIDC管理的用户.
每个变量对应一个声明,这些声明作为已认证用户的JWT令牌的一部分返回:
变量 |
描述 |
|---|---|
|
返回 |
|
返回 ID 令牌中的签发者标识符声明。 |
|
返回 ID 令牌中的 Audience 声明。 |
|
返回客户端认证信息中的 JWT 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 取代了${jwt:preferred_username}变量在Resource值为该字段的preferred_username在 JWT 令牌中。
MinIO 随后评估策略并授予或撤销对请求的 API 和资源的访问权限。
Active Directory / LDAP 策略变量
以下表格包含可用于授权的受支持策略变量列表AD/LDAP用户:
变量 |
描述 |
|---|---|
|
|
|
已验证用户所使用的专有名称。 |
|
已验证用户的分组专有名称。 |
例如,以下策略使用变量来替代经过身份验证的用户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字段的值为已认证用户的nameMinIO随后评估策略并授予或撤销对请求API和资源的访问权限。