Skip to content

Commit b384813

Browse files
deads2kironcladlou
authored andcommitted
UPSTREAM: 49133: add controller permissions to set blockOwnerDeletion
:100644 100644 93834cb040... 5c4287925b... M plugin/pkg/admission/gc/gc_admission.go :100644 100644 4d7a6aac6a... 691be3da3b... M plugin/pkg/admission/gc/gc_admission_test.go :100644 100644 a040a311f2... 942fc0ac0e... M plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go :100644 100644 fd67e7b7a4... 1a56a0a901... M plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/controller-roles.yaml
1 parent df2b918 commit b384813

File tree

4 files changed

+77
-18
lines changed

4 files changed

+77
-18
lines changed

Diff for: plugin/pkg/admission/gc/gc_admission.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func (a *gcPermissionsEnforcement) Admit(attributes admission.Attributes) (err e
122122
for _, record := range records {
123123
allowed, reason, err := a.authorizer.Authorize(record)
124124
if !allowed {
125-
return admission.NewForbidden(attributes, fmt.Errorf("cannot set blockOwnerDeletion if an ownerReference refers to a resource you can't delete: %v, %v", reason, err))
125+
return admission.NewForbidden(attributes, fmt.Errorf("cannot set blockOwnerDeletion if an ownerReference refers to a resource you can't set finalizers on: %v, %v", reason, err))
126126
}
127127
}
128128
}
@@ -178,12 +178,13 @@ func (a *gcPermissionsEnforcement) ownerRefToDeleteAttributeRecords(ref metav1.O
178178
for _, mapping := range mappings {
179179
ret = append(ret, authorizer.AttributesRecord{
180180
User: attributes.GetUserInfo(),
181-
Verb: "delete",
181+
Verb: "update",
182182
// ownerReference can only refer to an object in the same namespace, so attributes.GetNamespace() equals to the owner's namespace
183183
Namespace: attributes.GetNamespace(),
184184
APIGroup: groupVersion.Group,
185185
APIVersion: groupVersion.Version,
186186
Resource: mapping.Resource,
187+
Subresource: "finalizers",
187188
Name: ref.Name,
188189
ResourceRequest: true,
189190
Path: "",

Diff for: plugin/pkg/admission/gc/gc_admission_test.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,29 @@ func (fakeAuthorizer) Authorize(a authorizer.Attributes) (bool, string, error) {
3939
if a.GetVerb() == "delete" {
4040
return false, "", nil
4141
}
42+
if a.GetVerb() == "update" && a.GetSubresource() == "finalizers" {
43+
return false, "", nil
44+
}
4245
return true, "", nil
4346
}
4447

4548
if username == "non-pod-deleter" {
4649
if a.GetVerb() == "delete" && a.GetResource() == "pods" {
4750
return false, "", nil
4851
}
52+
if a.GetVerb() == "update" && a.GetResource() == "pods" && a.GetSubresource() == "finalizers" {
53+
return false, "", nil
54+
}
4955
return true, "", nil
5056
}
5157

5258
if username == "non-rc-deleter" {
5359
if a.GetVerb() == "delete" && a.GetResource() == "replicationcontrollers" {
5460
return false, "", nil
5561
}
62+
if a.GetVerb() == "update" && a.GetResource() == "replicationcontrollers" && a.GetSubresource() == "finalizers" {
63+
return false, "", nil
64+
}
5665
return true, "", nil
5766
}
5867

@@ -326,7 +335,10 @@ func TestBlockOwnerDeletionAdmission(t *testing.T) {
326335
return err == nil
327336
}
328337
expectCantSetBlockOwnerDeletionError := func(err error) bool {
329-
return strings.Contains(err.Error(), "cannot set blockOwnerDeletion if an ownerReference refers to a resource you can't delete")
338+
if err == nil {
339+
return false
340+
}
341+
return strings.Contains(err.Error(), "cannot set blockOwnerDeletion if an ownerReference refers to a resource you can't set finalizers on")
330342
}
331343
tests := []struct {
332344
name string

Diff for: plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go

+15-8
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,20 @@ func init() {
7171
addControllerRole(rbac.ClusterRole{
7272
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "cronjob-controller"},
7373
Rules: []rbac.PolicyRule{
74-
rbac.NewRule("get", "list", "watch", "update", "delete").Groups(batchGroup).Resources("cronjobs").RuleOrDie(),
74+
rbac.NewRule("get", "list", "watch", "update").Groups(batchGroup).Resources("cronjobs").RuleOrDie(),
7575
rbac.NewRule("get", "list", "watch", "create", "update", "delete", "patch").Groups(batchGroup).Resources("jobs").RuleOrDie(),
7676
rbac.NewRule("update").Groups(batchGroup).Resources("cronjobs/status").RuleOrDie(),
77+
rbac.NewRule("update").Groups(batchGroup).Resources("cronjobs/finalizers").RuleOrDie(),
7778
rbac.NewRule("list", "delete").Groups(legacyGroup).Resources("pods").RuleOrDie(),
7879
eventsRule(),
7980
},
8081
})
8182
addControllerRole(rbac.ClusterRole{
8283
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "daemon-set-controller"},
8384
Rules: []rbac.PolicyRule{
84-
rbac.NewRule("get", "list", "watch", "delete").Groups(extensionsGroup).Resources("daemonsets").RuleOrDie(),
85-
rbac.NewRule("update").Groups(extensionsGroup).Resources("daemonsets/status").RuleOrDie(),
85+
rbac.NewRule("get", "list", "watch").Groups(extensionsGroup, appsGroup).Resources("daemonsets").RuleOrDie(),
86+
rbac.NewRule("update").Groups(extensionsGroup, appsGroup).Resources("daemonsets/status").RuleOrDie(),
87+
rbac.NewRule("update").Groups(extensionsGroup, appsGroup).Resources("daemonsets/finalizers").RuleOrDie(),
8688
rbac.NewRule("list", "watch").Groups(legacyGroup).Resources("nodes").RuleOrDie(),
8789
rbac.NewRule("list", "watch", "create", "delete", "patch").Groups(legacyGroup).Resources("pods").RuleOrDie(),
8890
rbac.NewRule("create").Groups(legacyGroup).Resources("pods/binding").RuleOrDie(),
@@ -93,8 +95,9 @@ func init() {
9395
addControllerRole(rbac.ClusterRole{
9496
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "deployment-controller"},
9597
Rules: []rbac.PolicyRule{
96-
rbac.NewRule("get", "list", "watch", "update", "delete").Groups(extensionsGroup, appsGroup).Resources("deployments").RuleOrDie(),
98+
rbac.NewRule("get", "list", "watch", "update").Groups(extensionsGroup, appsGroup).Resources("deployments").RuleOrDie(),
9799
rbac.NewRule("update").Groups(extensionsGroup, appsGroup).Resources("deployments/status").RuleOrDie(),
100+
rbac.NewRule("update").Groups(extensionsGroup, appsGroup).Resources("deployments/finalizers").RuleOrDie(),
98101
rbac.NewRule("get", "list", "watch", "create", "update", "patch", "delete").Groups(extensionsGroup).Resources("replicasets").RuleOrDie(),
99102
// TODO: remove "update" once
100103
// https://github.com/kubernetes/kubernetes/issues/36897 is resolved.
@@ -151,8 +154,9 @@ func init() {
151154
addControllerRole(rbac.ClusterRole{
152155
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "job-controller"},
153156
Rules: []rbac.PolicyRule{
154-
rbac.NewRule("get", "list", "watch", "update", "delete").Groups(batchGroup).Resources("jobs").RuleOrDie(),
157+
rbac.NewRule("get", "list", "watch", "update").Groups(batchGroup).Resources("jobs").RuleOrDie(),
155158
rbac.NewRule("update").Groups(batchGroup).Resources("jobs/status").RuleOrDie(),
159+
rbac.NewRule("update").Groups(batchGroup).Resources("jobs/finalizers").RuleOrDie(),
156160
rbac.NewRule("list", "watch", "create", "delete", "patch").Groups(legacyGroup).Resources("pods").RuleOrDie(),
157161
eventsRule(),
158162
},
@@ -208,8 +212,9 @@ func init() {
208212
addControllerRole(rbac.ClusterRole{
209213
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "replicaset-controller"},
210214
Rules: []rbac.PolicyRule{
211-
rbac.NewRule("get", "list", "watch", "update", "delete").Groups(extensionsGroup).Resources("replicasets").RuleOrDie(),
215+
rbac.NewRule("get", "list", "watch", "update").Groups(extensionsGroup).Resources("replicasets").RuleOrDie(),
212216
rbac.NewRule("update").Groups(extensionsGroup).Resources("replicasets/status").RuleOrDie(),
217+
rbac.NewRule("update").Groups(extensionsGroup).Resources("replicasets/finalizers").RuleOrDie(),
213218
rbac.NewRule("list", "watch", "patch", "create", "delete").Groups(legacyGroup).Resources("pods").RuleOrDie(),
214219
eventsRule(),
215220
},
@@ -218,8 +223,9 @@ func init() {
218223
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "replication-controller"},
219224
Rules: []rbac.PolicyRule{
220225
// 1.0 controllers needed get, update, so without these old controllers break on new servers
221-
rbac.NewRule("get", "list", "watch", "update", "delete").Groups(legacyGroup).Resources("replicationcontrollers").RuleOrDie(),
226+
rbac.NewRule("get", "list", "watch", "update").Groups(legacyGroup).Resources("replicationcontrollers").RuleOrDie(),
222227
rbac.NewRule("update").Groups(legacyGroup).Resources("replicationcontrollers/status").RuleOrDie(),
228+
rbac.NewRule("update").Groups(legacyGroup).Resources("replicationcontrollers/finalizers").RuleOrDie(),
223229
rbac.NewRule("list", "watch", "patch", "create", "delete").Groups(legacyGroup).Resources("pods").RuleOrDie(),
224230
eventsRule(),
225231
},
@@ -261,8 +267,9 @@ func init() {
261267
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "statefulset-controller"},
262268
Rules: []rbac.PolicyRule{
263269
rbac.NewRule("list", "watch").Groups(legacyGroup).Resources("pods").RuleOrDie(),
264-
rbac.NewRule("get", "list", "watch", "delete").Groups(appsGroup).Resources("statefulsets").RuleOrDie(),
270+
rbac.NewRule("get", "list", "watch").Groups(appsGroup).Resources("statefulsets").RuleOrDie(),
265271
rbac.NewRule("update").Groups(appsGroup).Resources("statefulsets/status").RuleOrDie(),
272+
rbac.NewRule("update").Groups(appsGroup).Resources("statefulsets/finalizers").RuleOrDie(),
266273
rbac.NewRule("get", "create", "delete", "update", "patch").Groups(legacyGroup).Resources("pods").RuleOrDie(),
267274
rbac.NewRule("get", "create", "delete", "update", "patch", "list", "watch").Groups(appsGroup).Resources("controllerrevisions").RuleOrDie(),
268275
rbac.NewRule("get", "create").Groups(legacyGroup).Resources("persistentvolumeclaims").RuleOrDie(),

Diff for: plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/controller-roles.yaml

+46-7
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ items:
102102
resources:
103103
- cronjobs
104104
verbs:
105-
- delete
106105
- get
107106
- list
108107
- update
@@ -125,6 +124,12 @@ items:
125124
- cronjobs/status
126125
verbs:
127126
- update
127+
- apiGroups:
128+
- batch
129+
resources:
130+
- cronjobs/finalizers
131+
verbs:
132+
- update
128133
- apiGroups:
129134
- ""
130135
resources:
@@ -151,20 +156,28 @@ items:
151156
name: system:controller:daemon-set-controller
152157
rules:
153158
- apiGroups:
159+
- apps
154160
- extensions
155161
resources:
156162
- daemonsets
157163
verbs:
158-
- delete
159164
- get
160165
- list
161166
- watch
162167
- apiGroups:
168+
- apps
163169
- extensions
164170
resources:
165171
- daemonsets/status
166172
verbs:
167173
- update
174+
- apiGroups:
175+
- apps
176+
- extensions
177+
resources:
178+
- daemonsets/finalizers
179+
verbs:
180+
- update
168181
- apiGroups:
169182
- ""
170183
resources:
@@ -223,7 +236,6 @@ items:
223236
resources:
224237
- deployments
225238
verbs:
226-
- delete
227239
- get
228240
- list
229241
- update
@@ -235,6 +247,13 @@ items:
235247
- deployments/status
236248
verbs:
237249
- update
250+
- apiGroups:
251+
- apps
252+
- extensions
253+
resources:
254+
- deployments/finalizers
255+
verbs:
256+
- update
238257
- apiGroups:
239258
- extensions
240259
resources:
@@ -495,7 +514,6 @@ items:
495514
resources:
496515
- jobs
497516
verbs:
498-
- delete
499517
- get
500518
- list
501519
- update
@@ -506,6 +524,12 @@ items:
506524
- jobs/status
507525
verbs:
508526
- update
527+
- apiGroups:
528+
- batch
529+
resources:
530+
- jobs/finalizers
531+
verbs:
532+
- update
509533
- apiGroups:
510534
- ""
511535
resources:
@@ -742,7 +766,6 @@ items:
742766
resources:
743767
- replicasets
744768
verbs:
745-
- delete
746769
- get
747770
- list
748771
- update
@@ -753,6 +776,12 @@ items:
753776
- replicasets/status
754777
verbs:
755778
- update
779+
- apiGroups:
780+
- extensions
781+
resources:
782+
- replicasets/finalizers
783+
verbs:
784+
- update
756785
- apiGroups:
757786
- ""
758787
resources:
@@ -786,7 +815,6 @@ items:
786815
resources:
787816
- replicationcontrollers
788817
verbs:
789-
- delete
790818
- get
791819
- list
792820
- update
@@ -797,6 +825,12 @@ items:
797825
- replicationcontrollers/status
798826
verbs:
799827
- update
828+
- apiGroups:
829+
- ""
830+
resources:
831+
- replicationcontrollers/finalizers
832+
verbs:
833+
- update
800834
- apiGroups:
801835
- ""
802836
resources:
@@ -962,7 +996,6 @@ items:
962996
resources:
963997
- statefulsets
964998
verbs:
965-
- delete
966999
- get
9671000
- list
9681001
- watch
@@ -972,6 +1005,12 @@ items:
9721005
- statefulsets/status
9731006
verbs:
9741007
- update
1008+
- apiGroups:
1009+
- apps
1010+
resources:
1011+
- statefulsets/finalizers
1012+
verbs:
1013+
- update
9751014
- apiGroups:
9761015
- ""
9771016
resources:

0 commit comments

Comments
 (0)