mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 03:33:56 +00:00
Track manually created secret-based tokens
Add audit annotation and metrics to track secret-based tokens Update pkg/serviceaccount/metrics.go Co-authored-by: Jordan Liggitt <jordan@liggitt.net> Update pkg/serviceaccount/legacy.go Co-authored-by: Jordan Liggitt <jordan@liggitt.net> Update pkg/serviceaccount/legacy.go Co-authored-by: Jordan Liggitt <jordan@liggitt.net> Update pkg/serviceaccount/metrics.go Co-authored-by: Jordan Liggitt <jordan@liggitt.net> Update pkg/serviceaccount/metrics.go Co-authored-by: Jordan Liggitt <jordan@liggitt.net> Update pkg/serviceaccount/metrics.go Co-authored-by: Jordan Liggitt <jordan@liggitt.net> Fix a bug
This commit is contained in:
parent
13172cba5c
commit
c4739313b7
@ -28,6 +28,7 @@ import (
|
|||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/apiserver/pkg/audit"
|
||||||
apiserverserviceaccount "k8s.io/apiserver/pkg/authentication/serviceaccount"
|
apiserverserviceaccount "k8s.io/apiserver/pkg/authentication/serviceaccount"
|
||||||
"k8s.io/apiserver/pkg/warning"
|
"k8s.io/apiserver/pkg/warning"
|
||||||
applyv1 "k8s.io/client-go/applyconfigurations/core/v1"
|
applyv1 "k8s.io/client-go/applyconfigurations/core/v1"
|
||||||
@ -144,12 +145,26 @@ func (v *legacyValidator) Validate(ctx context.Context, tokenData string, public
|
|||||||
return nil, fmt.Errorf("ServiceAccount UID (%s) does not match claim (%s)", serviceAccount.UID, serviceAccountUID)
|
return nil, fmt.Errorf("ServiceAccount UID (%s) does not match claim (%s)", serviceAccount.UID, serviceAccountUID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Track secret-based long-lived service account tokens and add audit annotations and metrics.
|
||||||
|
autoGenerated := false
|
||||||
|
|
||||||
|
// Check if it is an auto-generated secret-based token
|
||||||
for _, ref := range serviceAccount.Secrets {
|
for _, ref := range serviceAccount.Secrets {
|
||||||
if ref.Name == secret.Name {
|
if ref.Name == secret.Name {
|
||||||
|
autoGenerated = true
|
||||||
warning.AddWarning(ctx, "", "Use tokens from the TokenRequest API or manually created secret-based tokens instead of auto-generated secret-based tokens.")
|
warning.AddWarning(ctx, "", "Use tokens from the TokenRequest API or manually created secret-based tokens instead of auto-generated secret-based tokens.")
|
||||||
|
audit.AddAuditAnnotation(ctx, "authentication.k8s.io/legacy-token-autogenerated-secret", secret.Name)
|
||||||
|
autoGeneratedTokensTotal.WithContext(ctx).Inc()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if it's a manually created secret-based token
|
||||||
|
if !autoGenerated {
|
||||||
|
audit.AddAuditAnnotation(ctx, "authentication.k8s.io/legacy-token-manual-secret", secret.Name)
|
||||||
|
manuallyCreatedTokensTotal.WithContext(ctx).Inc()
|
||||||
|
}
|
||||||
|
|
||||||
now := time.Now().UTC()
|
now := time.Now().UTC()
|
||||||
today := now.Format("2006-01-02")
|
today := now.Format("2006-01-02")
|
||||||
tomorrow := now.AddDate(0, 0, 1).Format("2006-01-02")
|
tomorrow := now.AddDate(0, 0, 1).Format("2006-01-02")
|
||||||
|
@ -47,6 +47,26 @@ var (
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// mauallyCreatedTokensTotal is the number of manually created secret-based long lived tokens.
|
||||||
|
manuallyCreatedTokensTotal = metrics.NewCounter(
|
||||||
|
&metrics.CounterOpts{
|
||||||
|
Subsystem: kubeServiceAccountSubsystem,
|
||||||
|
Name: "legacy_manual_token_uses_total",
|
||||||
|
Help: "Cumulative manually created legacy tokens used",
|
||||||
|
StabilityLevel: metrics.ALPHA,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
// autoGeneratedTokensTotal is the number of automatically generated secret-based long lived tokens.
|
||||||
|
autoGeneratedTokensTotal = metrics.NewCounter(
|
||||||
|
&metrics.CounterOpts{
|
||||||
|
Subsystem: kubeServiceAccountSubsystem,
|
||||||
|
Name: "legacy_auto_token_uses_total",
|
||||||
|
Help: "Cumulative auto-generated legacy tokens used",
|
||||||
|
StabilityLevel: metrics.ALPHA,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
// ValidTokensTotal is the number of valid projected tokens used.
|
// ValidTokensTotal is the number of valid projected tokens used.
|
||||||
validTokensTotal = metrics.NewCounter(
|
validTokensTotal = metrics.NewCounter(
|
||||||
&metrics.CounterOpts{
|
&metrics.CounterOpts{
|
||||||
@ -64,6 +84,8 @@ func RegisterMetrics() {
|
|||||||
registerMetricsOnce.Do(func() {
|
registerMetricsOnce.Do(func() {
|
||||||
legacyregistry.MustRegister(legacyTokensTotal)
|
legacyregistry.MustRegister(legacyTokensTotal)
|
||||||
legacyregistry.MustRegister(staleTokensTotal)
|
legacyregistry.MustRegister(staleTokensTotal)
|
||||||
|
legacyregistry.MustRegister(manuallyCreatedTokensTotal)
|
||||||
|
legacyregistry.MustRegister(autoGeneratedTokensTotal)
|
||||||
legacyregistry.MustRegister(validTokensTotal)
|
legacyregistry.MustRegister(validTokensTotal)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user