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 对应于来自鉴权器的 user.Info.GetExtra() 方法。 由于这是针对 Authorizer 的输入,所以它需要在此处反映。 
- 
groups ([]string) 原子:将在合并期间被替换 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特性门控(默认禁用)。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) 原子:将在合并期间被替换 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 是一个字符串值的数组。如果运算符是 In 或 NotIn,则 values 数组必须非空。 如果运算符是 Exists 或 DoesNotExist,则 values 数组必须为空。 
 
- 
 
 - 
resourceAttributes.group (string) group 是资源的 API 组。 "*" 表示所有资源。 
 - 
resourceAttributes.labelSelector (LabelSelectorAttributes) labelSelector 描述基于标签的访问限制。此字段只能限制访问权限,而不能扩大访问权限。 此字段处于 Alpha 级别。要使用此字段,你必须启用 AuthorizeWithSelectors特性门控(默认禁用)。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) 原子:将在合并期间被替换 requirements 是字段选择算符已解析的解释。资源实例必须满足所有 requirements,才能匹配此选择算符。 Webhook 实现应处理 requirements,但如何处理由 Webhook 自行决定。 由于 requirements 只能限制请求,因此如果不理解 requirements,可以安全地将请求鉴权为无限制请求。 FieldSelectorRequirement 是一个选择算符,包含值、键以及将键和值关联起来的运算符。 - 
resourceAttributes.labelSelector.requirements.key (string),必需 key 是选择算符应用到的标签键。 
- 
resourceAttributes.labelSelector.requirements.operator (string),必需 operator 表示键与一组值之间的关系。有效的运算符有 In、NotIn、Exists、DoesNotExist。 
- 
resourceAttributes.labelSelector.requirements.values ([]string) 原子:将在合并期间被替换 values 是一个字符串值的数组。如果运算符是 In 或 NotIn,则 values 数组必须非空。 如果运算符是 Exists 或 DoesNotExist,则 values 数组必须为空。 此数组在策略性合并补丁(Strategic Merge Patch)期间被替换。 
 
- 
 
 - 
resourceAttributes.name (string) name 是 "get" 正在请求或 "delete" 已删除的资源。 ""(空字符串)表示所有资源。 
 - 
resourceAttributes.namespace (string) namespace 是正在请求的操作的命名空间。 目前,无命名空间和所有命名空间之间没有区别。 对于 LocalSubjectAccessReviews,默认为 ""(空字符串)。 对于集群范围的资源,默认为 ""(空字符串)。 对于来自 SubjectAccessReview 或 SelfSubjectAccessReview 的命名空间范围的资源, ""(空字符串)表示 "all"(所有资源)。 
- 
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,则 Authorizer 对是否鉴权操作没有意见。 如果 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: Unauthorized