Skip to content

Commit 1cd2334

Browse files
authored
Merge pull request #275 from RADAR-base/check-secrets-action
[Github Action] Check all secrets are replaced by bin/generate-secrets
2 parents 8c85447 + d65ce2d commit 1cd2334

File tree

3 files changed

+73
-50
lines changed

3 files changed

+73
-50
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Check missed fields during secret generation
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- '**' # This will trigger the workflow for any PR branch
7+
8+
jobs:
9+
check_secrets:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout repository
14+
uses: actions/checkout@v2
15+
16+
- name: Install yq
17+
uses: dcarbone/[email protected]
18+
19+
- name: Run bin/generate-secrets
20+
run: bin/generate-secrets
21+
22+
- name: Check all "secret" fields are replaced
23+
run: |
24+
mistakes=$(yq e '.. | select(. == "secret") | {(path | join(".")): .}' etc/secrets.yaml); \
25+
num_of_mistakes=$(echo $mistakes | sed '/^$/d' | wc -l); \
26+
if (( $num_of_mistakes > 0 )); then \
27+
echo "Not all 'secret' fields were replaced by the bin/generate-secrets script."; \
28+
echo "Please make sure to cover the following fields with an 'insert_secret' entry:"; \
29+
echo $mistakes; \
30+
exit 1; \
31+
else \
32+
echo "Perfect! All 'secret' fields were replaced by the bin/generate-secrets script."; \
33+
exit 0; \
34+
fi;

bin/generate-secrets

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,54 +33,39 @@ fi
3333

3434
insert_secret() {
3535
localSecret="${secret:-$(generate_secret)}"
36+
# For any group of yaml paths passed add the same (!) password.
3637
for key in "$@"; do
3738
localSecret="$localSecret" yq -i "$key = strenv(localSecret)" etc/secrets.yaml
3839
done
40+
# Do not remove this 'secret=' line! It ensures that subsequent replacements get a unique password.
41+
secret=
3942
}
4043

41-
insert_secret ".mongodb.auth.replicaSetKey"
42-
insert_secret ".mongodb.auth.rootPassword"
43-
insert_secret ".mongodb.auth.passwords[0]"
44+
# -- Groups of shared passwords
4445

45-
insert_secret ".graylog.graylog.rootPassword"
46-
insert_secret ".kube_prometheus_stack.kube-prometheus-stack.grafana.adminPassword"
47-
48-
nginx_auth_password=$(generate_secret)
49-
secret="thehyve:$(echo $nginx_auth_password | openssl passwd -apr1 -stdin)" insert_secret ".kube_prometheus_stack.nginx_auth"
50-
comment="username: thehyve, password: $nginx_auth_password" yq -i ".kube_prometheus_stack.nginx_auth line_comment |= strenv(comment)" etc/secrets.yaml
51-
52-
insert_secret ".kafka_manager.basicAuth.password"
53-
54-
# Shared postgresql secret
46+
# Management portal postgres database
5547
insert_secret \
5648
".postgresql.global.postgresql.auth.postgresPassword" \
5749
".postgresql.auth.replicationPassword" \
5850
".management_portal.postgres.password" \
5951
".app_config.jdbc.password" \
6052
".radar_rest_sources_backend.postgres.password"
6153

62-
insert_secret ".management_portal.managementportal.common_admin_password"
63-
insert_secret ".management_portal.managementportal.frontend_client_secret"
64-
insert_secret ".management_portal.oauth_clients.radar_upload_backend.client_secret"
65-
insert_secret ".management_portal.oauth_clients.radar_upload_connect.client_secret"
66-
insert_secret ".management_portal.oauth_clients.radar_rest_sources_auth_backend.client_secret"
67-
insert_secret ".management_portal.oauth_clients.radar_redcap_integrator.client_secret"
68-
insert_secret ".management_portal.oauth_clients.radar_fitbit_connector.client_secret"
69-
insert_secret ".management_portal.oauth_clients.radar_appconfig.client_secret"
70-
insert_secret ".management_portal.oauth_clients.radar_push_endpoint.client_secret"
71-
54+
# Appserver postgres database
7255
insert_secret \
7356
".radar_appserver_postgresql.global.postgresql.auth.postgresPassword" \
7457
".radar_appserver_postgresql.auth.replicationPassword" \
7558
".radar_appserver.postgres.password"
7659

77-
insert_secret ".timescaledb_password"
78-
insert_secret ".grafana_password"
79-
insert_secret ".grafana_metrics_password"
80-
81-
insert_secret ".s3_access_key"
82-
insert_secret ".s3_secret_key"
60+
# --
8361

84-
insert_secret ".radar_upload_postgres_password"
62+
# The NGINX password for prometheus follows a pattern different from others.
63+
nginx_auth_password=$(generate_secret)
64+
secret="thehyve:$(echo $nginx_auth_password | openssl passwd -apr1 -stdin)" insert_secret ".kube_prometheus_stack.nginx_auth"
65+
comment="username: thehyve, password: $nginx_auth_password" yq -i ".kube_prometheus_stack.nginx_auth line_comment |= strenv(comment)" etc/secrets.yaml
8566

86-
echo "Passwords and secrets have been generated successfully."
67+
# Generate secrets for all remaining fields with value 'secret'.
68+
replacements=$(yq e '.. | select(. == "secret") | [(path | "."+join("."))] | join(" ")' etc/secrets.yaml);
69+
for key in $replacements; do
70+
insert_secret $key
71+
done

etc/base-secrets.yaml

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# NOTE:
2+
# - properties equal to 'secret' will be replaced by the bin/generate-secrets script.
3+
# - properties equal to 'change_me' are externally provided secrets that should be replaced manually.
4+
15
# --------------------------------------------------------- 00-init.yaml ---------------------------------------------------------
26
mongodb:
37
auth:
@@ -43,12 +47,12 @@ kafka_manager:
4347
# --------------------------------------------------------- 10-base.yaml ---------------------------------------------------------
4448
confluent_cloud:
4549
cc:
46-
bootstrapServerurl: confluentBootstrapServers
47-
schemaRegistryUrl: confluentSchemaRegistryUrl
48-
apiKey: ccApikey
49-
apiSecret: ccApiSecret
50-
schemaRegistryApiKey: srApiKey
51-
schemaRegistryApiSecret: srApiSecret
50+
bootstrapServerurl: change_me
51+
schemaRegistryUrl: change_me
52+
apiKey: change_me
53+
apiSecret: change_me
54+
schemaRegistryApiKey: change_me
55+
schemaRegistryApiSecret: change_me
5256

5357
# --------------------------------------------------------- 10-managementportal.yaml ---------------------------------------------------------
5458
postgresql:
@@ -87,7 +91,7 @@ management_portal:
8791
radar_push_endpoint:
8892
client_secret: secret
8993
smtp:
90-
password: secret
94+
password: change_me
9195

9296
app_config:
9397
jdbc:
@@ -111,11 +115,11 @@ radar_appserver:
111115
# The charts in 20-fitbit.yaml only need to be installed if you will use a Fitbit or Garmin API integration.
112116
# Get a Fitbit API client by registering a server application
113117
# at https://dev.fitbit.com/manage/
114-
fitbit_api_client: "secret"
115-
fitbit_api_secret: "secret"
118+
fitbit_api_client: change_me
119+
fitbit_api_secret: change_me
116120

117-
oura_api_client: "secret"
118-
oura_api_secret: "secret"
121+
oura_api_client: change_me
122+
oura_api_secret: change_me
119123

120124
radar_rest_sources_backend:
121125
postgres:
@@ -142,8 +146,8 @@ radar_integration:
142146
# --------------------------------------------------------- 20-s3-connector.yaml ---------------------------------------------------------
143147
# The access keys and secret keys of object storage services should match.
144148
# If AWS S3 is used as a storage medium instead of minio, then fill in those.
145-
s3_access_key: secret
146-
s3_secret_key: secret
149+
s3_access_key: change_me
150+
s3_secret_key: change_me
147151

148152
# --------------------------------------------------------- 20-upload.yaml ---------------------------------------------------------
149153
radar_upload_postgres_password: secret
@@ -153,19 +157,19 @@ radar_upload_postgres_password: secret
153157
# https://developer.garmin.com/gc-developer-program/overview/
154158
radar_push_endpoint:
155159
garmin:
156-
consumerKey: "secret"
157-
consumerSecret: "secret"
160+
consumerKey: change_me
161+
consumerSecret: change_me
158162

159163
# --------------------------------------------------------- 99-velero.yaml ---------------------------------------------------------
160164

161165
velero:
162166
backup:
163-
accessKey: secret
164-
secretKey: secret
167+
accessKey: change_me
168+
secretKey: change_me
165169
velero:
166170
credentials:
167171
secretContents:
168172
cloud: |
169173
[default]
170-
aws_access_key_id=secret
171-
aws_secret_access_key=secret
174+
aws_access_key_id=change_me
175+
aws_secret_access_key=change_me

0 commit comments

Comments
 (0)