Skip to content

Commit 03c5ee8

Browse files
committed
[apiserver] fix audit log identity headers and add version user-agent
Refactor extra headers from []string to map[string]string so the k8s header authenticator correctly maps X-Remote-Extra-<Key>: <Value> pairs into user.extra fields in audit events. The old implementation set a single X-Remote-Extra- header with comma-joined values, which produced an empty-string key. Add APIServerUserAgent() and set UserAgent on rest.Config so internal controller traffic identifies as apoxy-apiserver/<version> instead of the default apiserver/v0.0.0 kubernetes/$Format.
1 parent 2bab37c commit 03c5ee8

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

build/build.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,15 @@ func Version() string {
2525
return fmt.Sprintf("%s (%s), built %s", BuildVersion, CommitHash, BuildDate)
2626
}
2727

28-
// UserAgent returns the user agent string.
28+
// UserAgent returns the user agent string for the CLI.
2929
func UserAgent() string {
3030
if BuildVersion == "dev" {
3131
return fmt.Sprintf("apoxy-cli/%s", BuildVersion)
3232
}
3333
return fmt.Sprintf("apoxy-cli/v%s-%s (%s)", BuildVersion, CommitHash, BuildDate)
3434
}
35+
36+
// APIServerUserAgent returns the user agent string for the apiserver.
37+
func APIServerUserAgent() string {
38+
return fmt.Sprintf("apoxy-apiserver/%s", BuildVersion)
39+
}

pkg/apiserver/auth/headers.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ type headerRoundTripper struct {
3535
roundTripper http.RoundTripper
3636
userHeader string
3737
groupHeaders []string
38-
extraHeaders []string
38+
extraHeaders map[string]string
3939
}
4040

4141
// NewHeaderRoundTripper returns a new round tripper that adds the given headers to the request.
42-
func NewHeaderRoundTripper(rt http.RoundTripper, userHeader string, groupHeaders, extraHeaders []string) *headerRoundTripper {
42+
func NewHeaderRoundTripper(rt http.RoundTripper, userHeader string, groupHeaders []string, extraHeaders map[string]string) *headerRoundTripper {
4343
return &headerRoundTripper{
4444
roundTripper: rt,
4545
userHeader: userHeader,
@@ -54,14 +54,14 @@ func (rt *headerRoundTripper) RoundTrip(req *http.Request) (*http.Response, erro
5454
for _, groupHeader := range rt.groupHeaders {
5555
req.Header.Add(GroupHeaderKey, groupHeader)
5656
}
57-
for _, extraHeader := range rt.extraHeaders {
58-
req.Header.Add(ExtraHeaderKey, extraHeader)
57+
for k, v := range rt.extraHeaders {
58+
req.Header.Set(ExtraHeaderKey+k, v)
5959
}
6060
return rt.roundTripper.RoundTrip(req)
6161
}
6262

6363
// NewTransportWrapperFunc returns a new transport.WrapperFunc that adds the given headers to the request.
64-
func NewTransportWrapperFunc(userHeader string, groupHeaders, extraHeaders []string) func(rt http.RoundTripper) http.RoundTripper {
64+
func NewTransportWrapperFunc(userHeader string, groupHeaders []string, extraHeaders map[string]string) func(rt http.RoundTripper) http.RoundTripper {
6565
return func(rt http.RoundTripper) http.RoundTripper {
6666
return NewHeaderRoundTripper(rt, userHeader, groupHeaders, extraHeaders)
6767
}

pkg/apiserver/client.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55

66
"k8s.io/client-go/rest"
77
"k8s.io/client-go/transport"
8+
9+
"github.com/apoxy-dev/apoxy/build"
810
)
911

1012
// ClientOption is a set of options for the client.
@@ -68,5 +70,6 @@ func NewClientConfig(opts ...ClientOption) *rest.Config {
6870
TLSClientConfig: sOpts.tlsConfig,
6971
BearerToken: sOpts.bearerToken,
7072
WrapTransport: sOpts.transportWrapFunc,
73+
UserAgent: build.APIServerUserAgent(),
7174
}
7275
}

0 commit comments

Comments
 (0)