Skip to content

Commit 87a3d95

Browse files
olm: look for rbac we create literally
Signed-off-by: Steve Kuznetsov <[email protected]>
1 parent f7383ec commit 87a3d95

File tree

2 files changed

+22
-49
lines changed

2 files changed

+22
-49
lines changed

pkg/controller/install/certresources.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ func (i *StrategyDeploymentInstaller) installCertRequirementsForDeployment(deplo
456456
Name: "system:auth-delegator",
457457
},
458458
}
459-
authDelegatorClusterRoleBinding.SetName(service.GetName() + "-system:auth-delegator")
459+
authDelegatorClusterRoleBinding.SetName(AuthDelegatorClusterRoleBindingName(service.GetName()))
460460
authDelegatorClusterRoleBinding.SetLabels(map[string]string{OLMManagedLabelKey: OLMManagedLabelValue})
461461

462462
existingAuthDelegatorClusterRoleBinding, err := i.strategyClient.GetOpLister().RbacV1().ClusterRoleBindingLister().Get(authDelegatorClusterRoleBinding.GetName())
@@ -504,7 +504,7 @@ func (i *StrategyDeploymentInstaller) installCertRequirementsForDeployment(deplo
504504
Name: "extension-apiserver-authentication-reader",
505505
},
506506
}
507-
authReaderRoleBinding.SetName(service.GetName() + "-auth-reader")
507+
authReaderRoleBinding.SetName(AuthReaderRolebindingName(service.GetName()))
508508
authReaderRoleBinding.SetNamespace(KubeSystem)
509509
authReaderRoleBinding.SetLabels(map[string]string{OLMManagedLabelKey: OLMManagedLabelValue})
510510

@@ -543,6 +543,14 @@ func (i *StrategyDeploymentInstaller) installCertRequirementsForDeployment(deplo
543543
return &depSpec, caPEM, nil
544544
}
545545

546+
func AuthDelegatorClusterRoleBindingName(serviceName string) string {
547+
return serviceName + "-system:auth-delegator"
548+
}
549+
550+
func AuthReaderRolebindingName(serviceName string) string {
551+
return serviceName + "-auth-reader"
552+
}
553+
546554
func SetCAAnnotation(depSpec *appsv1.DeploymentSpec, caHash string) {
547555
if len(depSpec.Template.ObjectMeta.GetAnnotations()) == 0 {
548556
depSpec.Template.ObjectMeta.SetAnnotations(map[string]string{OLMCAHashAnnotationKey: caHash})

pkg/controller/operators/olm/apiservices.go

+12-47
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66

77
log "github.com/sirupsen/logrus"
88
appsv1 "k8s.io/api/apps/v1"
9-
rbacv1 "k8s.io/api/rbac/v1"
109
apierrors "k8s.io/apimachinery/pkg/api/errors"
1110
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1211
"k8s.io/apimachinery/pkg/labels"
@@ -47,7 +46,6 @@ func (a *Operator) checkAPIServiceResources(csv *v1alpha1.ClusterServiceVersion,
4746
})
4847

4948
errs := []error{}
50-
ruleChecker := install.NewCSVRuleChecker(a.lister.RbacV1().RoleLister(), a.lister.RbacV1().RoleBindingLister(), a.lister.RbacV1().ClusterRoleLister(), a.lister.RbacV1().ClusterRoleBindingLister(), csv)
5149
for _, desc := range csv.GetOwnedAPIServiceDescriptions() {
5250
apiServiceName := desc.GetName()
5351
logger := logger.WithFields(log.Fields{
@@ -164,60 +162,27 @@ func (a *Operator) checkAPIServiceResources(csv *v1alpha1.ClusterServiceVersion,
164162
if serviceAccountName == "" {
165163
serviceAccountName = "default"
166164
}
167-
serviceAccount, err := a.lister.CoreV1().ServiceAccountLister().ServiceAccounts(deployment.GetNamespace()).Get(serviceAccountName)
165+
_, err = a.opClient.KubernetesInterface().CoreV1().ServiceAccounts(deployment.GetNamespace()).Get(context.TODO(), serviceAccountName, metav1.GetOptions{})
168166
if err != nil {
169-
logger.WithField("serviceaccount", serviceAccountName).Warnf("could not retrieve ServiceAccount")
167+
logger.WithError(err).WithField("serviceaccount", serviceAccountName).Warnf("could not retrieve ServiceAccount")
170168
errs = append(errs, err)
171-
continue
172169
}
173170

174-
// Ensure RBAC permissions for the APIService are correct
175-
rulesMap := map[string][]rbacv1.PolicyRule{
176-
// Serving cert Secret Rule
177-
csv.GetNamespace(): {
178-
{
179-
Verbs: []string{"get"},
180-
APIGroups: []string{""},
181-
Resources: []string{"secrets"},
182-
ResourceNames: []string{secret.GetName()},
183-
},
184-
},
185-
install.KubeSystem: {},
186-
metav1.NamespaceAll: {},
171+
if _, err := a.lister.RbacV1().RoleLister().Roles(secret.GetNamespace()).Get(secret.GetName()); err != nil {
172+
logger.WithError(err).Warnf("could not retrieve role %s/%s", secret.GetNamespace(), secret.GetName())
173+
errs = append(errs, err)
187174
}
188-
189-
// extension-apiserver-authentication-reader
190-
authReaderRole, err := a.lister.RbacV1().RoleLister().Roles(install.KubeSystem).Get("extension-apiserver-authentication-reader")
191-
if err != nil {
192-
logger.Warnf("could not retrieve Role extension-apiserver-authentication-reader")
175+
if _, err := a.lister.RbacV1().RoleBindingLister().RoleBindings(secret.GetNamespace()).Get(secret.GetName()); err != nil {
176+
logger.WithError(err).Warnf("could not retrieve role binding %s/%s", secret.GetNamespace(), secret.GetName())
193177
errs = append(errs, err)
194-
continue
195178
}
196-
rulesMap[install.KubeSystem] = append(rulesMap[install.KubeSystem], authReaderRole.Rules...)
197-
198-
// system:auth-delegator
199-
authDelegatorClusterRole, err := a.lister.RbacV1().ClusterRoleLister().Get("system:auth-delegator")
200-
if err != nil {
201-
logger.Warnf("could not retrieve ClusterRole system:auth-delegator")
179+
if _, err := a.lister.RbacV1().ClusterRoleBindingLister().Get(install.AuthDelegatorClusterRoleBindingName(service.GetName())); err != nil {
180+
logger.WithError(err).Warnf("could not retrieve auth delegator cluster role binding %s", install.AuthDelegatorClusterRoleBindingName(service.GetName()))
202181
errs = append(errs, err)
203-
continue
204182
}
205-
rulesMap[metav1.NamespaceAll] = append(rulesMap[metav1.NamespaceAll], authDelegatorClusterRole.Rules...)
206-
207-
for namespace, rules := range rulesMap {
208-
for _, rule := range rules {
209-
satisfied, err := ruleChecker.RuleSatisfied(serviceAccount, namespace, rule)
210-
if err != nil {
211-
logger.WithField("rule", fmt.Sprintf("%+v", rule)).Warnf("error checking Rule")
212-
errs = append(errs, err)
213-
continue
214-
}
215-
if !satisfied {
216-
logger.WithField("rule", fmt.Sprintf("%+v", rule)).Warnf("Rule not satisfied")
217-
errs = append(errs, fmt.Errorf("rule %+v not satisfied", rule))
218-
continue
219-
}
220-
}
183+
if _, err := a.lister.RbacV1().RoleBindingLister().RoleBindings(install.KubeSystem).Get(install.AuthReaderRolebindingName(service.GetName())); err != nil {
184+
logger.WithError(err).Warnf("could not retrieve role binding %s/%s", install.KubeSystem, install.AuthReaderRolebindingName(service.GetName()))
185+
errs = append(errs, err)
221186
}
222187
}
223188

0 commit comments

Comments
 (0)