Skip to content

Commit 61f0036

Browse files
authored
Merge pull request kubernetes#91030 from liggitt/node-subject-rules-review
Indicate node authorizer does not support rule resolution
2 parents 977aeab + fd78947 commit 61f0036

File tree

5 files changed

+18
-4
lines changed

5 files changed

+18
-4
lines changed

pkg/kubeapiserver/authorizer/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ func (config Config) New() (authorizer.Authorizer, authorizer.RuleResolver, erro
8686
)
8787
nodeAuthorizer := node.NewAuthorizer(graph, nodeidentifier.NewDefaultNodeIdentifier(), bootstrappolicy.NodeRules())
8888
authorizers = append(authorizers, nodeAuthorizer)
89+
ruleResolvers = append(ruleResolvers, nodeAuthorizer)
8990

9091
case modes.ModeAlwaysAllow:
9192
alwaysAllowAuthorizer := authorizerfactory.NewAlwaysAllowAuthorizer()

plugin/pkg/auth/authorizer/node/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ go_library(
5252
"//staging/src/k8s.io/api/rbac/v1:go_default_library",
5353
"//staging/src/k8s.io/api/storage/v1:go_default_library",
5454
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
55+
"//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library",
5556
"//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
5657
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
5758
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",

plugin/pkg/auth/authorizer/node/graph_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func TestIndex(t *testing.T) {
188188
g := NewGraph()
189189
g.destinationEdgeThreshold = 3
190190

191-
a := NewAuthorizer(g, nil, nil).(*NodeAuthorizer)
191+
a := NewAuthorizer(g, nil, nil)
192192

193193
addPod := func(podNumber, nodeNumber int) {
194194
t.Helper()

plugin/pkg/auth/authorizer/node/node_authorizer.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424

2525
rbacv1 "k8s.io/api/rbac/v1"
2626
"k8s.io/apimachinery/pkg/runtime/schema"
27+
"k8s.io/apiserver/pkg/authentication/user"
2728
"k8s.io/apiserver/pkg/authorization/authorizer"
2829
utilfeature "k8s.io/apiserver/pkg/util/feature"
2930
"k8s.io/component-base/featuregate"
@@ -58,8 +59,11 @@ type NodeAuthorizer struct {
5859
features featuregate.FeatureGate
5960
}
6061

62+
var _ = authorizer.Authorizer(&NodeAuthorizer{})
63+
var _ = authorizer.RuleResolver(&NodeAuthorizer{})
64+
6165
// NewAuthorizer returns a new node authorizer
62-
func NewAuthorizer(graph *Graph, identifier nodeidentifier.NodeIdentifier, rules []rbacv1.PolicyRule) authorizer.Authorizer {
66+
func NewAuthorizer(graph *Graph, identifier nodeidentifier.NodeIdentifier, rules []rbacv1.PolicyRule) *NodeAuthorizer {
6367
return &NodeAuthorizer{
6468
graph: graph,
6569
identifier: identifier,
@@ -79,6 +83,14 @@ var (
7983
csiNodeResource = storageapi.Resource("csinodes")
8084
)
8185

86+
func (r *NodeAuthorizer) RulesFor(user user.Info, namespace string) ([]authorizer.ResourceRuleInfo, []authorizer.NonResourceRuleInfo, bool, error) {
87+
if _, isNode := r.identifier.NodeIdentity(user); isNode {
88+
// indicate nodes do not have fully enumerated permissions
89+
return nil, nil, true, fmt.Errorf("node authorizer does not support user rule resolution")
90+
}
91+
return nil, nil, false, nil
92+
}
93+
8294
func (r *NodeAuthorizer) Authorize(ctx context.Context, attrs authorizer.Attributes) (authorizer.Decision, string, error) {
8395
nodeName, isNode := r.identifier.NodeIdentity(attrs.GetUser())
8496
if !isNode {

plugin/pkg/auth/authorizer/node/node_authorizer_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func TestAuthorizer(t *testing.T) {
8282
populate(g, nodes, pods, pvs, attachments)
8383

8484
identifier := nodeidentifier.NewDefaultNodeIdentifier()
85-
authz := NewAuthorizer(g, identifier, bootstrappolicy.NodeRules()).(*NodeAuthorizer)
85+
authz := NewAuthorizer(g, identifier, bootstrappolicy.NodeRules())
8686

8787
node0 := &user.DefaultInfo{Name: "system:node:node0", Groups: []string{"system:nodes"}}
8888

@@ -671,7 +671,7 @@ func BenchmarkAuthorization(b *testing.B) {
671671
populate(g, nodes, pods, pvs, attachments)
672672

673673
identifier := nodeidentifier.NewDefaultNodeIdentifier()
674-
authz := NewAuthorizer(g, identifier, bootstrappolicy.NodeRules()).(*NodeAuthorizer)
674+
authz := NewAuthorizer(g, identifier, bootstrappolicy.NodeRules())
675675

676676
node0 := &user.DefaultInfo{Name: "system:node:node0", Groups: []string{"system:nodes"}}
677677

0 commit comments

Comments
 (0)