@@ -880,7 +880,6 @@ func (r *KeystoneAPIReconciler) reconcileNormal(
880880 //
881881 // Create secret holding fernet keys (for token and credential)
882882 //
883- // TODO key rotation
884883 err = r .ensureFernetKeys (ctx , instance , helper , & configMapVars )
885884 if err != nil {
886885 instance .Status .Conditions .Set (condition .FalseCondition (
@@ -1365,14 +1364,16 @@ func (r *KeystoneAPIReconciler) reconcileCloudConfig(
13651364 return oko_secret .EnsureSecrets (ctx , h , instance , secrets , nil )
13661365}
13671366
1368- // ensureFernetKeys - creates secret with fernet keys
1367+ // ensureFernetKeys - creates secret with fernet keys, rotates the keys
13691368func (r * KeystoneAPIReconciler ) ensureFernetKeys (
13701369 ctx context.Context ,
13711370 instance * keystonev1.KeystoneAPI ,
13721371 helper * helper.Helper ,
13731372 envVars * map [string ]env.Setter ,
13741373) error {
1374+ fernetLabel := labels .GetGroupLabel (keystone .ServiceName ) + "/rotatedat"
13751375 labels := labels .GetLabels (instance , labels .GetGroupLabel (keystone .ServiceName ), map [string ]string {})
1376+ now := time .Now ().UTC ()
13761377
13771378 //
13781379 // check if secret already exist
@@ -1394,6 +1395,8 @@ func (r *KeystoneAPIReconciler) ensureFernetKeys(
13941395 fernetKeys [fmt .Sprintf ("FernetKeys%d" , i )] = keystone .GenerateFernetKey ()
13951396 }
13961397
1398+ labels [fernetLabel ] = now .Format (time .RFC3339 )
1399+
13971400 tmpl := []util.Template {
13981401 {
13991402 Name : secretName ,
@@ -1414,11 +1417,16 @@ func (r *KeystoneAPIReconciler) ensureFernetKeys(
14141417 changedKeys := false
14151418
14161419 extraKey := fmt .Sprintf ("FernetKeys%d" , numberKeys )
1420+
14171421 //
14181422 // Fernet Key rotation
14191423 //
1424+ rotatedAt , err := time .Parse (time .RFC3339 , labels [fernetLabel ])
1425+ duration := int (* instance .Spec .FernetRotationDays )
14201426
1421- if false { // TODO: trigger rotation
1427+ if err != nil {
1428+ labels [fernetLabel ] = now .Format (time .RFC3339 )
1429+ } else if rotatedAt .AddDate (0 , 0 , duration ).After (now ) {
14221430 secret .Data [extraKey ] = secret .Data ["FernetKeys0" ]
14231431 secret .Data ["FernetKeys0" ] = []byte (keystone .GenerateFernetKey ())
14241432 }
0 commit comments