Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SECURESIGN-994] Add TLS to Rekor and Trillian services #493

Closed
wants to merge 34 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
33083c2
Add TLS to Rekor and Trillian services
fghanmi Jul 9, 2024
f48f6e5
updates tls e2e
fghanmi Jul 9, 2024
78faaa2
updates
fghanmi Aug 5, 2024
81eeeb1
updates: Create Tree Jobs, enable TLS on Trillian, Rekor and Ctlog
fghanmi Aug 8, 2024
8268ca5
update
fghanmi Aug 8, 2024
6fabfd8
fix lint
fghanmi Aug 8, 2024
b018066
updates
fghanmi Aug 8, 2024
c7dd2ee
update e2e
fghanmi Aug 8, 2024
cd12c14
make API_SERVER generic
fghanmi Aug 8, 2024
e149cff
updates(images+ctlog cm)
fghanmi Aug 8, 2024
b1b428d
test operator image
fghanmi Aug 8, 2024
752d860
remove tls e2e
fghanmi Aug 8, 2024
a546376
update
fghanmi Aug 8, 2024
9515212
update api/v1alpha1/common.go
fghanmi Aug 9, 2024
bd5435e
updates
fghanmi Aug 17, 2024
d46f495
review updates
fghanmi Aug 21, 2024
5f73e75
fix conflicts
fghanmi Aug 21, 2024
c7d4f69
improve resolve_tree
fghanmi Aug 28, 2024
aef2cf9
update: create_tree
fghanmi Aug 31, 2024
467e3cf
add CREATE_TREE_IMAGE var to manager cli
fghanmi Sep 2, 2024
dba5a13
solve conflicts, updates
fghanmi Sep 11, 2024
93191cb
solve conflicts
fghanmi Sep 11, 2024
c512c85
fix comments
fghanmi Sep 12, 2024
128470e
remove unsed comment
fghanmi Sep 12, 2024
d55f915
fix typo
fghanmi Sep 12, 2024
03d0bf2
update manifests
fghanmi Sep 12, 2024
1dc5287
updates
fghanmi Sep 12, 2024
a8248c7
updates
fghanmi Sep 12, 2024
c97bae3
remove unused changes
fghanmi Sep 13, 2024
76c0b08
remove unused changes
fghanmi Sep 13, 2024
98cc6b4
updates: reviews
fghanmi Sep 13, 2024
b6cf949
updates2: reviews
fghanmi Sep 13, 2024
cab998c
generic create_tree_job
fghanmi Sep 14, 2024
25f265b
enhance useTLS
fghanmi Sep 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
review updates
fghanmi committed Sep 18, 2024

Verified

This commit was signed with the committer’s verified signature.
osmman Tomas Turek
commit d46f49505bef28f1b6f5dde73d8226f4ddf3abe6
5 changes: 2 additions & 3 deletions api/v1alpha1/common.go
Original file line number Diff line number Diff line change
@@ -107,15 +107,15 @@ type Pvc struct {
AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty"`
}

<<<<<<< HEAD
type Auth struct {
// Environmental variables used to define authentication parameters
//+optional
Env []core.EnvVar `json:"env,omitempty"`
// Secret ref to be mounted inside a pod, Mount path defaults to /var/run/secrets/tas/auth
//+optional
SecretMount []SecretKeySelector `json:"secretMount,omitempty"`
=======
}

// TLSCert defines fields for TLS certificate
// +kubebuilder:validation:XValidation:rule=(!has(self.certRef) || has(self.privateKeyRef)),message=privateKeyRef cannot be empty
type TLSCert struct {
@@ -128,7 +128,6 @@ type TLSCert struct {
// Reference to CA certificate
//+optional
CACertRef *LocalObjectReference `json:"caCertRef,omitempty"`
>>>>>>> bddb484 (Add TLS to Rekor and Trillian services)
}

// TLS (Transport Layer Security) Configuration for enabling service encryption.
4 changes: 2 additions & 2 deletions bundle/manifests/rhtas-operator.clusterserviceversion.yaml
Original file line number Diff line number Diff line change
@@ -92,8 +92,8 @@ metadata:
"OIDCIssuers": [
{
"ClientID": "trusted-artifact-signer",
"Issuer": "https://keycloak-keycloak-system.apps.rosa.tbc2f-pzqvt-33r.f86b.p3.openshiftapps.com/auth/realms/trusted-artifact-signer",
"IssuerURL": "https://keycloak-keycloak-system.apps.rosa.tbc2f-pzqvt-33r.f86b.p3.openshiftapps.com/auth/realms/trusted-artifact-signer",
"Issuer": "https://keycloak-keycloak-system.apps.rosa.ersmh-9o3fp-99x.qre7.p3.openshiftapps.com/auth/realms/trusted-artifact-signer",
"IssuerURL": "https://keycloak-keycloak-system.apps.rosa.ersmh-9o3fp-99x.qre7.p3.openshiftapps.com/auth/realms/trusted-artifact-signer",
"Type": "email"
}
]
4 changes: 2 additions & 2 deletions config/samples/rhtas_v1alpha1_securesign.yaml
Original file line number Diff line number Diff line change
@@ -23,8 +23,8 @@ spec:
config:
OIDCIssuers:
- ClientID: "trusted-artifact-signer"
IssuerURL: "https://your-oidc-issuer-url"
Issuer: "https://your-oidc-issuer-url"
IssuerURL: "https://keycloak-keycloak-system.apps.rosa.ersmh-9o3fp-99x.qre7.p3.openshiftapps.com/auth/realms/trusted-artifact-signer"
Issuer: "https://keycloak-keycloak-system.apps.rosa.ersmh-9o3fp-99x.qre7.p3.openshiftapps.com/auth/realms/trusted-artifact-signer"
Type: "email"
certificate:
organizationName: Red Hat
Original file line number Diff line number Diff line change
@@ -29,9 +29,7 @@ func (i configMapAction) Name() string {
func (i configMapAction) CanHandle(ctx context.Context, instance *rhtasv1alpha1.CTlog) bool {
c := meta.FindStatusCondition(instance.Status.Conditions, constants.Ready)
cm, _ := k8sutils.GetConfigMap(ctx, i.Client, instance.Namespace, "ca-configmap")
// signingKeySecret: OCP
signingKeySecret, _ := k8sutils.GetSecret(i.Client, "openshift-service-ca", "signing-key")
return (c.Reason == constants.Creating || c.Reason == constants.Ready) && cm == nil && signingKeySecret != nil && instance.Spec.TLSCertificate.CACertRef == nil
return (c.Reason == constants.Creating || c.Reason == constants.Ready) && cm == nil && k8sutils.IsOpenShift() && instance.Spec.TLSCertificate.CACertRef == nil
}

func (i configMapAction) Handle(ctx context.Context, instance *rhtasv1alpha1.CTlog) *action.Result {
17 changes: 7 additions & 10 deletions internal/controller/ctlog/actions/create_tree_job.go
Original file line number Diff line number Diff line change
@@ -100,14 +100,13 @@ func (i createTreeJobAction) Handle(ctx context.Context, instance *rhtasv1alpha1
activeDeadlineSeconds := int64(600)
backoffLimit := int32(5)

signingKeySecret, _ := kubernetes.GetSecret(i.Client, "openshift-service-ca", "signing-key")
trustedCAAnnotation := cutils.TrustedCAAnnotationToReference(instance.Annotations)
cmd := ""
switch {
case trustedCAAnnotation != nil:
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=ctlog-tree --tls_cert_file=/var/run/configs/tas/ca-trust/ca-bundle.crt", trillUrl)
case signingKeySecret != nil:
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=ctlog-tree --tls_cert_file=/etc/ssl/certs/tls.crt", trillUrl)
case kubernetes.IsOpenShift():
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=ctlog-tree --tls_cert_file=/var/run/secrets/tas/tls.crt", trillUrl)
default:
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=ctlog-tree", trillUrl)
}
@@ -146,14 +145,12 @@ func (i createTreeJobAction) Handle(ctx context.Context, instance *rhtasv1alpha1
return i.Failed(fmt.Errorf("could not set controller reference for Job: %w", err))
}

if trustedCAAnnotation != nil {
err = cutils.SetTrustedCA(&job.Spec.Template, cutils.TrustedCAAnnotationToReference(instance.Annotations))
if err != nil {
return i.Failed(err)
}
err = cutils.SetTrustedCA(&job.Spec.Template, cutils.TrustedCAAnnotationToReference(instance.Annotations))
if err != nil {
return i.Failed(err)
}

if signingKeySecret != nil && trustedCAAnnotation == nil {
if kubernetes.IsOpenShift() && trustedCAAnnotation == nil {
job.Spec.Template.Spec.Volumes = append(job.Spec.Template.Spec.Volumes,
corev1.Volume{
Name: "tls-cert",
@@ -166,7 +163,7 @@ func (i createTreeJobAction) Handle(ctx context.Context, instance *rhtasv1alpha1
job.Spec.Template.Spec.Containers[0].VolumeMounts = append(job.Spec.Template.Spec.Containers[0].VolumeMounts,
corev1.VolumeMount{
Name: "tls-cert",
MountPath: "/etc/ssl/certs",
MountPath: "/var/run/secrets/tas",
ReadOnly: true,
})
}
15 changes: 7 additions & 8 deletions internal/controller/ctlog/actions/deployment.go
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@ import (

rhtasv1alpha1 "github.com/securesign/operator/api/v1alpha1"
"github.com/securesign/operator/internal/controller/common/action"
k8sutils "github.com/securesign/operator/internal/controller/common/utils/kubernetes"
"github.com/securesign/operator/internal/controller/common/utils/kubernetes"
"github.com/securesign/operator/internal/controller/constants"
"github.com/securesign/operator/internal/controller/ctlog/utils"
trillian "github.com/securesign/operator/internal/controller/trillian/actions"
@@ -43,7 +43,6 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.CTlog)

labels := constants.LabelsFor(ComponentName, DeploymentName, instance.Name)

signingKeySecret, _ := k8sutils.GetSecret(i.Client, "openshift-service-ca", "signing-key")
switch {
case instance.Spec.Trillian.Address == "":
instance.Spec.Trillian.Address = fmt.Sprintf("%s.%s.svc", trillian.LogserverDeploymentName, instance.Namespace)
@@ -115,7 +114,7 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.CTlog)
},
},
})
} else if signingKeySecret != nil {
} else if kubernetes.IsOpenShift() {
i.Logger.V(1).Info("TLS: Using secrets/signing-key secret")
dp.Spec.Template.Spec.Volumes = append(dp.Spec.Template.Spec.Volumes,
corev1.Volume{
@@ -151,16 +150,16 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.CTlog)
i.Logger.V(1).Info("Communication between services is insecure")
}

if instance.Spec.TLSCertificate.CertRef != nil && instance.Spec.TLSCertificate.CACertRef != nil || signingKeySecret != nil {
if instance.Spec.TLSCertificate.CertRef != nil && instance.Spec.TLSCertificate.CACertRef != nil || kubernetes.IsOpenShift() {
dp.Spec.Template.Spec.Containers[0].VolumeMounts = append(dp.Spec.Template.Spec.Containers[0].VolumeMounts,
corev1.VolumeMount{
Name: "tls-cert",
MountPath: "/etc/ssl/certs",
MountPath: "/var/run/secrets/tas",
ReadOnly: true,
})
// dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--tls_certificate", "/etc/ssl/certs/tls.crt")
// dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--tls_key", "/etc/ssl/certs/tls.key")
dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--trillian_tls_ca_cert_file", "/etc/ssl/certs/ca.crt")
// dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--tls_certificate", "/var/run/secrets/tas/tls.crt")
// dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--tls_key", "/var/run/secrets/tas/tls.key")
dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--trillian_tls_ca_cert_file", "/var/run/secrets/tas/ca.crt")
}

if err = controllerutil.SetControllerReference(instance, dp, i.Client.Scheme()); err != nil {
1 change: 0 additions & 1 deletion internal/controller/ctlog/actions/resolve_tree.go
Original file line number Diff line number Diff line change
@@ -71,7 +71,6 @@ func (i resolveTreeAction) Handle(ctx context.Context, instance *rhtasv1alpha1.C
if err != nil {
i.Logger.V(1).Error(fmt.Errorf("waiting for the ConfigMap"), err.Error())
}
time.Sleep(2 * time.Second)
}

if err != nil {
4 changes: 1 addition & 3 deletions internal/controller/ctlog/actions/service.go
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@ import (
rhtasv1alpha1 "github.com/securesign/operator/api/v1alpha1"
"github.com/securesign/operator/internal/controller/common/action"
"github.com/securesign/operator/internal/controller/common/utils/kubernetes"
k8sutils "github.com/securesign/operator/internal/controller/common/utils/kubernetes"
"github.com/securesign/operator/internal/controller/constants"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/meta"
@@ -42,7 +41,6 @@ func (i serviceAction) Handle(ctx context.Context, instance *rhtasv1alpha1.CTlog
labels := constants.LabelsFor(ComponentName, ComponentName, instance.Name)

svc := kubernetes.CreateService(instance.Namespace, ComponentName, ServerPortName, ServerPort, ServerTargetPort, labels)
signingKeySecret, _ := k8sutils.GetSecret(i.Client, "openshift-service-ca", "signing-key")
if instance.Spec.Monitoring.Enabled {
svc.Spec.Ports = append(svc.Spec.Ports, corev1.ServicePort{
Name: MetricsPortName,
@@ -65,7 +63,7 @@ func (i serviceAction) Handle(ctx context.Context, instance *rhtasv1alpha1.CTlog
}

//TLS: Annotate service
if signingKeySecret != nil && instance.Spec.TLSCertificate.CertRef == nil {
if kubernetes.IsOpenShift() && instance.Spec.TLSCertificate.CertRef == nil {
if svc.Annotations == nil {
svc.Annotations = make(map[string]string)
}
17 changes: 7 additions & 10 deletions internal/controller/rekor/actions/server/create_tree_job.go
Original file line number Diff line number Diff line change
@@ -101,14 +101,13 @@ func (i createTreeJobAction) Handle(ctx context.Context, instance *rhtasv1alpha1
activeDeadlineSeconds := int64(600)
backoffLimit := int32(5)

signingKeySecret, _ := kubernetes.GetSecret(i.Client, "openshift-service-ca", "signing-key")
trustedCAAnnotation := cutils.TrustedCAAnnotationToReference(instance.Annotations)
cmd := ""
switch {
case trustedCAAnnotation != nil:
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=rekor-tree --tls_cert_file=/var/run/configs/tas/ca-trust/ca-bundle.crt", trillUrl)
case signingKeySecret != nil:
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=rekor-tree --tls_cert_file=/etc/ssl/certs/tls.crt", trillUrl)
case kubernetes.IsOpenShift():
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=rekor-tree --tls_cert_file=/var/run/secrets/tas/tls.crt", trillUrl)
default:
cmd = fmt.Sprintf("/createtree --admin_server=%s --display_name=rekor-tree", trillUrl)
}
@@ -147,14 +146,12 @@ func (i createTreeJobAction) Handle(ctx context.Context, instance *rhtasv1alpha1
return i.Failed(fmt.Errorf("could not set controller reference for Job: %w", err))
}

if trustedCAAnnotation != nil {
err = cutils.SetTrustedCA(&job.Spec.Template, cutils.TrustedCAAnnotationToReference(instance.Annotations))
if err != nil {
return i.Failed(err)
}
err = cutils.SetTrustedCA(&job.Spec.Template, cutils.TrustedCAAnnotationToReference(instance.Annotations))
if err != nil {
return i.Failed(err)
}

if signingKeySecret != nil && trustedCAAnnotation == nil {
if kubernetes.IsOpenShift() && trustedCAAnnotation == nil {
job.Spec.Template.Spec.Volumes = append(job.Spec.Template.Spec.Volumes,
corev1.Volume{
Name: "tls-cert",
@@ -167,7 +164,7 @@ func (i createTreeJobAction) Handle(ctx context.Context, instance *rhtasv1alpha1
job.Spec.Template.Spec.Containers[0].VolumeMounts = append(job.Spec.Template.Spec.Containers[0].VolumeMounts,
corev1.VolumeMount{
Name: "tls-cert",
MountPath: "/etc/ssl/certs",
MountPath: "/var/run/secrets/tas",
ReadOnly: true,
})
}
9 changes: 4 additions & 5 deletions internal/controller/rekor/actions/server/deployment.go
Original file line number Diff line number Diff line change
@@ -72,7 +72,6 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Rekor)
}

// TLS certificate
signingKeySecret, _ := k8sutils.GetSecret(i.Client, "openshift-service-ca", "signing-key")
if instance.Spec.TLSCertificate.CACertRef != nil {
dp.Spec.Template.Spec.Volumes = append(dp.Spec.Template.Spec.Volumes,
corev1.Volume{
@@ -97,7 +96,7 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Rekor)
},
},
})
} else if signingKeySecret != nil {
} else if k8sutils.IsOpenShift() {
dp.Spec.Template.Spec.Volumes = append(dp.Spec.Template.Spec.Volumes,
corev1.Volume{
Name: "tls-cert",
@@ -125,14 +124,14 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Rekor)
i.Logger.V(1).Info("Communication between services is insecure")
}

if instance.Spec.TLSCertificate.CACertRef != nil || signingKeySecret != nil {
if instance.Spec.TLSCertificate.CACertRef != nil || k8sutils.IsOpenShift() {
dp.Spec.Template.Spec.Containers[0].VolumeMounts = append(dp.Spec.Template.Spec.Containers[0].VolumeMounts,
corev1.VolumeMount{
Name: "tls-cert",
MountPath: "/etc/ssl/certs",
MountPath: "/var/run/secrets/tas",
ReadOnly: true,
})
dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--trillian_log_server.tls_ca_cert", "/etc/ssl/certs/ca.crt")
dp.Spec.Template.Spec.Containers[0].Args = append(dp.Spec.Template.Spec.Containers[0].Args, "--trillian_log_server.tls_ca_cert", "/var/run/secrets/tas/ca.crt")
}

if err = controllerutil.SetControllerReference(instance, dp, i.Client.Scheme()); err != nil {
1 change: 0 additions & 1 deletion internal/controller/rekor/actions/server/resolve_tree.go
Original file line number Diff line number Diff line change
@@ -72,7 +72,6 @@ func (i resolveTreeAction) Handle(ctx context.Context, instance *rhtasv1alpha1.R
if err != nil {
i.Logger.V(1).Error(fmt.Errorf("waiting for the ConfigMap"), err.Error())
}
time.Sleep(2 * time.Second)
}

if err != nil {
11 changes: 5 additions & 6 deletions internal/controller/trillian/actions/logserver/deployment.go
Original file line number Diff line number Diff line change
@@ -71,7 +71,6 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Trilli
}

// TLS certificate
signingKeySecret, _ := k8sutils.GetSecret(i.Client, "openshift-service-ca", "signing-key")
if instance.Spec.TrillianServer.TLSCertificate.CertRef != nil {
server.Spec.Template.Spec.Volumes = append(server.Spec.Template.Spec.Volumes,
corev1.Volume{
@@ -109,7 +108,7 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Trilli
},
},
})
} else if signingKeySecret != nil {
} else if k8sutils.IsOpenShift() {
i.Logger.V(1).Info("TLS: Using secrets/signing-key secret")
server.Spec.Template.Spec.Volumes = append(server.Spec.Template.Spec.Volumes,
corev1.Volume{
@@ -124,15 +123,15 @@ func (i deployAction) Handle(ctx context.Context, instance *rhtasv1alpha1.Trilli
i.Logger.V(1).Info("Communication between services is insecure")
}

if instance.Spec.TrillianServer.TLSCertificate.CertRef != nil || signingKeySecret != nil {
if instance.Spec.TrillianServer.TLSCertificate.CertRef != nil || k8sutils.IsOpenShift() {
server.Spec.Template.Spec.Containers[0].VolumeMounts = append(server.Spec.Template.Spec.Containers[0].VolumeMounts,
corev1.VolumeMount{
Name: "tls-cert",
MountPath: "/etc/ssl/certs",
MountPath: "/var/run/secrets/tas",
ReadOnly: true,
})
server.Spec.Template.Spec.Containers[0].Args = append(server.Spec.Template.Spec.Containers[0].Args, "--tls_cert_file", "/etc/ssl/certs/tls.crt")
server.Spec.Template.Spec.Containers[0].Args = append(server.Spec.Template.Spec.Containers[0].Args, "--tls_key_file", "/etc/ssl/certs/tls.key")
server.Spec.Template.Spec.Containers[0].Args = append(server.Spec.Template.Spec.Containers[0].Args, "--tls_cert_file", "/var/run/secrets/tas/tls.crt")
server.Spec.Template.Spec.Containers[0].Args = append(server.Spec.Template.Spec.Containers[0].Args, "--tls_key_file", "/var/run/secrets/tas/tls.key")
}

if err = controllerutil.SetControllerReference(instance, server, i.Client.Scheme()); err != nil {
3 changes: 1 addition & 2 deletions internal/controller/trillian/actions/logserver/service.go
Original file line number Diff line number Diff line change
@@ -74,8 +74,7 @@ func (i createServiceAction) Handle(ctx context.Context, instance *rhtasv1alpha1
}

//TLS: Annotate service
signingKeySecret, _ := k8sutils.GetSecret(i.Client, "openshift-service-ca", "signing-key")
if signingKeySecret != nil && instance.Spec.TrillianServer.TLSCertificate.CertRef == nil {
if k8sutils.IsOpenShift() && instance.Spec.TrillianServer.TLSCertificate.CertRef == nil {
if logserverService.Annotations == nil {
logserverService.Annotations = make(map[string]string)
}