SubjectAccessReview
apiVersion: authorization.k8s.io/v1
import "k8s.io/api/authorization/v1"
SubjectAccessReview
SubjectAccessReview 用於檢查使用者或組是否可以執行某個操作。
apiVersion: authorization.k8s.io/v1
kind: SubjectAccessReview
metadata (ObjectMeta)
標準列表元資料。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (SubjectAccessReviewSpec), 必需
Spec 包含有關正在評估的請求的資訊
status (SubjectAccessReviewStatus)
Status 由伺服器填充,指示請求是否被允許
SubjectAccessReviewSpec
SubjectAccessReviewSpec 是訪問請求的描述。必須設定 ResourceAuthorizationAttributes 和 NonResourceAuthorizationAttributes 中的一個,且僅一個。
extra (map[string][]string)
Extra 對應 authenticator 的 User.Info.GetExtra() 方法。由於這是授權器的輸入,因此需要在此處進行反射。
groups ([]string)
原子性:在合併期間將被替換
Groups 是您正在測試的組。
nonResourceAttributes (NonResourceAttributes)
NonResourceAttributes 描述了非資源訪問請求的資訊。
NonResourceAttributes 包括授權器介面的非資源請求的授權屬性
nonResourceAttributes.path (string)
Path 是請求的 URL 路徑。
nonResourceAttributes.verb (string)
Verb 是標準的 HTTP 動詞。
resourceAttributes (ResourceAttributes)
ResourceAuthorizationAttributes 描述了資源訪問請求的資訊。
ResourceAttributes 包括授權器介面的資源請求的授權屬性
resourceAttributes.fieldSelector (FieldSelectorAttributes)
fieldSelector 描述了基於欄位的訪問限制。它只能限制訪問,不能擴大訪問範圍。
*FieldSelectorAttributes 指示了基於欄位的有限訪問。鼓勵 Webhook 作者 * 確保 rawSelector 和 requirements 不會同時設定 * 如果設定了 requirements,請考慮 requirements 欄位 * 如果設定了 rawSelector,則不嘗試解析或考慮 rawSelector 欄位。這是為了避免另一個 CVE-2022-2880(即讓不同的系統就如何精確地解析查詢達成一致,不是我們想要的),更多詳細資訊請參閱 https://www.oxeye.io/resources/golang-parameter-smuggling-attack。對於 kube-apiserver 的 *SubjectAccessReview 端點: * 如果 rawSelector 為空且 requirements 為空,則請求不受限制。 * 如果 rawSelector 存在且 requirements 為空,則 rawSelector 將被解析,如果解析成功,則受到限制。 * 如果 rawSelector 為空且 requirements 存在,則應遵守 requirements。 * 如果 rawSelector 存在且 requirements 也存在,則請求無效。*
resourceAttributes.fieldSelector.rawSelector (string)
rawSelector 是將包含在查詢引數中的欄位選擇器的序列化形式。鼓勵 Webhook 實現忽略 rawSelector。kube-apiserver 的 *SubjectAccessReview 會解析 rawSelector,只要 requirements 不存在。
resourceAttributes.fieldSelector.requirements ([]FieldSelectorRequirement)
原子性:在合併期間將被替換
requirements 是欄位選擇器的解析解釋。必須滿足所有 requirements 才能使資源例項匹配選擇器。Webhook 實現應處理 requirements,但如何處理取決於 Webhook。由於 requirements 只能限制請求,因此如果 requirements 未被理解,則可以安全地將請求授權為無限制。
FieldSelectorRequirement 是一個包含值、鍵和關係鍵與值的運算子的選擇器。
resourceAttributes.fieldSelector.requirements.key (string), 必需
key 是 requirements 應用的欄位選擇器鍵。
resourceAttributes.fieldSelector.requirements.operator (string), 必需
operator 表示鍵與一組值之間的關係。有效運算子為 In、NotIn、Exists、DoesNotExist。運算子列表未來可能會增加。
resourceAttributes.fieldSelector.requirements.values ([]string)
原子性:在合併期間將被替換
values 是一個字串值陣列。如果 operator 是 In 或 NotIn,則 values 陣列必須非空。如果 operator 是 Exists 或 DoesNotExist,則 values 陣列必須為空。
resourceAttributes.group (string)
Group 是資源的 API 組。'*' 表示所有。
resourceAttributes.labelSelector (LabelSelectorAttributes)
labelSelector 描述了基於標籤的訪問限制。它只能限制訪問,不能擴大訪問範圍。
*LabelSelectorAttributes 指示了基於標籤的有限訪問。鼓勵 Webhook 作者 * 確保 rawSelector 和 requirements 不會同時設定 * 如果設定了 requirements,請考慮 requirements 欄位 * 如果設定了 rawSelector,則不嘗試解析或考慮 rawSelector 欄位。這是為了避免另一個 CVE-2022-2880(即讓不同的系統就如何精確地解析查詢達成一致,不是我們想要的),更多詳細資訊請參閱 https://www.oxeye.io/resources/golang-parameter-smuggling-attack。對於 kube-apiserver 的 *SubjectAccessReview 端點: * 如果 rawSelector 為空且 requirements 為空,則請求不受限制。 * 如果 rawSelector 存在且 requirements 為空,則 rawSelector 將被解析,如果解析成功,則受到限制。 * 如果 rawSelector 為空且 requirements 存在,則應遵守 requirements。 * 如果 rawSelector 存在且 requirements 也存在,則請求無效。*
resourceAttributes.labelSelector.rawSelector (string)
rawSelector 是將包含在查詢引數中的欄位選擇器的序列化形式。鼓勵 Webhook 實現忽略 rawSelector。kube-apiserver 的 *SubjectAccessReview 會解析 rawSelector,只要 requirements 不存在。
resourceAttributes.labelSelector.requirements ([]LabelSelectorRequirement)
原子性:在合併期間將被替換
requirements 是標籤選擇器的解析解釋。必須滿足所有 requirements 才能使資源例項匹配選擇器。Webhook 實現應處理 requirements,但如何處理取決於 Webhook。由於 requirements 只能限制請求,因此如果 requirements 未被理解,則可以安全地將請求授權為無限制。
標籤選擇器 requirement 是一個包含值、鍵和關係鍵與值的運算子的選擇器。
resourceAttributes.labelSelector.requirements.key (string), 必需
key 是選擇器適用的標籤鍵。
resourceAttributes.labelSelector.requirements.operator (string), 必需
operator 表示鍵與一組值之間的關係。有效運算子為 In、NotIn、Exists 和 DoesNotExist。
resourceAttributes.labelSelector.requirements.values ([]string)
原子性:在合併期間將被替換
values 是一個字串值陣列。如果 operator 是 In 或 NotIn,則 values 陣列必須非空。如果 operator 是 Exists 或 DoesNotExist,則 values 陣列必須為空。此陣列在戰略合併補丁期間被替換。
resourceAttributes.name (string)
Name 是請求的資源的名稱,用於“get”或“delete”操作。 ""(空字串)表示所有。
resourceAttributes.namespace (string)
Namespace 是請求的操作所在的名稱空間。目前,沒有區分“無名稱空間”和“所有名稱空間”。""(空字串)是 LocalSubjectAccessReviews 的預設值。""(空字串)是叢集範圍資源的預設值。""(空字串)對於 SubjectAccessReview 或 SelfSubjectAccessReview 中面向名稱空間範圍的資源意味著“所有”。
resourceAttributes.resource (string)
Resource 是現有的資源型別之一。'*' 表示所有。
resourceAttributes.subresource (string)
Subresource 是現有的子資源型別之一。"" 表示無。
resourceAttributes.verb (string)
Verb 是 Kubernetes 資源 API 動詞,例如:get、list、watch、create、update、delete、proxy。'*' 表示所有。
resourceAttributes.version (string)
Version 是資源的 API 版本。'*' 表示所有。
uid (string)
關於請求使用者的 UID 資訊。
user (string)
User 是您正在測試的使用者。如果您指定了“User”但未指定“Groups”,則解釋為“如果 User 不屬於任何組,會怎樣?”
SubjectAccessReviewStatus
SubjectAccessReviewStatus
allowed (boolean), 必需
Allowed 是必需的。如果操作被允許,則為 true,否則為 false。
denied (boolean)
Denied 是可選的。如果操作被拒絕,則為 true,否則為 false。如果 allowed 為 false 且 denied 也為 false,則授權器對是否授權該操作沒有意見。如果 allowed 為 true,則 denied 不能為 true。
evaluationError (string)
EvaluationError 指示在授權檢查期間發生了某種錯誤。即使發生錯誤,仍然可以繼續確定授權狀態。例如,RBAC 可能缺少一個角色,但仍然存在足夠數量的角色並已繫結,足以對請求進行推理。
reason (string)
Reason 是可選的。它指出了請求被允許或被拒絕的原因。
操作
create
建立一個 SubjectAccessReview
HTTP 請求
POST /apis/authorization.k8s.io/v1/subjectaccessreviews
引數
body: SubjectAccessReview, 必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (SubjectAccessReview): 成功
201 (SubjectAccessReview): 已建立
202 (SubjectAccessReview): 已接受
401: 未授權
本頁面是自動生成的。
如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。