Skip to content

Commit d14ac9e

Browse files
authored
Merge pull request #443 from github/kyfast-create-current-encryption-key-backup-3.7.0+
2 parents 11c0e5f + 368e584 commit d14ac9e

File tree

2 files changed

+67
-16
lines changed

2 files changed

+67
-16
lines changed

share/github-backup-utils/ghe-backup-settings

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,14 @@ backup-secret "password pepper" "password-pepper" "secrets.github.user-password-
7979
backup-secret "kredz.credz HMAC key" "kredz-credz-hmac" "secrets.kredz.credz-hmac-secret"
8080
backup-secret "kredz.varz HMAC key" "kredz-varz-hmac" "secrets.kredz.varz-hmac-secret"
8181

82-
# backup encryption keying material for GHES 3.7.0 onwards
82+
# backup encryption keying material and create backup value current encryption for GHES 3.7.0 onwards
83+
# this is for forwards compatibility with GHES 3.8.0 onwards
8384
if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.7.0)" ]; then
8485
backup-secret "encrypted column encryption keying material" "encrypted-column-encryption-keying-material" "secrets.github.encrypted-column-keying-material"
8586
fi
8687

87-
# backup current encryption key for GHES 3.8.0 onwards
8888
if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.8.0)" ]; then
89-
backup-secret "encrypted column current encryption key" "encrypted-column-current-encryption-key" "secrets.github.encrypted-column-current-encryption-key"
89+
cat "$GHE_SNAPSHOT_DIR/encrypted-column-encryption-keying-material" | sed 's:.*;::' > "$GHE_SNAPSHOT_DIR/encrypted-column-current-encryption-key"
9090
fi
9191

9292
backup-secret "secret scanning encrypted secrets current storage key" "secret-scanning-encrypted-secrets-current-storage-key" "secrets.secret-scanning.encrypted-secrets-current-storage-key"

test/test-ghe-backup.sh

Lines changed: 64 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ begin_test "ghe-backup does not take backup of encrypted column encryption keyin
566566
)
567567
end_test
568568

569-
begin_test "ghe-backup takes backup of encrypted column encryption keying material for versions 3.7.0+"
569+
begin_test "ghe-backup takes backup of encrypted column encryption keying material and create encrypted column current encryption key for versions 3.7.0+"
570570
(
571571
set -e
572572

@@ -609,27 +609,61 @@ begin_test "ghe-backup takes backup of encrypted column encryption keying materi
609609
)
610610
end_test
611611

612-
begin_test "ghe-backup does not take backup of encrypted column current encryption key for versions below 3.8.0"
612+
begin_test "ghe-backup takes backup of encrypted column encryption keying material and encrypted column current encryption key for versions 3.8.0+"
613613
(
614-
GHE_REMOTE_VERSION=2.1.10 ghe-backup -v | grep -q "encrypted column current encryption key not set" && exit 1
615-
[ ! -f "$GHE_DATA_DIR/current/encrypted-column-current-encryption-key" ]
614+
set -e
615+
616+
required_secrets=(
617+
"secrets.github.encrypted-column-keying-material"
618+
)
619+
620+
for secret in "${required_secrets[@]}"; do
621+
ghe-ssh "$GHE_HOSTNAME" -- ghe-config "$secret" "foo"
622+
done
623+
624+
# GHES version 3.8.0
625+
GHE_REMOTE_VERSION=3.8.0
626+
export GHE_REMOTE_VERSION
627+
628+
ghe-backup
629+
630+
required_files=(
631+
"encrypted-column-encryption-keying-material"
632+
"encrypted-column-current-encryption-key"
633+
)
634+
635+
for file in "${required_files[@]}"; do
636+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "foo" ]
637+
done
638+
639+
# GHES version 3.9.0
640+
GHE_REMOTE_VERSION=3.9.0
641+
export GHE_REMOTE_VERSION
616642

617-
GHE_REMOTE_VERSION=3.7.0 ghe-backup -v | grep -q "encrypted column current encryption key not set" && exit 1
618-
[ ! -f "$GHE_DATA_DIR/current/encrypted-column-current-encryption-key" ]
643+
ghe-backup
644+
645+
required_files=(
646+
"encrypted-column-current-encryption-key"
647+
)
648+
649+
for file in "${required_files[@]}"; do
650+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "foo" ]
651+
done
619652

620653
)
621654
end_test
622655

623-
begin_test "ghe-backup takes backup of encrypted column current encryption key for versions 3.8.0+"
656+
begin_test "ghe-backup takes backup of encrypted column encryption keying material and encrypted column current encryption key accounting for multiple encryption keying materials for versions 3.7.0+"
624657
(
625658
set -e
626659

627660
required_secrets=(
628-
"secrets.github.encrypted-column-current-encryption-key"
661+
"secrets.github.encrypted-column-keying-material"
629662
)
630663

631664
for secret in "${required_secrets[@]}"; do
632-
ghe-ssh "$GHE_HOSTNAME" -- ghe-config "$secret" "foo"
665+
echo "ghe-config '$secret' 'foo;bar'" |
666+
ghe-ssh "$GHE_HOSTNAME" -- /bin/bash
633667
done
634668

635669
# GHES version 3.8.0
@@ -639,25 +673,42 @@ begin_test "ghe-backup takes backup of encrypted column current encryption key f
639673
ghe-backup
640674

641675
required_files=(
642-
"encrypted-column-current-encryption-key"
676+
"encrypted-column-encryption-keying-material"
643677
)
644678

645679
for file in "${required_files[@]}"; do
646-
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "foo" ]
680+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "foo;bar" ]
647681
done
648682

683+
required_files_current_encryption_key=(
684+
"encrypted-column-current-encryption-key"
685+
)
686+
687+
for file in "${required_files_current_encryption_key[@]}"; do
688+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "bar" ]
689+
done
690+
691+
649692
# GHES version 3.9.0
650693
GHE_REMOTE_VERSION=3.9.0
651694
export GHE_REMOTE_VERSION
652695

653696
ghe-backup
654697

655698
required_files=(
656-
"encrypted-column-current-encryption-key"
699+
"encrypted-column-encryption-keying-material"
657700
)
658701

659702
for file in "${required_files[@]}"; do
660-
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "foo" ]
703+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "foo;bar" ]
704+
done
705+
706+
required_files_current_encryption_key=(
707+
"encrypted-column-current-encryption-key"
708+
)
709+
710+
for file in "${required_files_current_encryption_key[@]}"; do
711+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "bar" ]
661712
done
662713

663714
)

0 commit comments

Comments
 (0)