Skip to content

Commit 7207d7a

Browse files
committed
feat: vault sans pgsodium
1 parent 45e80ac commit 7207d7a

File tree

12 files changed

+71
-69
lines changed

12 files changed

+71
-69
lines changed

ansible/files/admin_api_scripts/pg_upgrade_scripts/complete.sh

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,43 @@ EOF
150150

151151
run_sql -c "$PATCH_PGMQ_QUERY"
152152
run_sql -c "update pg_extension set extowner = 'postgres'::regrole where extname = 'pgmq';"
153+
154+
# Patch to handle upgrading to pgsodium-less Vault
155+
REENCRYPT_VAULT_SECRETS_QUERY=$(cat <<EOF
156+
DO \$\$
157+
BEGIN
158+
IF EXISTS (SELECT FROM pg_available_extension_versions WHERE name = 'supabase_vault' AND version = '0.3.0')
159+
AND EXISTS (SELECT FROM pg_extension WHERE extname = 'supabase_vault')
160+
THEN
161+
IF (SELECT extversion FROM pg_extension WHERE extname = 'supabase_vault') != '0.2.8' THEN
162+
GRANT USAGE ON SCHEMA vault TO postgres WITH GRANT OPTION;
163+
GRANT SELECT, DELETE ON vault.secrets, vault.decrypted_secrets TO postgres WITH GRANT OPTION;
164+
GRANT EXECUTE ON FUNCTION vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt TO postgres WITH GRANT OPTION;
165+
END IF;
166+
-- Do an explicit IF EXISTS check to avoid referencing pgsodium objects if the project already migrated away from using pgsodium.
167+
IF EXISTS (SELECT FROM vault.secrets WHERE key_id IS NOT NULL) THEN
168+
UPDATE vault.secrets s
169+
SET
170+
secret = encode(
171+
vault._crypto_aead_det_encrypt(
172+
message := pgsodium.crypto_aead_det_decrypt(decode(s.secret, 'base64'), convert_to(s.id || s.description || s.created_at || s.updated_at, 'utf8'), s.key_id, s.nonce),
173+
additional := convert_to(s.id::text, 'utf8'),
174+
key_id := 0,
175+
context := 'pgsodium'::bytea,
176+
nonce := s.nonce
177+
),
178+
'base64'
179+
),
180+
key_id = NULL
181+
WHERE
182+
key_id IS NOT NULL;
183+
END IF;
184+
END IF;
185+
END
186+
\$\$;
187+
EOF
188+
)
189+
run_sql -c "$REENCRYPT_VAULT_SECRETS_QUERY"
153190
fi
154191

155192
run_sql -c "grant pg_read_all_data, pg_signal_backend to postgres"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
grant usage on schema vault to postgres with grant option;
2+
grant select, delete on vault.secrets, vault.decrypted_secrets to postgres with grant option;
3+
grant execute on function vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt to postgres with grant option;

ansible/files/sodium_extension.sql

Lines changed: 0 additions & 6 deletions
This file was deleted.

ansible/vars.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ postgres_major:
88

99
# Full version strings for each major version
1010
postgres_release:
11-
postgresorioledb-17: "17.0.1.34-orioledb"
12-
postgres15: "15.8.1.038"
11+
postgresorioledb-17: "17.0.1.035-orioledb"
12+
postgres15: "15.8.1.039"
1313

1414
# Non Postgres Extensions
1515
pgbouncer_release: "1.19.0"

ebssurrogate/files/unit-tests/unit-test-01.sql

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ BEGIN
1717
extension_array := ARRAY[
1818
'plpgsql',
1919
'pg_stat_statements',
20-
'pgsodium',
2120
'pgtap',
2221
'pg_graphql',
2322
'pgcrypto',
@@ -30,7 +29,6 @@ BEGIN
3029
extension_array := ARRAY[
3130
'plpgsql',
3231
'pg_stat_statements',
33-
'pgsodium',
3432
'pgtap',
3533
'pg_graphql',
3634
'pgcrypto',
@@ -44,7 +42,7 @@ BEGIN
4442
PERFORM set_config('myapp.extensions', array_to_string(extension_array, ','), false);
4543
END $$;
4644

47-
SELECT plan(8);
45+
SELECT no_plan();
4846

4947
SELECT extensions_are(
5048
string_to_array(current_setting('myapp.extensions'), ',')::text[]
@@ -56,9 +54,5 @@ SELECT has_schema('pg_catalog');
5654
SELECT has_schema('information_schema');
5755
SELECT has_schema('public');
5856

59-
SELECT function_privs_are('pgsodium', 'crypto_aead_det_decrypt', array['bytea', 'bytea', 'uuid', 'bytea'], 'service_role', array['EXECUTE']);
60-
SELECT function_privs_are('pgsodium', 'crypto_aead_det_encrypt', array['bytea', 'bytea', 'uuid', 'bytea'], 'service_role', array['EXECUTE']);
61-
SELECT function_privs_are('pgsodium', 'crypto_aead_det_keygen', array[]::text[], 'service_role', array['EXECUTE']);
62-
6357
SELECT * FROM finish();
64-
ROLLBACK;
58+
ROLLBACK;

migrations/db/migrations/20221207154255_create_pgsodium_and_vault.sql

Lines changed: 0 additions & 40 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-- migrate:up
2+
3+
DO $$
4+
BEGIN
5+
IF EXISTS (select from pg_available_extensions where name = 'supabase_vault')
6+
THEN
7+
create extension if not exists supabase_vault;
8+
9+
-- for some reason extension custom scripts aren't run during AMI build, so
10+
-- we manually run it here
11+
grant usage on schema vault to postgres with grant option;
12+
grant select, delete on vault.secrets, vault.decrypted_secrets to postgres with grant option;
13+
grant execute on function vault.create_secret, vault.update_secret, vault._crypto_aead_det_decrypt to postgres with grant option;
14+
END IF;
15+
END $$;
16+
17+
-- migrate:down

migrations/db/migrations/20230529180330_alter_api_roles_for_inherit.sql

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,5 @@ ALTER ROLE authenticated inherit;
44
ALTER ROLE anon inherit;
55
ALTER ROLE service_role inherit;
66

7-
GRANT pgsodium_keyholder to service_role;
8-
97
-- migrate:down
108

migrations/tests/database/privs.sql

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ SELECT database_privs_are(
22
'postgres', 'postgres', ARRAY['CONNECT', 'TEMPORARY', 'CREATE']
33
);
44

5-
SELECT function_privs_are('pgsodium', 'crypto_aead_det_decrypt', array['bytea', 'bytea', 'uuid', 'bytea'], 'service_role', array['EXECUTE']);
6-
SELECT function_privs_are('pgsodium', 'crypto_aead_det_encrypt', array['bytea', 'bytea', 'uuid', 'bytea'], 'service_role', array['EXECUTE']);
7-
SELECT function_privs_are('pgsodium', 'crypto_aead_det_keygen', array[]::text[], 'service_role', array['EXECUTE']);
8-
95
-- Verify public schema privileges
106
SELECT schema_privs_are('public', 'postgres', array['CREATE', 'USAGE']);
117
SELECT schema_privs_are('public', 'anon', array['USAGE']);

nix/ext/vault.nix

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
{ lib, stdenv, fetchFromGitHub, postgresql }:
1+
{ lib, stdenv, fetchFromGitHub, libsodium, postgresql }:
22

33
stdenv.mkDerivation rec {
44
pname = "vault";
5-
version = "0.2.9";
5+
version = "0.3.1";
66

7-
buildInputs = [ postgresql ];
7+
buildInputs = [ libsodium postgresql ];
88

99
src = fetchFromGitHub {
1010
owner = "supabase";
1111
repo = pname;
1212
rev = "refs/tags/v${version}";
13-
hash = "sha256-kXTngBW4K6FkZM8HvJG2Jha6OQqbejhnk7tchxy031I=";
13+
hash = "sha256-MC87bqgtynnDhmNZAu96jvfCpsGDCPB0g5TZfRQHd30=";
1414
};
1515

1616
installPhase = ''
1717
mkdir -p $out/{lib,share/postgresql/extension}
1818
19-
cp sql/*.sql $out/share/postgresql/extension
20-
cp *.control $out/share/postgresql/extension
19+
install -D *${postgresql.dlSuffix} $out/lib
20+
install -D -t $out/share/postgresql/extension sql/*.sql
21+
install -D -t $out/share/postgresql/extension *.control
2122
'';
2223

2324
meta = with lib; {

0 commit comments

Comments
 (0)