Skip to content

Commit 675ec87

Browse files
Merge pull request #14 from IBM/fix/ca
Fix/ca
2 parents e620686 + 66573b3 commit 675ec87

File tree

36 files changed

+1051
-131
lines changed

36 files changed

+1051
-131
lines changed

develop/local-deploy/crds/research.ibm.com_v1alpha1_integrityenforcer_cr_local.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ spec:
1212
- request:
1313
namespace: '*'
1414
subject:
15-
15+
commonName: "Cluster Admin"
16+
- request:
17+
namespace: '*'
18+
subject:
19+
1620
enforce:
1721
- namespace: '*'
1822
ignoreRequest: []
@@ -34,6 +38,10 @@ spec:
3438
enforcerConfigCrName: ie-config
3539
globalConfig: {}
3640
imagePullSecrets: []
41+
certPoolConfig:
42+
createIfNotExist: false
43+
keyValue: test
44+
name: ie-certpool-secret
3745
keyRingConfig:
3846
createIfNotExist: false
3947
keyValue: test

develop/signservice/signservice-operator/deploy/crds/research.ibm.com_signservices_crd.yaml

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,25 @@ spec:
3131
spec:
3232
description: SignServiceSpec defines the desired state of SignService
3333
properties:
34-
PrivateKeyRingSecretName:
35-
type: string
34+
certSigners:
35+
items:
36+
properties:
37+
isCA:
38+
type: boolean
39+
issuerName:
40+
type: string
41+
name:
42+
type: string
43+
type: object
44+
type: array
3645
enabled:
3746
description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
3847
Important: Run "operator-sdk generate k8s" to regenerate code after
3948
modifying this file Add custom validation using kubebuilder tags:
4049
https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
4150
type: boolean
51+
ieCertPoolSecretName:
52+
type: string
4253
imagePullSecrets:
4354
items:
4455
description: LocalObjectReference contains enough information to let
@@ -56,6 +67,8 @@ spec:
5667
type: array
5768
keyRingSecretName:
5869
type: string
70+
privateKeyRingSecretName:
71+
type: string
5972
serviceAccountName:
6073
type: string
6174
signService:
@@ -77,20 +90,30 @@ spec:
7790
properties:
7891
limits:
7992
additionalProperties:
80-
type: string
93+
anyOf:
94+
- type: integer
95+
- type: string
96+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
97+
x-kubernetes-int-or-string: true
8198
description: 'Limits describes the maximum amount of compute
8299
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
83100
type: object
84101
requests:
85102
additionalProperties:
86-
type: string
103+
anyOf:
104+
- type: integer
105+
- type: string
106+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
107+
x-kubernetes-int-or-string: true
87108
description: 'Requests describes the minimum amount of compute
88109
resources required. If Requests is omitted for a container,
89110
it defaults to Limits if that is explicitly specified, otherwise
90111
to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
91112
type: object
92113
type: object
93114
type: object
115+
signServiceSecretName:
116+
type: string
94117
signers:
95118
items:
96119
type: string

develop/signservice/signservice-operator/deploy/crds/research.ibm.com_v1alpha1_signservice_cr.yaml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,23 @@ metadata:
55
spec:
66
enabled: true
77
keyRingSecretName: keyring-secret
8-
PrivateKeyRingSecretName: private-keyring-secret
8+
privateKeyRingSecretName: private-keyring-secret
9+
signServiceSecretName: signservice-secret
10+
ieCertPoolSecretName: ie-certpool-secret
911
serviceAccountName: signservice-sa
1012
imagePullSecrets: []
13+
certSigners:
14+
- name: "Root CA"
15+
isCA: true
16+
- name: "Intermediate CA"
17+
issuerName: "Root CA"
18+
isCA: true
19+
- name: "Cluster Admin"
20+
issuerName: "Intermediate CA"
21+
isCA: false
22+
- name: "Service Team Admin A"
23+
issuerName: "Intermediate CA"
24+
isCA: false
1125
signers:
1226
1327
invalidSigners:

develop/signservice/signservice-operator/deploy/crds/research.ibm.com_v1alpha1_signservice_cr_local.yaml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,23 @@ metadata:
55
spec:
66
enabled: true
77
keyRingSecretName: keyring-secret
8-
PrivateKeyRingSecretName: private-keyring-secret
8+
privateKeyRingSecretName: private-keyring-secret
9+
signServiceSecretName: signservice-secret
10+
ieCertPoolSecretName: ie-certpool-secret
911
serviceAccountName: signservice-sa
1012
imagePullSecrets: []
13+
certSigners:
14+
- name: "Root CA"
15+
isCA: true
16+
- name: "Intermediate CA"
17+
issuerName: "Root CA"
18+
isCA: true
19+
- name: "Cluster Admin"
20+
issuerName: "Intermediate CA"
21+
isCA: false
22+
- name: "Service Team Admin A"
23+
issuerName: "Intermediate CA"
24+
isCA: false
1125
signers:
1226
1327
invalidSigners:

develop/signservice/signservice-operator/go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ replace (
2121
github.com/IBM/integrity-enforcer/enforcer => ../../../enforcer
2222
github.com/IBM/integrity-enforcer/operator => ../../../operator
2323
github.com/Azure/go-autorest => github.com/Azure/go-autorest v13.3.4-0.20200207053602-7439e774c9e9+incompatible
24-
github.com/IBM/integrity-enforcer/enforcer => ../../../enforcer
2524
k8s.io/api => k8s.io/api v0.16.5-beta.1
2625
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.16.5-beta.1
2726
k8s.io/apimachinery => k8s.io/apimachinery v0.16.5-beta.1

develop/signservice/signservice-operator/go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q
6464
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
6565
github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14=
6666
github.com/IBM/integrity-enforcer v0.0.0-20200602121605-c0fa868d3900 h1:oAVE0J7k3c9vpux3RcbUz+bRX685eP++ZOWXT9lOiCU=
67+
github.com/IBM/integrity-enforcer v0.0.0-20200629083539-d7f76e65d8ac h1:MkZ13HjGkxhClkHHSlVemcWdkqLVRXl1oonWgrLwrDw=
6768
github.com/IBM/integrity-enforcer/operator v0.0.0-20200602121605-c0fa868d3900 h1:1t4sod4GyNSuVWc8EL0nc3QZWlsmGI45LY1Rc1xaNCA=
6869
github.com/IBM/integrity-enforcer/operator v0.0.0-20200602121605-c0fa868d3900/go.mod h1:yOulHMTF8y/Lo9IimqaBEdlaXZ29sj5OZiqXmAzlSWM=
6970
github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA=

develop/signservice/signservice-operator/pkg/apis/research/v1alpha1/signservice_types.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package v1alpha1
1818

1919
import (
20+
pkix "github.com/IBM/integrity-enforcer/develop/signservice/signservice-operator/pkg/pkix"
2021
v1 "k8s.io/api/core/v1"
2122
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
)
@@ -31,12 +32,15 @@ type SignServiceSpec struct {
3132
// Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html
3233
Enabled bool `json:"enabled,omitempty"`
3334
KeyRingSecretName string `json:"keyRingSecretName,omitempty"`
34-
PrivateKeyRingSecretName string `json:"PrivateKeyRingSecretName,omitempty"`
35+
PrivateKeyRingSecretName string `json:"privateKeyRingSecretName,omitempty"`
36+
SignServiceSecretName string `json:"signServiceSecretName,omitempty"`
37+
IECertPoolSecretName string `json:"ieCertPoolSecretName,omitempty"`
3538
ImagePullSecrets []v1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
3639
ServiceAccountName string `json:"serviceAccountName,omitempty"`
3740
SignService SignServiceContainer `json:"signService,omitempty"`
3841
Signers []string `json:"signers,omitempty"`
3942
InvalidSigners []string `json:"invalidSigners,omitempty"`
43+
CertSigners []pkix.SignerCertName `json:"certSigners,omitempty"`
4044
}
4145

4246
type SignServiceContainer struct {

develop/signservice/signservice-operator/pkg/apis/research/v1alpha1/zz_generated.deepcopy.go

Lines changed: 6 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

develop/signservice/signservice-operator/pkg/controller/signservice/signservice.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
researchv1alpha1 "github.com/IBM/integrity-enforcer/develop/signservice/signservice-operator/pkg/apis/research/v1alpha1"
2424
"github.com/IBM/integrity-enforcer/develop/signservice/signservice-operator/pkg/pgpkey"
25+
"github.com/IBM/integrity-enforcer/develop/signservice/signservice-operator/pkg/pkix"
2526
res "github.com/IBM/integrity-enforcer/develop/signservice/signservice-operator/pkg/resources"
2627
"github.com/IBM/integrity-enforcer/operator/pkg/cert"
2728
appsv1 "k8s.io/api/apps/v1"
@@ -84,6 +85,36 @@ func (r *ReconcileSignService) createOrUpdateSecret(instance *researchv1alpha1.S
8485

8586
}
8687

88+
// create 2 signer secrets for signservice and for ie at the same time
89+
func (r *ReconcileSignService) createOrUpdateSignerCertSecret(
90+
instance *researchv1alpha1.SignService) (reconcile.Result, error) {
91+
92+
// signservice-secret
93+
expected := res.BuildSignServiceSecretForIE(instance)
94+
95+
reqLogger := log.WithValues(
96+
"Instance.Name", instance.Name,
97+
"Secret.Name", expected.Name)
98+
99+
keyBoxList, err := pkix.CreateKeyBoxListFromSignerChain(instance.Spec.CertSigners)
100+
if err != nil {
101+
reqLogger.Error(err, "Failed to generate keyring.")
102+
return reconcile.Result{}, err
103+
}
104+
105+
expected.Data = keyBoxList.ToSecretData()
106+
recResult, err := r.createOrUpdateSecret(instance, expected)
107+
if err != nil {
108+
reqLogger.Error(err, "Failed to generate keyring.")
109+
return recResult, err
110+
}
111+
112+
// ie-certpool-secret
113+
expected2 := res.BuildIECertPoolSecretForIE(instance)
114+
expected2.Data = keyBoxList.ToCertPoolData()
115+
return r.createOrUpdateSecret(instance, expected2)
116+
}
117+
87118
// create public and private keyring secret at the same time
88119
func (r *ReconcileSignService) createOrUpdateKeyringSecret(
89120
instance *researchv1alpha1.SignService) (reconcile.Result, error) {

develop/signservice/signservice-operator/pkg/controller/signservice/signservice_controller.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,26 +124,33 @@ func (r *ReconcileSignService) Reconcile(request reconcile.Request) (reconcile.R
124124
return recResult, recErr
125125
}
126126

127-
//SignService Secret
128-
// public and private keyring secrets are created at the same time
127+
//SignService Secret & IECertPool Secret
128+
// 2 signer secrets are created at the same time
129+
recResult, recErr = r.createOrUpdateSignerCertSecret(instance)
130+
if recErr != nil || recResult.Requeue {
131+
return recResult, recErr
132+
}
133+
134+
//SignService gpg keyring Secret
135+
// public and private secrets are created at the same time
129136
recResult, recErr = r.createOrUpdateKeyringSecret(instance)
130137
if recErr != nil || recResult.Requeue {
131138
return recResult, recErr
132139
}
133140

134-
//SignService Deployment
141+
//SignService ServiceAccount
135142
recResult, recErr = r.createOrUpdateServiceAccount(instance)
136143
if recErr != nil || recResult.Requeue {
137144
return recResult, recErr
138145
}
139146

140-
//SignService Deployment
147+
//SignService Role
141148
recResult, recErr = r.createOrUpdateRole(instance)
142149
if recErr != nil || recResult.Requeue {
143150
return recResult, recErr
144151
}
145152

146-
//SignService Deployment
153+
//SignService RoleBinding
147154
recResult, recErr = r.createOrUpdateRoleBinding(instance)
148155
if recErr != nil || recResult.Requeue {
149156
return recResult, recErr

0 commit comments

Comments
 (0)