存取管理
概觀
MinIO 使用基於原則的存取控制 (PBAC) 來定義已驗證使用者有權存取的授權動作和資源。每個原則描述一個或多個動作和條件,這些動作和條件概述了使用者或使用者群組的權限。
MinIO PBAC 的設計旨在與 AWS IAM 原則語法、結構和行為相容。MinIO 文件盡力涵蓋 IAM 特定的行為和功能。請參考IAM 文件,以獲得有關 AWS IAM 特定主題的更完整文件。
mc admin policy
命令支援在 MinIO 部署上建立和管理原則。請參閱命令參考以取得使用範例。
基於標籤的原則條件
內建策略
- readonly
授予對 MinIO 部署上任何物件的唯讀權限。GET 動作必須應用於特定物件,而無需任何清單。等同於以下動作集:
例如,此策略特別支援對特定路徑上的物件執行 GET 操作(例如
GET play/mybucket/object.file
),例如:排除清單權限是故意的,因為典型的使用案例並不希望「唯讀」角色在物件儲存資源上具有完整的可探索性(列出所有儲存貯體和物件)。
- readwrite
授予對 MinIO 伺服器上所有儲存貯體和物件的讀取和寫入權限。等同於
s3:*
。
- writeonly
授予對 MinIO 部署上任何命名空間(儲存貯體和物件路徑)的唯寫權限。PUT 動作必須應用於特定物件位置,而無需任何清單。等同於
s3:PutObject
動作。
使用mc admin policy attach
將策略關聯到 MinIO 部署上的使用者或群組。
例如,請考慮以下使用者表。每個使用者都被指派一個內建策略或一個支援的動作。此表描述了如果使用者以該使用者身分驗證時,用戶端可以執行的一組操作子集:
使用者 |
策略 |
操作 |
---|---|---|
|
在
finance 儲存貯體上執行 PUT 和 GET 。在
audit 儲存貯體上執行 GET |
|
|
在
audit 儲存貯體上的readonly |
在 |
|
所有 |
每個使用者只能存取由內建角色明確授予的那些資源和操作。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*
將會比對data
、data_private
和data_internal
儲存貯體。僅指定*
作為資源金鑰會將策略應用於部署中的所有儲存貯體和前置詞。針對
Statement.Condition
金鑰,您可以指定一個或多個支援的條件。
支援的 S3 策略動作
MinIO 策略文件支援 IAM S3 動作金鑰的子集。本節還包含特定動作支援的任何條件金鑰,超出支援金鑰的常見集合。
以下動作控制對常見 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 操作的存取權。
若要在
GetObject
或HeadObject
操作的回應中包含物件鎖定元數據,則必須具備此權限。支援下列額外的條件金鑰
s3:x-amz-server-side-encryption s3:x-amz-server-side-encryption-customer-algorithm s3:versionid
- s3:GetObjectLegalHold
控制對 GetObjectLegalHold S3 API 操作的存取權。
若要在
GetObject
或HeadObject
操作的回應中包含物件鎖定元數據,則必須具備此權限。
- 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: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
用於控制與伺服器端儲存貯體複寫相關的 API 操作的 MinIO 擴充功能。
MinIO 伺服器端複寫所必需。
支援下列額外的條件金鑰
s3:versionid s3:ExistingObjectTag/<key>
- s3:ReplicateDelete
用於控制與伺服器端儲存貯體複寫相關的 API 操作的 MinIO 擴充功能。
作為 MinIO 伺服器端複寫的一部分,同步刪除操作所必需。
支援下列額外的條件金鑰
s3:versionid s3:ExistingObjectTag/<key>
- s3:ReplicateTags
用於控制與伺服器端儲存貯體複寫相關的 API 操作的 MinIO 擴充功能。
MinIO 伺服器端複寫所必需。
支援下列額外的條件金鑰
s3:versionid s3:ExistingObjectTag/<key>
- s3:GetObjectVersionForReplication
用於控制與伺服器端儲存貯體複寫相關的 API 操作的 MinIO 擴充功能。
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:Referer
、aws:SourceIp
和 aws.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:SetTier
允許使用
mc ilm tier
命令建立和修改遠端儲存層。
- admin:ListTier
允許使用
mc ilm tier
命令列出已設定的遠端儲存層。
- admin:Prometheus
允許存取 MinIO 指標。僅當 MinIO 需要驗證才能抓取指標時才需要。
mc admin
原則條件金鑰
MinIO 支援以下條件,以便用於定義 mc admin
動作 的原則。
aws:Referer
aws:SourceIp
aws:UserAgent
aws:SecureTransport
aws:CurrentTime
aws:EpochTime
如需任何列出的條件金鑰的完整資訊,請參閱 IAM 條件元素文件。
原則變數
MinIO 支援使用原則變數,以自動將經過驗證的使用者和/或操作的內容替換到使用者已指派的原則中。使用 ${POLICYVARIABLE}
格式在 Condition
或 Resource
定義中指定原則的變數。MinIO 原則變數的功能與 AWS IAM 原則元素:變數和標籤類似。
每個 MinIO 身分提供者 都支援其自身的一組原則變數
MinIO 原則變數
下表包含建議在授權 MinIO 管理使用者 時使用的原則變數清單。
變數 |
描述 |
---|---|
已驗證 API 呼叫的 HTTP 標頭中的 referrer。 |
|
已驗證 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 權杖中的受眾聲明。 |
|
傳回客戶端驗證資訊中的 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
欄位中 JWT 權杖中 preferred_username
的值。然後,MinIO 會評估政策,並授予或撤銷對請求的 API 和資源的存取權。
Active Directory / LDAP 政策變數
下表包含授權 AD/LDAP 使用者 時可使用的支援政策變數列表。
變數 |
描述 |
---|---|
|
|
|
已驗證使用者使用的 Distinguished Name。 |
|
已驗證使用者的群組 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}
變數替換為 Resource
欄位中已驗證使用者的 name
值。然後,MinIO 會評估政策,並授予或撤銷對請求的 API 和資源的存取權。