Skip to content

Commit 4400af2

Browse files
committed
Merge branch 'master' into is34/fix-catalog-service-inherit-group-1
2 parents 97be3f5 + 9c0f57f commit 4400af2

File tree

8 files changed

+77
-35
lines changed

8 files changed

+77
-35
lines changed

services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/modules/nodeports.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ async def _get_data_from_port(
276276
archive_files: set[Path]
277277

278278
if _is_zip_file(downloaded_file):
279-
prunable_folder = PrunableFolder(final_path.parent)
279+
prunable_folder = PrunableFolder(final_path)
280280
with log_context(
281281
_logger,
282282
logging.DEBUG,

services/postgres/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Postgres configuration
2+
3+
Read and follow instructons in `./scripts/init.sql` script. This needs to be executed once in every postgres database we run (both self-hosted and RDS)
4+
5+
Create role and users scripts need to be run on demand (e.g. in case we need a readonly user). Generate scripts using repo config values, read and follow instructions inside. This needs to be executed once.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
*
22
!.gitignore
3-
!*.template.*
3+
!*.template
4+
!init.sql
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
Create read-only role for ${POSTGRES_DB} database.
3+
4+
This role can be used to give read-only access to the ${POSTGRES_DB} database
5+
to users.
6+
7+
Permission grants inspired from: https://stackoverflow.com/questions/760210/how-do-you-create-a-read-only-user-in-postgresql/762649#762649
8+
IMPORTANT: must be executed while connected to the ${POSTGRES_DB} database
9+
as it refers to public schema in that database.
10+
*/
11+
12+
CREATE ROLE ${POSTGRES_DB}_readonly NOLOGIN;
13+
14+
GRANT CONNECT ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_DB}_readonly;
15+
16+
-- https://stackoverflow.com/questions/17338621/what-does-grant-usage-on-schema-do-exactly
17+
GRANT USAGE ON SCHEMA public TO ${POSTGRES_DB}_readonly;
18+
19+
-- Grant permissions for (existing) tables, sequences, functions
20+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO ${POSTGRES_DB}_readonly;
21+
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO ${POSTGRES_DB}_readonly;
22+
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO ${POSTGRES_DB}_readonly;
23+
24+
-- Grant permissions for (future) tables, sequences, functions
25+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
26+
GRANT SELECT ON TABLES TO ${POSTGRES_DB}_readonly;
27+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
28+
GRANT SELECT ON SEQUENCES TO ${POSTGRES_DB}_readonly;
29+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
30+
GRANT EXECUTE ON FUNCTIONS TO ${POSTGRES_DB}_readonly;
31+
32+
SELECT * FROM pg_roles WHERE rolname NOT LIKE 'pg_%';
Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,6 @@
1-
-- SQL script to create a read-only user and grant privileges
2-
3-
4-
--Create the read-only user with a password
51
CREATE USER ${POSTGRES_READONLY_USER} WITH PASSWORD '${POSTGRES_READONLY_PASSWORD}';
62

7-
--Grant CONNECT privilege to the database (e.g., 'foo' is the database name)
8-
GRANT CONNECT ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_READONLY_USER};
9-
10-
--Grant USAGE privilege on the **public** schema
11-
GRANT USAGE ON SCHEMA public TO ${POSTGRES_READONLY_USER};
12-
13-
--Grant SELECT privilege on all existing tables and sequencies in the **public** schema
14-
GRANT SELECT ON ALL TABLES IN SCHEMA public TO ${POSTGRES_READONLY_USER};
15-
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO ${POSTGRES_READONLY_USER};
16-
17-
--Ensure that future tables created in the public schema and sequencies will have SELECT privilege for the read-only user
18-
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ${POSTGRES_READONLY_USER};
19-
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO ${POSTGRES_READONLY_USER};
3+
-- Grant read-only role (privilages) to the user
4+
GRANT ${POSTGRES_DB}_readonly TO ${POSTGRES_READONLY_USER};
205

21-
-- Listing all users
22-
SELECT * FROM pg_roles;
6+
SELECT * FROM pg_roles WHERE rolname NOT LIKE 'pg_%';

services/postgres/scripts/init.sql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
Do not allow users to create new objects in the public schema
3+
4+
Must be executed against every created database (e.g. for simcore, for metabase, ...)
5+
(as long as we use Postgres 14 or earlier)
6+
7+
Sources:
8+
* https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path
9+
* https://www.reddit.com/r/PostgreSQL/comments/1hvxw0s/understanding_the_public_schema_in_postgresql/
10+
*/
11+
12+
-- As a superuser, run the following command in all of your databases
13+
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-- Make sure this role is not used by any user or else this script will fail
2+
3+
REVOKE CONNECT ON DATABASE ${POSTGRES_DB} FROM ${POSTGRES_DB}_readonly;
4+
5+
REVOKE ALL PRIVILEGES ON SCHEMA public FROM ${POSTGRES_DB}_readonly;
6+
7+
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM ${POSTGRES_DB}_readonly;
8+
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM ${POSTGRES_DB}_readonly;
9+
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM ${POSTGRES_DB}_readonly;
10+
11+
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM ${POSTGRES_DB}_readonly;
12+
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM ${POSTGRES_DB}_readonly;
13+
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM ${POSTGRES_DB}_readonly;
14+
15+
DROP ROLE IF EXISTS ${POSTGRES_DB}_readonly;
16+
17+
SELECT * FROM pg_roles WHERE rolname NOT LIKE 'pg_%';
Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
-- Revoke all privileges the user has on the public schema
2-
REVOKE ALL PRIVILEGES ON SCHEMA public FROM ${POSTGRES_READONLY_USER};
1+
-- Revoke readonly role from user
2+
REVOKE ${POSTGRES_DB}_readonly FROM ${POSTGRES_READONLY_USER};
33

4-
-- Revoke all privileges the user has on tables and sequences in the public schema
5-
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM ${POSTGRES_READONLY_USER};
6-
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM ${POSTGRES_READONLY_USER};
4+
DROP USER IF EXISTS ${POSTGRES_READONLY_USER};
75

8-
-- Revoke any future privileges set via ALTER DEFAULT PRIVILEGES
9-
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM ${POSTGRES_READONLY_USER};
10-
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM ${POSTGRES_READONLY_USER};
11-
12-
-- Drop the user
13-
DROP USER ${POSTGRES_READONLY_USER};
14-
15-
-- Listing all users
16-
SELECT * FROM pg_roles;
6+
SELECT * FROM pg_roles WHERE rolname NOT LIKE 'pg_%';

0 commit comments

Comments
 (0)