Skip to content

Commit 432c07e

Browse files
authored
Merge pull request #1821 from jemrobinson/1802-add-aci-dns
Add local DNS for SRE identity server
2 parents b2fa40e + 308b145 commit 432c07e

File tree

11 files changed

+55
-31
lines changed

11 files changed

+55
-31
lines changed

data_safe_haven/infrastructure/components/composite/local_dns_record.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def __init__(
4747
ttl=3600,
4848
opts=child_opts,
4949
)
50+
5051
# Redirect the public DNS to private DNS
5152
network.RecordSet(
5253
f"{self._name}_public_record_set",
@@ -62,3 +63,6 @@ def __init__(
6263
child_opts, ResourceOptions(parent=private_dns_record_set)
6364
),
6465
)
66+
67+
# Register outputs
68+
self.hostname = Output.concat(props.record_name, ".", props.base_fqdn)

data_safe_haven/infrastructure/stacks/declarative_sre.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,11 @@ def run(self) -> None:
216216
aad_application_name=f"sre-{self.sre_name}-apricot",
217217
aad_auth_token=self.graph_api_token,
218218
aad_tenant_id=self.cfg.shm.aad_tenant_id,
219+
dns_resource_group_name=dns.resource_group.name,
219220
location=self.cfg.azure.location,
221+
networking_resource_group_name=networking.resource_group.name,
220222
shm_fqdn=self.cfg.shm.fqdn,
223+
sre_fqdn=networking.sre_fqdn,
221224
storage_account_key=data.storage_account_data_configuration_key,
222225
storage_account_name=data.storage_account_data_configuration_name,
223226
storage_account_resource_group_name=data.resource_group_name,
@@ -255,7 +258,7 @@ def run(self) -> None:
255258
dns_server_ip=dns.ip_address,
256259
ldap_group_filter=ldap_group_filter,
257260
ldap_group_search_base=ldap_group_search_base,
258-
ldap_server_ip=identity.ip_address,
261+
ldap_server_hostname=identity.hostname,
259262
ldap_server_port=identity.server_port,
260263
ldap_user_filter=ldap_user_filter,
261264
ldap_user_search_base=ldap_user_search_base,
@@ -277,7 +280,7 @@ def run(self) -> None:
277280
admin_password=data.password_workspace_admin,
278281
ldap_group_filter=ldap_group_filter,
279282
ldap_group_search_base=ldap_group_search_base,
280-
ldap_server_ip=identity.ip_address,
283+
ldap_server_hostname=identity.hostname,
281284
ldap_server_port=identity.server_port,
282285
ldap_user_filter=ldap_user_filter,
283286
ldap_user_search_base=ldap_user_search_base,
@@ -315,7 +318,7 @@ def run(self) -> None:
315318
dns_server_ip=dns.ip_address,
316319
gitea_database_password=data.password_gitea_database_admin,
317320
hedgedoc_database_password=data.password_hedgedoc_database_admin,
318-
ldap_server_ip=identity.ip_address,
321+
ldap_server_hostname=identity.hostname,
319322
ldap_server_port=identity.server_port,
320323
ldap_user_filter=ldap_user_filter,
321324
ldap_username_attribute=ldap_username_attribute,

data_safe_haven/infrastructure/stacks/sre/gitea_server.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def __init__(
2828
database_subnet_id: Input[str],
2929
dns_resource_group_name: Input[str],
3030
dns_server_ip: Input[str],
31-
ldap_server_ip: Input[str],
31+
ldap_server_hostname: Input[str],
3232
ldap_server_port: Input[int],
3333
ldap_username_attribute: Input[str],
3434
ldap_user_filter: Input[str],
@@ -51,7 +51,7 @@ def __init__(
5151
)
5252
self.dns_resource_group_name = dns_resource_group_name
5353
self.dns_server_ip = dns_server_ip
54-
self.ldap_server_ip = ldap_server_ip
54+
self.ldap_server_hostname = ldap_server_hostname
5555
self.ldap_server_port = ldap_server_port
5656
self.ldap_username_attribute = ldap_username_attribute
5757
self.ldap_user_filter = ldap_user_filter
@@ -130,7 +130,7 @@ def __init__(
130130
admin_username="dshadmin",
131131
ldap_username_attribute=props.ldap_username_attribute,
132132
ldap_user_filter=props.ldap_user_filter,
133-
ldap_server_ip=props.ldap_server_ip,
133+
ldap_server_hostname=props.ldap_server_hostname,
134134
ldap_server_port=props.ldap_server_port,
135135
ldap_user_search_base=props.ldap_user_search_base,
136136
).apply(

data_safe_haven/infrastructure/stacks/sre/hedgedoc_server.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def __init__(
2929
database_subnet_id: Input[str],
3030
dns_resource_group_name: Input[str],
3131
dns_server_ip: Input[str],
32-
ldap_server_ip: Input[str],
32+
ldap_server_hostname: Input[str],
3333
ldap_server_port: Input[int],
3434
ldap_user_filter: Input[str],
3535
ldap_user_search_base: Input[str],
@@ -52,7 +52,7 @@ def __init__(
5252
)
5353
self.dns_resource_group_name = dns_resource_group_name
5454
self.dns_server_ip = dns_server_ip
55-
self.ldap_server_ip = ldap_server_ip
55+
self.ldap_server_hostname = ldap_server_hostname
5656
self.ldap_server_port = Output.from_input(ldap_server_port).apply(str)
5757
self.ldap_user_filter = ldap_user_filter
5858
self.ldap_user_search_base = ldap_user_search_base
@@ -225,7 +225,7 @@ def __init__(
225225
name="CMD_LDAP_URL",
226226
value=Output.concat(
227227
"ldap://",
228-
props.ldap_server_ip,
228+
props.ldap_server_hostname,
229229
":",
230230
props.ldap_server_port,
231231
),

data_safe_haven/infrastructure/stacks/sre/identity.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from data_safe_haven.infrastructure.components import (
1212
AzureADApplication,
1313
AzureADApplicationProps,
14+
LocalDnsRecordComponent,
15+
LocalDnsRecordProps,
1416
)
1517

1618

@@ -22,8 +24,11 @@ def __init__(
2224
aad_application_name: Input[str],
2325
aad_auth_token: Input[str],
2426
aad_tenant_id: Input[str],
27+
dns_resource_group_name: Input[str],
2528
location: Input[str],
29+
networking_resource_group_name: Input[str],
2630
shm_fqdn: Input[str],
31+
sre_fqdn: Input[str],
2732
storage_account_key: Input[str],
2833
storage_account_name: Input[str],
2934
storage_account_resource_group_name: Input[str],
@@ -32,8 +37,11 @@ def __init__(
3237
self.aad_application_name = aad_application_name
3338
self.aad_auth_token = aad_auth_token
3439
self.aad_tenant_id = aad_tenant_id
40+
self.dns_resource_group_name = dns_resource_group_name
3541
self.location = location
42+
self.networking_resource_group_name = networking_resource_group_name
3643
self.shm_fqdn = shm_fqdn
44+
self.sre_fqdn = sre_fqdn
3745
self.storage_account_key = storage_account_key
3846
self.storage_account_name = storage_account_name
3947
self.storage_account_resource_group_name = storage_account_resource_group_name
@@ -220,5 +228,20 @@ def __init__(
220228
tags=child_tags,
221229
)
222230

231+
# Register the container group in the SRE DNS zone
232+
local_dns = LocalDnsRecordComponent(
233+
f"{self._name}_dns_record_set",
234+
LocalDnsRecordProps(
235+
base_fqdn=props.sre_fqdn,
236+
public_dns_resource_group_name=props.networking_resource_group_name,
237+
private_dns_resource_group_name=props.dns_resource_group_name,
238+
private_ip_address=get_ip_address_from_container_group(container_group),
239+
record_name="identity",
240+
),
241+
opts=ResourceOptions.merge(
242+
child_opts, ResourceOptions(parent=container_group)
243+
),
244+
)
245+
223246
# Register outputs
224-
self.ip_address = get_ip_address_from_container_group(container_group)
247+
self.hostname = local_dns.hostname

data_safe_haven/infrastructure/stacks/sre/remote_desktop.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from data_safe_haven.external import AzureIPv4Range
1414
from data_safe_haven.infrastructure.common import (
1515
get_id_from_subnet,
16-
get_ip_address_from_container_group,
1716
)
1817
from data_safe_haven.infrastructure.components import (
1918
AzureADApplication,
@@ -42,7 +41,7 @@ def __init__(
4241
dns_server_ip: Input[str],
4342
ldap_group_filter: Input[str],
4443
ldap_group_search_base: Input[str],
45-
ldap_server_ip: Input[str],
44+
ldap_server_hostname: Input[str],
4645
ldap_server_port: Input[int],
4746
ldap_user_filter: Input[str],
4847
ldap_user_search_base: Input[str],
@@ -67,7 +66,7 @@ def __init__(
6766
self.dns_server_ip = dns_server_ip
6867
self.ldap_group_filter = ldap_group_filter
6968
self.ldap_group_search_base = ldap_group_search_base
70-
self.ldap_server_ip = ldap_server_ip
69+
self.ldap_server_hostname = ldap_server_hostname
7170
self.ldap_server_port = ldap_server_port
7271
self.ldap_user_filter = ldap_user_filter
7372
self.ldap_user_search_base = ldap_user_search_base
@@ -324,7 +323,7 @@ def __init__(
324323
),
325324
containerinstance.EnvironmentVariableArgs(
326325
name="LDAP_HOST",
327-
value=props.ldap_server_ip,
326+
value=props.ldap_server_hostname,
328327
),
329328
containerinstance.EnvironmentVariableArgs(
330329
name="LDAP_PORT",
@@ -421,9 +420,6 @@ def __init__(
421420
"connection_db_name": db_guacamole_connections,
422421
"connection_db_server_name": db_server_guacamole.db_server.name,
423422
"container_group_name": container_group.name,
424-
"container_ip_address": get_ip_address_from_container_group(
425-
container_group
426-
),
427423
"disable_copy": props.disable_copy,
428424
"disable_paste": props.disable_paste,
429425
"resource_group_name": resource_group.name,

data_safe_haven/infrastructure/stacks/sre/user_services.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def __init__(
2626
dns_server_ip: Input[str],
2727
gitea_database_password: Input[str],
2828
hedgedoc_database_password: Input[str],
29-
ldap_server_ip: Input[str],
29+
ldap_server_hostname: Input[str],
3030
ldap_server_port: Input[int],
3131
ldap_username_attribute: Input[str],
3232
ldap_user_filter: Input[str],
@@ -51,7 +51,7 @@ def __init__(
5151
self.dns_server_ip = dns_server_ip
5252
self.gitea_database_password = gitea_database_password
5353
self.hedgedoc_database_password = hedgedoc_database_password
54-
self.ldap_server_ip = ldap_server_ip
54+
self.ldap_server_hostname = ldap_server_hostname
5555
self.ldap_server_port = ldap_server_port
5656
self.ldap_username_attribute = ldap_username_attribute
5757
self.ldap_user_filter = ldap_user_filter
@@ -113,7 +113,7 @@ def __init__(
113113
database_password=props.gitea_database_password,
114114
dns_resource_group_name=props.dns_resource_group_name,
115115
dns_server_ip=props.dns_server_ip,
116-
ldap_server_ip=props.ldap_server_ip,
116+
ldap_server_hostname=props.ldap_server_hostname,
117117
ldap_server_port=props.ldap_server_port,
118118
ldap_username_attribute=props.ldap_username_attribute,
119119
ldap_user_filter=props.ldap_user_filter,
@@ -141,7 +141,7 @@ def __init__(
141141
database_subnet_id=props.subnet_containers_support_id,
142142
dns_resource_group_name=props.dns_resource_group_name,
143143
dns_server_ip=props.dns_server_ip,
144-
ldap_server_ip=props.ldap_server_ip,
144+
ldap_server_hostname=props.ldap_server_hostname,
145145
ldap_server_port=props.ldap_server_port,
146146
ldap_username_attribute=props.ldap_username_attribute,
147147
ldap_user_filter=props.ldap_user_filter,

data_safe_haven/infrastructure/stacks/sre/workspaces.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def __init__(
3232
admin_password: Input[str],
3333
ldap_group_filter: Input[str],
3434
ldap_group_search_base: Input[str],
35-
ldap_server_ip: Input[str],
35+
ldap_server_hostname: Input[str],
3636
ldap_server_port: Input[int],
3737
ldap_user_filter: Input[str],
3838
ldap_user_search_base: Input[str],
@@ -54,7 +54,7 @@ def __init__(
5454
self.admin_username = "dshadmin"
5555
self.ldap_group_filter = ldap_group_filter
5656
self.ldap_group_search_base = ldap_group_search_base
57-
self.ldap_server_ip = ldap_server_ip
57+
self.ldap_server_hostname = ldap_server_hostname
5858
self.ldap_server_port = Output.from_input(ldap_server_port).apply(str)
5959
self.ldap_user_filter = ldap_user_filter
6060
self.ldap_user_search_base = ldap_user_search_base
@@ -123,7 +123,7 @@ def __init__(
123123
b64cloudinit = Output.all(
124124
ldap_group_filter=props.ldap_group_filter,
125125
ldap_group_search_base=props.ldap_group_search_base,
126-
ldap_server_ip=props.ldap_server_ip,
126+
ldap_server_hostname=props.ldap_server_hostname,
127127
ldap_server_port=props.ldap_server_port,
128128
ldap_user_filter=props.ldap_user_filter,
129129
ldap_user_search_base=props.ldap_user_search_base,
@@ -212,7 +212,7 @@ def read_cloudinit(
212212
self,
213213
ldap_group_filter: str,
214214
ldap_group_search_base: str,
215-
ldap_server_ip: str,
215+
ldap_server_hostname: str,
216216
ldap_server_port: str,
217217
ldap_user_filter: str,
218218
ldap_user_search_base: str,
@@ -228,7 +228,7 @@ def read_cloudinit(
228228
mustache_values = {
229229
"ldap_group_filter": ldap_group_filter,
230230
"ldap_group_search_base": ldap_group_search_base,
231-
"ldap_server_ip": ldap_server_ip,
231+
"ldap_server_hostname": ldap_server_hostname,
232232
"ldap_server_port": ldap_server_port,
233233
"ldap_user_filter": ldap_user_filter,
234234
"ldap_user_search_base": ldap_user_search_base,

data_safe_haven/provisioning/sre_provisioning_manager.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ def restart_remote_desktop_containers(self) -> None:
8484
self.remote_desktop_params["resource_group_name"],
8585
self.subscription_name,
8686
)
87-
guacamole_provisioner.restart(
88-
self.remote_desktop_params["container_ip_address"]
89-
)
87+
guacamole_provisioner.restart()
9088

9189
def update_remote_desktop_connections(self) -> None:
9290
"""Update connection information on the Guacamole PostgreSQL server"""

data_safe_haven/resources/gitea/gitea/configure.mustache.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ until su-exec "$USER" /usr/local/bin/gitea admin auth list | grep "DataSafeHaven
1313
su-exec "$USER" /usr/local/bin/gitea admin auth add-ldap \
1414
--name DataSafeHavenLDAP \
1515
--security-protocol "unencrypted" \
16-
--host "{{ldap_server_ip}}" \
16+
--host "{{ldap_server_hostname}}" \
1717
--port "{{ldap_server_port}}" \
1818
--user-search-base "{{ldap_user_search_base}}" \
1919
--user-filter "(&{{{ldap_user_filter}}}({{ldap_username_attribute}}=%[1]s))" \

0 commit comments

Comments
 (0)