|
|
@@ -0,0 +1,44 @@
|
|
|
+// Copyright (c) Tailscale Inc & AUTHORS
|
|
|
+// SPDX-License-Identifier: BSD-3-Clause
|
|
|
+
|
|
|
+// Package kube provides a client to interact with Kubernetes.
|
|
|
+// This package is Tailscale-internal and not meant for external consumption.
|
|
|
+// Further, the API should not be considered stable.
|
|
|
+package kube
|
|
|
+
|
|
|
+// KubernetesCapRule is a rule provided via PeerCapabilityKubernetes capability.
|
|
|
+type KubernetesCapRule struct {
|
|
|
+ // Impersonate is a list of rules that specify how to impersonate the caller
|
|
|
+ // when proxying to the Kubernetes API.
|
|
|
+ Impersonate *ImpersonateRule `json:"impersonate,omitempty"`
|
|
|
+ // Recorders defines a tag that should resolve to a tsrecorder
|
|
|
+ // instance(s). If set, any `kubectl exec` session from a client
|
|
|
+ // matching `src` of this grant to an API server proxy matching `dst` of
|
|
|
+ // this grant will be recorded and the recording will be sent to the
|
|
|
+ // tsrecorder.
|
|
|
+ // This list must not contain more than one tag.
|
|
|
+ // The field name matches the `Recorder` field with equal semantics for Tailscale SSH
|
|
|
+ // session recorder.
|
|
|
+ // https://tailscale.com/kb/1246/tailscale-ssh-session-recording#turn-on-session-recording-in-acls
|
|
|
+ Recorders []string `json:"recorder,omitempty"`
|
|
|
+ // EnforceRecorder defines whether a kubectl exec session from a client
|
|
|
+ // matching `src` to an API server proxy matching `dst` should fail
|
|
|
+ // closed if it cannot be recorded (i.e if no recoder can be reached).
|
|
|
+ // Default is to fail open.
|
|
|
+ // The field name matches `EnforceRecorder` field with equal semantics for Tailscale SSH
|
|
|
+ // session recorder.
|
|
|
+ // https://tailscale.com/kb/1246/tailscale-ssh-session-recording#turn-on-session-recording-in-acls
|
|
|
+ EnforceRecorder bool `json:"enforceRecorder,omitempty"`
|
|
|
+}
|
|
|
+
|
|
|
+// ImpersonateRule defines how a request from the tailnet identity matching
|
|
|
+// 'src' of this grant should be impersonated.
|
|
|
+type ImpersonateRule struct {
|
|
|
+ // Groups can be used to set a list of groups that a request to
|
|
|
+ // Kubernetes API server should be impersonated as from. Groups in
|
|
|
+ // Kubernetes only exist as subjects that RBAC rules refer to. Caller
|
|
|
+ // can choose to use an existing group, such as system:masters, or
|
|
|
+ // create RBAC for a new group.
|
|
|
+ // https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-subjects
|
|
|
+ Groups []string `json:"groups,omitempty"`
|
|
|
+}
|