主体访问评审
apiVersion: authorization.k8s.io/v1
import "k8s.io/api/authorization/v1"
主体访问评审
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 对应于认证器的 user.Info.GetExtra() 方法。由于这是授权器的输入,因此在此需要一个映射。
groups ([]string)
Atomic:合并期间将被替换
Groups 是你正在测试的组。
nonResourceAttributes (NonResourceAttributes)
NonResourceAttributes 描述了非资源访问请求的信息
NonResourceAttributes 包含可用于对 Authorizer 接口进行非资源请求的授权属性
nonResourceAttributes.path (string)
Path 是请求的 URL 路径
nonResourceAttributes.verb (string)
Verb 是标准的 HTTP 动词
resourceAttributes (ResourceAttributes)
ResourceAuthorizationAttributes 描述了资源访问请求的信息
ResourceAttributes 包含可用于对 Authorizer 接口进行资源请求的授权属性
resourceAttributes.fieldSelector (FieldSelectorAttributes)
fieldSelector 描述了基于字段的访问限制。它只能限制访问,不能扩大访问范围。
该字段处于 Alpha 阶段。要使用此字段,必须启用
AuthorizeWithSelectors
feature gate(默认禁用)。*FieldSelectorAttributes 表示字段受限访问。鼓励 Webhook 作者 * 确保 rawSelector 和 requirements 不同时设置 * 如果设置了 requirements 字段,则考虑该字段 * 如果设置了 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。只要 requirements 不存在,kube-apiserver 的 *SubjectAccessReview 就会解析 rawSelector。
resourceAttributes.fieldSelector.requirements ([]FieldSelectorRequirement)
Atomic:合并期间将被替换
requirements 是字段选择器的解析解释。资源实例必须满足所有 requirements 才能匹配选择器。Webhook 实现应处理 requirements,但如何处理取决于 Webhook。由于 requirements 只能限制请求,因此如果 requirements 未被理解,则将其授权为不受限制的请求是安全的。
FieldSelectorRequirement 是一个包含值、键以及关联键和值的操作符的选择器。
resourceAttributes.fieldSelector.requirements.key (string),必需
key 是要求适用的字段选择器键。
resourceAttributes.fieldSelector.requirements.operator (string),必需
operator 表示键与一组值之间的关系。有效的操作符是 In, NotIn, Exists, DoesNotExist。操作符列表将来可能会增加。
resourceAttributes.fieldSelector.requirements.values ([]string)
Atomic:合并期间将被替换
values 是一个字符串值数组。如果操作符是 In 或 NotIn,则 values 数组必须非空。如果操作符是 Exists 或 DoesNotExist,则 values 数组必须为空。
resourceAttributes.group (string)
Group 是资源的 API Group。 "*" 表示所有。
resourceAttributes.labelSelector (LabelSelectorAttributes)
labelSelector 描述了基于标签的访问限制。它只能限制访问,不能扩大访问范围。
该字段处于 Alpha 阶段。要使用此字段,必须启用
AuthorizeWithSelectors
feature gate(默认禁用)。*LabelSelectorAttributes 表示标签受限访问。鼓励 Webhook 作者 * 确保 rawSelector 和 requirements 不同时设置 * 如果设置了 requirements 字段,则考虑该字段 * 如果设置了 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。只要 requirements 不存在,kube-apiserver 的 *SubjectAccessReview 就会解析 rawSelector。
resourceAttributes.labelSelector.requirements ([]LabelSelectorRequirement)
Atomic:合并期间将被替换
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)
Atomic:合并期间将被替换
values 是一个字符串值数组。如果操作符是 In 或 NotIn,则 values 数组必须非空。如果操作符是 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 和 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): OK
201 (SubjectAccessReview): Created
202 (SubjectAccessReview): Accepted
401: 未授权
本页面是自动生成的。
如果计划报告此页面的问题,请在问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。