aboutsummaryrefslogtreecommitdiffstats
path: root/ansible/roles/postgres/vars/main/main.yml
blob: d8f8ba9db70f61ead60d1c08d8434acc1bc01402 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
postgres_version: "15"
postgres_daemon: "postgresql@{{ postgres_version }}-main"
postgres_user: "postgres"
postgres_pg_repack_cron_filename: ansible_postgres_pg_repack

postgres_users:
  - name: site
    password: "{{ vault_postgres_user_passwords.site }}"
    roles:

  - name: pixels
    password: "{{ vault_postgres_user_passwords.pixels }}"
    roles:

  - name: pinnwand
    password: "{{ vault_postgres_user_passwords.pinnwand }}"
    roles:

  - name: blackbox
    password: "{{ vault_postgres_user_passwords.blackbox }}"
    roles:
      - pg_read_all_data

  - name: metabase
    password: "{{ vault_postgres_user_passwords.metabase }}"
    roles:
      - pg_read_all_data

  - name: bitwarden
    password: "{{ vault_postgres_user_passwords.bitwarden }}"
    roles:

  - name: blackknight
    password: "{{ vault_postgres_user_passwords.blackknight }}"
    roles:

  - name: codejam_management
    password: "{{ vault_postgres_user_passwords.codejam_management }}"
    roles:

  - name: metricity
    password: "{{ vault_postgres_user_passwords.metricity }}"
    roles:

  - name: keycloak
    password: "{{ vault_postgres_user_passwords.keycloak }}"
    roles:

  - name: polonium
    password: "{{ vault_postgres_user_passwords.polonium }}"
    roles:

  - name: thallium
    password: "{{ vault_postgres_user_passwords.thallium }}"
    roles:

  - name: metabase
    password: "{{ vault_postgres_user_passwords.metabase }}"
    roles:
      - pg_read_all_data

  - name: grafana
    password: "{{ vault_postgres_user_passwords.grafana }}"
    roles:
      - pg_read_all_data

  - name: devops
    password: "{{ vault_postgres_user_passwords.devops }}"
    roles:
    role_attr_flags: SUPERUSER

  - name: rrdtool
    password: "{{ vault_postgres_user_passwords.rrdtool }}"
    roles:

postgres_hba_rules:
  #
  # Service HBA rules
  #
  - conn_type: hostssl
    database: pinnwand
    user: pinnwand
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: site
    user: grafana
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: site
    user: site
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: bitwarden
    user: bitwarden
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: blackknight
    user: blackknight
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: codejam_management
    user: codejam_management
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: pixels
    user: pixels
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: metricity
    user: metricity
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: metabase
    user: metabase
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: keycloak
    user: keycloak
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: polonium
    user: polonium
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: thallium
    user: thallium
    address: all
    method: scram-sha-256

  #
  # Backup service HBA rules
  #
  - conn_type: hostssl
    database: all
    user: blackbox
    address: all
    method: scram-sha-256

  #
  # Analytics HBA rules
  #
  - conn_type: hostssl
    database: metricity
    user: metabase
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: site
    user: metabase
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: metricity
    user: grafana
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: pinnwand
    user: grafana
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: pixels
    user: metabase
    address: all
    method: scram-sha-256

  - conn_type: hostssl
    database: polonium
    user: metabase
    address: all
    method: scram-sha-256

  #
  # DevOps Administration rules
  #
  - conn_type: hostssl
    database: all
    user: devops
    address: 127.0.0.1/32
    method: cert
    options: map=mtls_cn_map

  - conn_type: hostssl
    database: all
    user: devops
    address: "::1/128"
    method: cert
    options: map=mtls_cn_map

postgres_databases:
  - name: pinnwand
    owner: pinnwand
  - name: bitwarden
    owner: bitwarden
  - name: blackknight
    owner: blackknight
  - name: codejam_management
    owner: codejam_management
  - name: metricity
    owner: metricity
  - name: site
    owner: site
  - name: metabase
    owner: metabase
  - name: pixels
    owner: pixels
  - name: devops
    owner: devops
  - name: keycloak
    owner: keycloak
  - name: polonium
    owner: polonium
  - name: thallium
    owner: thallium

postgres_grants:
  - objs: api_nomination,api_infraction,api_user,api_nominationentry,pg_stat_statements,pg_stat_statements_info
    privs: SELECT
    state: present
    roles: grafana
    database: site
    type: table

  - objs: site
    privs: CONNECT
    state: present
    roles: grafana
    database: site
    type: database

  - objs: metricity
    privs: CONNECT
    state: present
    roles: rrdtool
    database: metricity
    type: database

  # Unfortunately we cannot be more granular here.
  # https://github.com/ansible/ansible-modules-core/issues/1529
  # -> https://github.com/ansible/ansible/issues/18955
  # -> https://github.com/ansible-collections/community.general/issues/118
  # -> https://github.com/ansible-collections/community.postgresql/issues/15
  # Otherwise, we would need:
  # - messages: id, channel_id, created_at
  # - threads: id, archived
  # - users: id, in_guild
  # The `id` columns are almost purely needed for counting.
  - objs: messages,threads,users
    privs: SELECT
    state: present
    roles: rrdtool
    database: metricity
    type: table