Skip to content

Commit 6a9c877

Browse files
authored
Merge pull request #526 from github/brandonemlaw-secret-scanning-backup-content-encryption-keys-simple
Backup and Restore Secret Scanning Encrypted Content Keys
2 parents 0f57fa4 + 72266bd commit 6a9c877

File tree

4 files changed

+110
-0
lines changed

4 files changed

+110
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.8.0)" ]; then
9494
backup-secret "secret scanning encrypted secrets delimited shared transit keys" "secret-scanning-encrypted-secrets-delimited-shared-transit-keys" "secrets.secret-scanning.encrypted-secrets-delimited-shared-transit-keys"
9595
fi
9696

97+
if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.11.0)" ]; then
98+
backup-secret "secret scanning encrypted content keys" "secret-scanning-user-content-delimited-encryption-root-keys" "secrets.secret-scanning.secret-scanning-user-content-delimited-encryption-root-keys"
99+
fi
100+
97101
# Backup argon secrets for multiuser from ghes version 3.8 onwards
98102
if [[ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.8.0)" && "$(version $GHE_REMOTE_VERSION)" -lt "$(version 3.8.2)" ]]; then
99103
backup-secret "management console argon2 secret" "manage-argon-secret" "secrets.manage-auth.argon-secret"

share/github-backup-utils/ghe-restore-secret-scanning-encryption-keys

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,10 @@ log_info "Restoring secret scanning encrypted secrets transit keys"
3636
restore-secret "secret scanning encrypted secrets current shared transit key" "secret-scanning-encrypted-secrets-current-shared-transit-key" "secrets.secret-scanning.encrypted-secrets-current-shared-transit-key"
3737
restore-secret "secret scanning encrypted secrets delimited shared transit keys" "secret-scanning-encrypted-secrets-delimited-shared-transit-keys" "secrets.secret-scanning.encrypted-secrets-delimited-shared-transit-keys"
3838

39+
# Restore secret scanning content scanning keys if present
40+
if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.11.0)" ]; then
41+
log_info "Restoring secret scanning content scanning keys"
42+
restore-secret "secret scanning user content delimited encryption root keys" "secret-scanning-user-content-delimited-encryption-root-keys" "secrets.secret-scanning.secret-scanning-user-content-delimited-encryption-root-keys"
43+
fi
44+
3945
bm_end "$(basename $0)"

test/test-ghe-backup.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,54 @@ begin_test "ghe-backup takes backup of secret scanning encrypted secrets encrypt
832832
)
833833
end_test
834834

835+
begin_test "ghe-backup does not take backups of secret scanning encrypted content encryption keys on versions below 3.11.0"
836+
(
837+
set -e
838+
839+
required_secrets=(
840+
"secrets.secret-scanning.secret-scanning-user-content-delimited-encryption-root-keys"
841+
)
842+
843+
for secret in "${required_secrets[@]}"; do
844+
ghe-ssh "$GHE_HOSTNAME" -- ghe-config "$secret" "foo"
845+
done
846+
847+
GHE_REMOTE_VERSION=3.10.0 ghe-backup -v | grep -q "secret scanning encrypted content" && exit 1
848+
849+
required_files=(
850+
"secret-scanning-user-content-delimited-encryption-root-keys"
851+
)
852+
853+
for file in "${required_files[@]}"; do
854+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "" ]
855+
done
856+
)
857+
end_test
858+
859+
begin_test "ghe-backup takes backup of secret scanning encrypted content encryption keys on versions 3.11.0+"
860+
(
861+
set -e
862+
863+
required_secrets=(
864+
"secret-scanning.secret-scanning-user-content-delimited-encryption-root-keys"
865+
)
866+
867+
for secret in "${required_secrets[@]}"; do
868+
ghe-ssh "$GHE_HOSTNAME" -- ghe-config "$secret" "foo"
869+
done
870+
871+
GHE_REMOTE_VERSION=3.11.0 ghe-backup
872+
873+
required_files=(
874+
"secret-scanning-user-content-delimited-encryption-root-keys"
875+
)
876+
877+
for file in "${required_files[@]}"; do
878+
[ "$(cat "$GHE_DATA_DIR/current/$file")" = "foo" ]
879+
done
880+
)
881+
end_test
882+
835883
begin_test "ghe-backup takes backup of Actions settings"
836884
(
837885
set -e

test/test-ghe-restore.sh

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,58 @@ begin_test "ghe-restore with secret scanning encrypted secrets encryption keys f
454454
)
455455
end_test
456456

457+
begin_test "ghe-restore with secret scanning encrypted content encryption keys for versions below 3.11.0"
458+
(
459+
set -e
460+
rm -rf "$GHE_REMOTE_ROOT_DIR"
461+
setup_remote_metadata
462+
463+
required_files=(
464+
"secret-scanning-user-content-delimited-encryption-root-keys"
465+
)
466+
467+
for file in "${required_files[@]}"; do
468+
echo "foo" >"$GHE_DATA_DIR/current/$file"
469+
done
470+
471+
GHE_REMOTE_VERSION=3.10.0 ghe-restore -v -f localhost
472+
473+
required_secrets=(
474+
"secrets.secret-scanning.secret-scanning-user-content-delimited-encryption-root-keys"
475+
)
476+
477+
for secret in "${required_secrets[@]}"; do
478+
[ "$(ghe-ssh "$GHE_HOSTNAME" -- ghe-config "$secret")" = "" ] # expecting that this secret was not backed up on versions below 3.11.0, this secret was not present in earlier versions
479+
done
480+
)
481+
end_test
482+
483+
begin_test "ghe-restore with secret scanning encrypted content encryption keys for versions 3.11.0+"
484+
(
485+
set -e
486+
rm -rf "$GHE_REMOTE_ROOT_DIR"
487+
setup_remote_metadata
488+
489+
required_files=(
490+
"secret-scanning-user-content-delimited-encryption-root-keys"
491+
)
492+
493+
for file in "${required_files[@]}"; do
494+
echo "foo" >"$GHE_DATA_DIR/current/$file"
495+
done
496+
497+
GHE_REMOTE_VERSION=3.11.0 ghe-restore -v -f localhost
498+
499+
required_secrets=(
500+
"secrets.secret-scanning.secret-scanning-user-content-delimited-encryption-root-keys"
501+
)
502+
503+
for secret in "${required_secrets[@]}"; do
504+
[ "$(ghe-ssh "$GHE_HOSTNAME" -- ghe-config "$secret")" = "foo" ] # expecting this to have been restored successfully for versions 3.11.0+
505+
done
506+
)
507+
end_test
508+
457509
# Setup Actions data for the subsequent tests
458510
setup_actions_test_data "$GHE_DATA_DIR/1"
459511

0 commit comments

Comments
 (0)