訪問管理¶
概述¶
MinIO 使用基於策略 policy 的訪問控制 (PBAC) 來定義經過身份驗證的用戶有權訪問的授權操作和資源。每個策略都描述一個或多個操作和條件,概述一個 user 或一組 user 的權限(group)。
MinIO PBAC 專為與 AWS IAM 策略語法、結構和行為兼容而構建。 MinIO 文檔盡力涵蓋 IAM 特定的行為和功能。請考慮遵循 IAM 文檔,以獲取有關 AWS IAM 特定主題的更完整文檔。
mc admin policy
命令支持在 MinIO 部署上創建和管理策略。有關使用示例,請參閱命令參考。
Tag-Based 策略條件¶
策略(policy)可以使用條件(condition)來限制用戶僅訪問具有特定標籤的 objects。
MinIO 支持針對選定操作的策略的基於標籤 tag-based conditionals的條件。在策略的 Condition
語句中使用 s3:ExistingObjectTag/<key>
。
Built-In 策略¶
MinIO 提供以下內置策略可用於分配給 user 或 group:
consoleAdmin
授予對 MinIO 部署上所有資源的所有 S3 和管理 API 操作的完全訪問權限。相當於以下一組操作:
s3:*
admin:*
readonly
授予對 MinIO 部署上任何對象的唯讀權限。 GET 操作必須應用於特定對象,而不需要任何列表。相當於以下一組操作:
s3:GetBucketLocation
s3:GetObject
例如,該策略專門支持對特定路徑上的對象進行 GET 操作(例如 GET play/mybucket/object.file
),例如:
mc cp
mc stat
mc head
mc cat
排除列出權限是有意為之的,因為典型的用例並不打算讓“唯讀”角色在對象存儲資源上具有完全的可發現性(列出所有存儲桶和對象)。
readwrite
授予 MinIO 服務器上所有存儲桶和對象的讀寫權限。相當於 s3:*
。
diagnostics
授予對 MinIO 部署執行診斷操作的權限。具體包括以下幾個動作:
admin:ServerTrace
admin:Profiling
admin:ConsoleLog
admin:ServerInfo
admin:TopLocksInfo
admin:OBDInfo
admin:BandwidthMonitor
admin:Prometheus
writeonly
授予對 MinIO 部署的任何命名空間(存儲桶和對象路徑)的唯寫權限。 PUT 操作必須應用於特定的對象位置,而不需要任何列表。相當於 s3:PutObject
操作。
使用 mc admin policy Attach
將策略關聯到 MinIO 部署上的 user 或 group。
例如,請考慮以下用戶表。每個用戶都被分配了一個內置策略或支持的操作。該表描述了客戶端在通過該用戶身份驗證後可以執行的操作子集:
User | Policy | Operations |
---|---|---|
Operations | readwrite on finance bucketreadonly on audit bucket | PUT and GET on finance bucket.PUT on audit bucket. |
Auditing | readonly on audit bucket | GET on audit bucket |
Admin | admin:* | All mc admin commands. |
每個用戶只能訪問內置角色明確授予的資源和操作。默認情況下,MinIO 拒絕訪問任何其他資源或操作。
Policy 文件結構¶
MinIO 策略文檔使用與 AWS IAM 策略文檔相同的架構。
以下範例文檔提供了一個模板,用於創建用於 MinIO 部署的自定義策略。有關 IAM 策略元素的更完整文檔,請參閱 IAM JSON 策略元素參考。Policy 文檔的最大大小為 2048 個字符。
{
"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 actions。
S3 API 支持的 Actions¶
MinIO 策略文檔支持 IAM S3 Action keys 的子集。
以下列出常見的 S3 操作的 actions:
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:ListBucket
控制對 ListObjectsV2 S3 API 操作的訪問。
s3:PutObject
控制對 PutObject S3 API 操作的訪問。
s3:DeleteObject
控制對 DeleteObject S3 API 操作的訪問。
s3:GetObject
控制對 GetObject S3 API 操作的訪問。
s3:PutObjectTagging
控制對 PutObjectTagging S3 API 操作的訪問。
s3:DeleteObjectTagging
控制對 DeleteObjectTagging S3 API 操作的訪問。
s3:GetObjectTagging
控制對 GetObjectTagging S3 API 操作的訪問。
Bucket Configuration¶
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 操作的訪問。
Multipart Upload¶
s3:AbortMultipartUpload
控制對 AbortMultipartUpload S3 API 操作的訪問。
s3:ListMultipartUploadParts
控制對 ListParts S3 API 操作的訪問。
s3:ListBucketMultipartUploads
控制對 ListMultipartUploads S3 API 操作的訪問。
Versioning and Retention¶
s3:PutBucketVersioning
控制對 PutBucketVersioning S3 API 操作的訪問。
s3:GetBucketVersioning
控制對 GetBucketVersioning S3 API 操作的訪問。
s3:DeleteObjectVersion
控制對 DeleteObjectVersion S3 API 操作的訪問。
s3:DeleteObjectVersionTagging
控制對 DeleteObjectVersionTagging S3 API 操作的訪問。
s3:GetObjectVersion
控制對 GetObjectVersion S3 API 操作的訪問。
s3:BypassGovernanceRetention
控制對在 GOVERNANCE
retention 模式下鎖定的 object 的 S3 API 操作的訪問:
PutObjectRetention
PutObject
DeleteObject
有關更多信息,請參閱有關 s3:BypassGovernanceRetention 的 S3 文檔。
s3:PutObjectRetention
控制對 PutObjectRetention S3 API 操作的訪問。
s3:GetObjectRetention
控制對 GetObjectRetention S3 API 操作的訪問。
s3:GetObjectLegalHold
控制對 GetObjectLegalHold S3 API 操作的訪問。
s3:PutObjectLegalHold
控制對 PutObjectLegalHold S3 API 操作的訪問。
s3:GetBucketObjectLockConfiguration
控制對 GetObjectLockConfiguration S3 API 操作的訪問。
s3:PutBucketObjectLockConfiguration
控制對 PutObjectLockConfiguration S3 API 操作的訪問。
Bucket Notifications¶
s3:GetBucketNotification
控制對 GetBucketNotification S3 API 操作的訪問。
s3:PutBucketNotification
控制對 PutBucketNotification S3 API 操作的訪問。
Object Lifecycle Management¶
s3:PutLifecycleConfiguration
控制對 PutLifecycleConfiguration S3 API 操作的訪問。
s3:GetEncryptionConfiguration
控制對 GetEncryptionConfiguration S3 API 操作的訪問。
Bucket Replication¶
s3:GetReplicationConfiguration
控制對 GetBucketReplication S3 API 操作的訪問。
s3:PutReplicationConfiguration
控制對 PutBucketReplication S3 API 操作的訪問。
支持 S3 Policy Condition Keys¶
MinIO 策略文檔支持 IAM conditional statements。
每個條件元素由 operators 和 condition keys 組成。 MinIO 支持 IAM 條件鍵的子集。有關任何列出的條件鍵的完整信息,請參閱 IAM Condition Element Documentation。
MinIO 支持所有受支持操作的以下條件鍵:
aws:Referer
aws:SourceIp
aws:UserAgent
aws:SecureTransport
aws:CurrentTime
aws:EpochTime
aws:PrincipalType
aws:userid
aws:username
x-amz-content-sha256
下表列出了特定操作的其他支持的條件鍵:
Action Key | Condition Keys |
---|---|
s3:GetObject | x-amz-server-side-encryption x-amz-server-side-encryption-customer-algorithm s3:ExistingObjectTag/<key> |
s3:ListBucket | prefix delimiter max-keys |
s3:PutObject | x-amz-copy-source x-amz-server-side-encryption x-amz-server-side-encryption-customer-algorithm x-amz-metadata-directive x-amz-storage-class object-lock-retain-until-date object-lock-mode object-lock-legal-hold s3:ExistingObjectTag/<key> |
s3:PutObjectRetention | x-amz-object-lock-remaining-retention-days x-amz-object-lock-retain-until-date x-amz-object-lock-mode |
s3:PutObjectLegalHold | object-lock-legal-hold |
s3:BypassGovernanceRetention | object-lock-remaining-retention-days object-lock-retain-until-date object-lock-mode object-lock-legal-hold |
s3:GetObjectVersion | versionid |
s3:DeleteObjectVersion | versionid |
s3:PutObjectTagging | s3:ExistingObjectTag/<key> |
s3:DeleteObjectTagging | s3:ExistingObjectTag/<key> |
Policy 變數¶
MinIO 支持使用 policy variable 自動將經過身份驗證的用戶和/或操作的上下文替換為用戶分配的一個或多個策略。使用 ${POLICYVARIABLE}
格式將策略的變量指定為條件或資源定義的一部分。 MinIO 策略變量的功能與 AWS IAM 策略元素類似:variables 和 tags。
每個 MinIO 身份提供者都支持自己的一組 policy variable:
MinIO Policy 變數¶
下表包含推薦的策略變量列表,用於授權 MinIO 管理的用戶:
Variable | Description |
---|---|
aws:referrer | The referrer in the HTTP header for the authenticated API call. |
aws:SourceIp | The source IP in the HTTP header for the authenticated API call. |
aws:username | The name of the user associated with the authenticated API call. |
例如,以下策略使用變量來替換經過身份驗證的用戶的用戶名作為資源字段的一部分,以便用戶只能訪問與其用戶名匹配的前綴:
{
"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}
變量替換為用戶名。然後,MinIO 評估該策略並授予或撤銷對所請求的 API 和資源的訪問權限。
OpenID Policy 變數¶
下表包含支持的策略變量的列表,用於授權 OIDC 管理的用戶。
每個變量對應於作為經過身份驗證的用戶的 JWT 令牌的一部分返回的 claim:
Variable | Description |
---|---|
jwt:sub | Returns the sub claim for the user. |
jwt:iss | Returns the Issuer Identifier claim from the ID token. |
jwt:aud | Returns the Audience claim from the ID token. |
jwt:jti | Returns the JWT ID claim from the client authentication information. |
jwt:upn | Returns the User Principal Name claim from the client authentication information. |
jwt:name | Returns the name claim for the user. |
jwt:groups | Returns the groups claim for the user. |
jwt:given_name | Returns the given_name claim for the user. |
jwt:family_name | Returns the family_name claim for the user. |
jwt:middle_name | Returns the middle_name claim for the user. |
jwt:nickname | Returns the nickname claim for the user. |
jwt:preferred_username | Returns the preferred_username claim for the user. |
jwt:profile | Returns the profile claim for the user. |
jwt:picture | Returns the picture claim for the user. |
jwt:website | Returns the website claim for the user. |
jwt:email | Returns the email claim for the user. |
jwt:gender | Returns the gender claim for the user. |
jwt:birthdate | Returns the birthdate claim for the user. |
jwt:phone_number | Returns the phone_number claim for the user. |
jwt:address | Returns the address claim for the user. |
jwt:scope | Returns the scope claim for the user. |
jwt:client_id | Returns the client_id claim for the user. |
有關這些範圍的更多信息,請參閱 OpenID Connect Core 1.0 文檔。您選擇的 OIDC 提供商可能有更具體的文檔。
例如,以下策略使用變量來替換經過身份驗證的用戶的 PreferredUsername
作為資源字段的一部分,以便用戶只能訪問與其用戶名匹配的前綴:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {"StringLike": {"s3:prefix": ["${jwt:PreferredUsername}/*"]}}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${jwt:PreferredUsername}/*"]
}
]
}
MinIO 將 Resource 字段中的 ${jwt:PreferredUsername}
變量替換為 JWT 令牌中的 PreferredUsername
的值。然後,MinIO 評估該策略並授予或撤銷對所請求的 API 和資源的訪問權限。
Active Directory/LDAP Policy 變數¶
下表包含用於授權 AD/LDAP 用戶的受支持策略變量的列表:
Variable | Description |
---|---|
ldap:username | The simple username (name) for the authenticated user.This is distinct from the user’s DistinguishedName or CommonName. |
ldap:user | The Distinguished Name (DN) used by the authenticated user. |
ldap:groups | The Group Distinguished Name (DN) for the authenticated user. |
例如,以下策略使用變量來替換經過身份驗證的用戶的名稱作為資源字段的一部分,以便用戶只能訪問與其名稱匹配的前綴:
{
"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}
變量替換為經過身份驗證的用戶名的值。然後,MinIO 評估該策略並授予或撤銷對所請求的 API 和資源的訪問權限。