Skip to main content

Infrastructure audit (2026-04-01)

info

This page is a historical audit snapshot. For current PostgreSQL configuration (servers, credentials, ORM, rotation), see PostgreSQL configuration.

Generated: 2026-04-01 Purpose: Pre-migration reconnaissance for RG restructuring Audited by: Claude (automated, read-only) Archived: 2026-04-13 into docs/internal/docs/infrastructure/ from an untracked file in a throwaway worktree. Content is preserved verbatim (other than the H1 case fix and this archival note) for point-in-time accuracy. Any divergence from current infra state is expected.


Quick reference (fill these into RG_Migration_Guide.md)

PlaceholderValue
<SUB_ID>dae5d10c-2ab5-4b04-8201-ed5e6ba3400e
<K8S_VERSION>1.32 (current: 1.32.11)
<NODE_COUNT>2
<VM_SIZE>Standard_D2s_v6
<STORAGE_ACCOUNT_NAME>aucertdev41e0x5
<INTERNAL_PG_NAME>aucertdev-internal-pg-41e0x5
<INTERNAL_PG_FQDN>aucertdev-internal-pg-41e0x5.postgres.database.azure.com
<PRODUCT_PG_NAME>aucertdev-pg-41e0x5
<PRODUCT_PG_FQDN>aucertdev-pg-41e0x5.postgres.database.azure.com
<REDIS_NAME>aucertdev-redis-41e0x5
<TF_STATE_STORAGE>aucerttfstate (in aucert-tfstate-rg)
<ACR_NAME>aucertacr41e0x5
<ACR_LOGIN_SERVER>aucertacr41e0x5.azurecr.io
<KEY_VAULT_NAME>aucertdev-kv-41e0x5
<KEY_VAULT_URI>https://aucertdev-kv-41e0x5.vault.azure.net/
<VNET_NAME>aucertdev-vnet
<AKS_CLUSTER_NAME>aucertdev-aks
<AKS_FQDN>aucertdev-57u0wp2m.hcp.westus.azmk8s.io
<NODE_RESOURCE_GROUP>MC_aucert-dev-rg_aucertdev-aks_westus
<AKS_IDENTITY_PRINCIPAL_ID>f4840d67-a0d2-443f-9b93-5593288af641
<TENANT_ID>0cd61d9a-5d63-4b96-9755-10896a905fe9
<OIDC_ISSUER_URL>https://westus.oic.prod-aks.azure.com/0cd61d9a-5d63-4b96-9755-10896a905fe9/0697e01e-470d-40d0-90dc-79237b488935/
<RANDOM_SUFFIX>41e0x5

Resource classification

#ResourceNameTypeClassificationResource ID
1VNetaucertdev-vnetMicrosoft.Network/virtualNetworksFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/virtualNetworks/aucertdev-vnet
2AKS Clusteraucertdev-aksMicrosoft.ContainerService/managedClustersFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.ContainerService/managedClusters/aucertdev-aks
3ACRaucertacr41e0x5Microsoft.ContainerRegistry/registriesFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.ContainerRegistry/registries/aucertacr41e0x5
4Key Vaultaucertdev-kv-41e0x5Microsoft.KeyVault/vaultsFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.KeyVault/vaults/aucertdev-kv-41e0x5
5Storage Accountaucertdev41e0x5Microsoft.Storage/storageAccountsFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Storage/storageAccounts/aucertdev41e0x5
6Internal PG Serveraucertdev-internal-pg-41e0x5Microsoft.DBforPostgreSQL/flexibleServersFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.DBforPostgreSQL/flexibleServers/aucertdev-internal-pg-41e0x5
7Private DNS Zone (product PG)aucertdev.postgres.database.azure.comMicrosoft.Network/privateDnsZonesFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/privateDnsZones/aucertdev.postgres.database.azure.com
8DNS VNet Link (product PG)postgres-dns-linkMicrosoft.Network/privateDnsZones/virtualNetworkLinksFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/privateDnsZones/aucertdev.postgres.database.azure.com/virtualNetworkLinks/postgres-dns-link
9Private DNS Zone (internal PG)aucert-internal.postgres.database.azure.comMicrosoft.Network/privateDnsZonesFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/privateDnsZones/aucert-internal.postgres.database.azure.com
10DNS VNet Link (internal PG)internal-postgres-dns-linkMicrosoft.Network/privateDnsZones/virtualNetworkLinksFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/privateDnsZones/aucert-internal.postgres.database.azure.com/virtualNetworkLinks/internal-postgres-dns-link
11Private DNS Zone (Redis)privatelink.redis.cache.windows.netMicrosoft.Network/privateDnsZonesFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/privateDnsZones/privatelink.redis.cache.windows.net
12DNS VNet Link (Redis)redis-dns-linkMicrosoft.Network/privateDnsZones/virtualNetworkLinksFoundation/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/privateDnsZones/privatelink.redis.cache.windows.net/virtualNetworkLinks/redis-dns-link
13Product PG Serveraucertdev-pg-41e0x5Microsoft.DBforPostgreSQL/flexibleServersDev-only/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.DBforPostgreSQL/flexibleServers/aucertdev-pg-41e0x5
14Redis Cacheaucertdev-redis-41e0x5Microsoft.Cache/RedisDev-only/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Cache/redis/aucertdev-redis-41e0x5
15Redis Private Endpointaucertdev-redis-pe-41e0x5Microsoft.Network/privateEndpointsDev-only/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/privateEndpoints/aucertdev-redis-pe-41e0x5
16Redis PE NICaucertdev-redis-pe-41e0x5.nic.8c4aa9ca-3217-4251-ad6e-095dc9c36a32Microsoft.Network/networkInterfacesDev-only/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/networkInterfaces/aucertdev-redis-pe-41e0x5.nic.8c4aa9ca-3217-4251-ad6e-095dc9c36a32

Classification notes:

  • The Redis private endpoint (#15) and its NIC (#16) are tied to the Redis cache resource. If Redis moves, these must move with it.
  • The Redis private DNS zone (#11) and VNet link (#12) are shared networking infrastructure — classified as Foundation even though they serve the dev-only Redis. If production gets a dedicated Redis, this DNS zone will serve both.
  • The product PG private DNS zone (#7) is Foundation because staging will share the same PG server and DNS zone.
  • No user-assigned managed identities found — AKS uses SystemAssigned identity.

Terraform state mapping

Foundation tier (foundation.terraform.tfstate)

Terraform AddressAzure Resource NameAzure Resource ID
azurerm_resource_group.mainaucert-dev-rg/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg
azurerm_virtual_network.mainaucertdev-vnet.../Microsoft.Network/virtualNetworks/aucertdev-vnet
azurerm_subnet.aksaks-subnet.../virtualNetworks/aucertdev-vnet/subnets/aks-subnet
azurerm_subnet.postgrespostgres-subnet.../virtualNetworks/aucertdev-vnet/subnets/postgres-subnet
azurerm_subnet.redisredis-subnet.../virtualNetworks/aucertdev-vnet/subnets/redis-subnet
azurerm_subnet.keyvaultkeyvault-subnet.../virtualNetworks/aucertdev-vnet/subnets/keyvault-subnet
azurerm_subnet.internal_platforminternal-platform-subnet.../virtualNetworks/aucertdev-vnet/subnets/internal-platform-subnet
azurerm_kubernetes_cluster.mainaucertdev-aks.../Microsoft.ContainerService/managedClusters/aucertdev-aks
azurerm_postgresql_flexible_server.mainaucertdev-pg-41e0x5.../Microsoft.DBforPostgreSQL/flexibleServers/aucertdev-pg-41e0x5
azurerm_postgresql_flexible_server.internalaucertdev-internal-pg-41e0x5.../Microsoft.DBforPostgreSQL/flexibleServers/aucertdev-internal-pg-41e0x5
azurerm_postgresql_flexible_server_database.aucertaucert (on product PG)
azurerm_postgresql_flexible_server_database.planeplane_db (on internal PG)
azurerm_redis_cache.mainaucertdev-redis-41e0x5.../Microsoft.Cache/redis/aucertdev-redis-41e0x5
azurerm_private_endpoint.redisaucertdev-redis-pe-41e0x5.../Microsoft.Network/privateEndpoints/aucertdev-redis-pe-41e0x5
azurerm_container_registry.mainaucertacr41e0x5.../Microsoft.ContainerRegistry/registries/aucertacr41e0x5
azurerm_key_vault.mainaucertdev-kv-41e0x5.../Microsoft.KeyVault/vaults/aucertdev-kv-41e0x5
azurerm_storage_account.mainaucertdev41e0x5.../Microsoft.Storage/storageAccounts/aucertdev41e0x5
azurerm_storage_container.test_artifactstest-artifacts
azurerm_storage_container.screenshotsscreenshots
azurerm_private_dns_zone.postgresaucertdev.postgres.database.azure.com.../Microsoft.Network/privateDnsZones/aucertdev.postgres.database.azure.com
azurerm_private_dns_zone.internal_postgresaucert-internal.postgres.database.azure.com.../Microsoft.Network/privateDnsZones/aucert-internal.postgres.database.azure.com
azurerm_private_dns_zone.redisprivatelink.redis.cache.windows.net.../Microsoft.Network/privateDnsZones/privatelink.redis.cache.windows.net
azurerm_private_dns_zone_virtual_network_link.postgrespostgres-dns-link
azurerm_private_dns_zone_virtual_network_link.internal_postgresinternal-postgres-dns-link
azurerm_private_dns_zone_virtual_network_link.redisredis-dns-link
azurerm_key_vault_secret.pg_passwordpg-admin-password
azurerm_key_vault_secret.pg_connection_stringpg-connection-string
azurerm_key_vault_secret.internal_pg_passwordinternal-pg-admin-password
azurerm_key_vault_secret.internal_pg_connection_stringinternal-pg-connection-string
azurerm_key_vault_secret.redis_primary_keyredis-primary-key
azurerm_key_vault_secret.redis_connection_stringredis-connection-string
azurerm_key_vault_secret.storage_keystorage-account-key
azurerm_role_assignment.aks_acr_pullAKS → ACR AcrPull
azurerm_role_assignment.aks_kv_crypto_userAKS → KV Crypto User
azurerm_role_assignment.aks_kv_readerAKS → KV Reader
azurerm_role_assignment.kv_adminKV Admin
azurerm_role_assignment.kv_crypto_officerKV Crypto Officer
random_string.suffix41e0x5
random_password.pg_password— (sensitive)
random_password.internal_pg_password— (sensitive)
time_sleep.wait_for_rbac— (timing resource)
data.azurerm_client_config.current— (data source)

Internal-platform tier (internal-platform.terraform.tfstate)

Terraform AddressAzure Resource NameNotes
data.terraform_remote_state.foundationReferences foundation state (read-only)
data.azurerm_key_vault.mainaucertdev-kv-41e0x5Data source, reads from foundation
azurerm_key_vault_key.astra_token_encryptionastra-token-encryptionRSA 2048 key for Astra agent tokens
azurerm_postgresql_flexible_server_database.astraastra_dbOn internal PG server
azurerm_postgresql_flexible_server_database.internal_sharedinternal_shared_dbOn internal PG server

Dev environment tier (env-dev.terraform.tfstate)

Status: Not initialized (terraform init required). No resources tracked.


Files requiring updates

FileLine(s)Current ReferenceNeeded Change
infra/terraform/foundation/variables.tf19default = "aucert-dev-rg"Update default to aucert-foundation-rg for foundation resources
tools/scripts/astra-deploy.sh25AKS_RG="aucert-dev-rg"Update to new RG name if AKS moves
tools/scripts/astra-deploy.sh26AKS_CLUSTER="aucertdev-aks"Verify cluster name unchanged
tools/scripts/setup-dev.sh55--resource-group aucert-dev-rg --name aucertdev-aksUpdate RG reference
.github/workflows/deploy-astra.yml12Comment: aucert-dev-rgUpdate comment
.github/workflows/deploy-astra.yml138'aucert-dev-rg' (fallback)Update fallback RG value
.github/workflows/deploy-astra.yml181'aucert-dev-rg' (fallback)Update fallback RG value
infra/.context/CLOUD.md4, 23, 26, 42Multiple references to aucert-dev-rg, aucertdev-aks, aucertdev-vnetUpdate context file post-migration
.context/drift/infra-current-state.md14, 22, 45aucert-dev-rg, aucertdev-vnet, aucertdev-aksUpdate or archive drift doc
.context/drift/2026-03-24-infra-dev-environment.md43-45aucert-dev-rg, aucertdev-vnet, aucertdev-aksUpdate or archive drift doc
infra/k8s/internal-platform/plane/SETUP.md10--resource-group aucert-dev-rgUpdate RG reference
infra/terraform/foundation/README.md6aucert-dev-rgUpdate README
.init/bootstrap.sh396aucert-dev-rgUpdate bootstrap script
infra/terraform/foundation/main.tf17aucert-tfstate-rg (backend)No change needed (tfstate RG stays)
infra/terraform/internal-platform/main.tf19aucert-tfstate-rg (backend)No change needed (tfstate RG stays)
infra/terraform/environments/dev/main.tf14aucert-tfstate-rg (backend)No change needed (tfstate RG stays)

Note: No files reference MC_aucert-dev-rg directly — this auto-generated node resource group name will change automatically when/if AKS is recreated in the new RG.


Section 1: Azure account

{
"id": "dae5d10c-2ab5-4b04-8201-ed5e6ba3400e",
"name": "Aucert Enterprise",
"state": "Enabled",
"tenantId": "0cd61d9a-5d63-4b96-9755-10896a905fe9"
}

Section 2: Resource inventory

Table format

Name                                                                    Location
---------------------------------------------------------------------- ----------
aucertdev41e0x5 westus
aucertdev.postgres.database.azure.com global
aucertdev-redis-41e0x5 westus
aucertdev-kv-41e0x5 westus
aucertdev-vnet westus
aucertacr41e0x5 westus
aucertdev.postgres.database.azure.com/postgres-dns-link global
aucertdev-pg-41e0x5 westus
aucertdev-aks westus
aucert-internal.postgres.database.azure.com global
aucert-internal.postgres.database.azure.com/internal-postgres-dns-link global
aucertdev-internal-pg-41e0x5 westus
privatelink.redis.cache.windows.net global
aucertdev-redis-pe-41e0x5 westus
privatelink.redis.cache.windows.net/redis-dns-link global
aucertdev-redis-pe-41e0x5.nic.8c4aa9ca-3217-4251-ad6e-095dc9c36a32 westus

Total: 16 resources in aucert-dev-rg

Resource type breakdown

TypeCountResources
Microsoft.Network/virtualNetworks1aucertdev-vnet
Microsoft.ContainerService/managedClusters1aucertdev-aks
Microsoft.ContainerRegistry/registries1aucertacr41e0x5
Microsoft.KeyVault/vaults1aucertdev-kv-41e0x5
Microsoft.Storage/storageAccounts1aucertdev41e0x5
Microsoft.DBforPostgreSQL/flexibleServers2aucertdev-pg-41e0x5, aucertdev-internal-pg-41e0x5
Microsoft.Cache/Redis1aucertdev-redis-41e0x5
Microsoft.Network/privateDnsZones3aucertdev.postgres.database.azure.com, aucert-internal.postgres.database.azure.com, privatelink.redis.cache.windows.net
Microsoft.Network/privateDnsZones/virtualNetworkLinks3postgres-dns-link, internal-postgres-dns-link, redis-dns-link
Microsoft.Network/privateEndpoints1aucertdev-redis-pe-41e0x5
Microsoft.Network/networkInterfaces1aucertdev-redis-pe-41e0x5.nic.*

All resources tagged: environment=dev, managed_by=terraform, project=aucert


Section 3: AKS cluster details

{
"dnsServiceIP": null,
"enableRBAC": true,
"identityPrincipalId": "f4840d67-a0d2-443f-9b93-5593288af641",
"identityType": "SystemAssigned",
"kubernetesVersion": "1.32",
"location": "westus",
"name": "aucertdev-aks",
"networkPlugin": "azure",
"networkPolicy": "none",
"nodePoolCount": 2,
"nodePoolMaxPods": 30,
"nodePoolName": "system",
"nodePoolOsDiskSizeGB": null,
"nodePoolSubnetId": "/subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg/providers/Microsoft.Network/virtualNetworks/aucertdev-vnet/subnets/aks-subnet",
"nodePoolVmSize": "Standard_D2s_v6",
"nodeResourceGroup": "MC_aucert-dev-rg_aucertdev-aks_westus",
"podCidr": null,
"serviceCidr": "10.0.128.0/17",
"skuTier": "Free"
}

Additional details from Terraform state:

  • FQDN: aucertdev-57u0wp2m.hcp.westus.azmk8s.io
  • DNS prefix: aucertdev
  • Current K8s version: 1.32.11
  • OIDC issuer enabled: true
  • OIDC issuer URL: https://westus.oic.prod-aks.azure.com/0cd61d9a-5d63-4b96-9755-10896a905fe9/0697e01e-470d-40d0-90dc-79237b488935/
  • Workload identity enabled: true
  • OS disk: 50 GB Managed
  • OS SKU: Ubuntu
  • Auto-scaling: disabled
  • Private cluster: disabled

Section 4: VNet and subnet details

VNet

{
"addressSpace": ["10.0.0.0/16"],
"location": "westus",
"name": "aucertdev-vnet"
}

Subnets

Name                      AddressPrefix    PrivateEndpointNetworkPolicies    Delegations
------------------------ --------------- -------------------------------- -----------------------------------------
keyvault-subnet 10.0.6.0/24 Disabled
aks-subnet 10.0.0.0/22 Disabled
redis-subnet 10.0.5.0/24 Disabled
postgres-subnet 10.0.4.0/24 Disabled Microsoft.DBforPostgreSQL/flexibleServers
internal-platform-subnet 10.0.7.0/24 Disabled Microsoft.DBforPostgreSQL/flexibleServers

Notes:

  • aks-subnet is /22 (1024 IPs) — large enough for pod networking with Azure CNI
  • postgres-subnet and internal-platform-subnet are delegated to PostgreSQL Flexible Servers
  • redis-subnet hosts the Redis private endpoint (not delegated)
  • keyvault-subnet currently unused for private endpoints (Key Vault uses public access)

Section 5: PostgreSQL servers

Server listing

[
{
"backupRetention": 7,
"delegatedSubnetId": ".../subnets/postgres-subnet",
"fqdn": "aucertdev-pg-41e0x5.postgres.database.azure.com",
"haEnabled": "Disabled",
"name": "aucertdev-pg-41e0x5",
"privateDnsZoneId": ".../privateDnsZones/aucertdev.postgres.database.azure.com",
"sku": "Standard_B2s",
"skuTier": "Burstable",
"state": "Ready",
"storage": 32,
"version": "16"
},
{
"backupRetention": 7,
"delegatedSubnetId": ".../subnets/internal-platform-subnet",
"fqdn": "aucertdev-internal-pg-41e0x5.postgres.database.azure.com",
"haEnabled": "Disabled",
"name": "aucertdev-internal-pg-41e0x5",
"privateDnsZoneId": ".../privateDnsZones/aucert-internal.postgres.database.azure.com",
"sku": "Standard_B2s",
"skuTier": "Burstable",
"state": "Ready",
"storage": 32,
"version": "16"
}
]

Databases on product PG (aucertdev-pg-41e0x5)

Name               Charset    Collation
----------------- --------- -----------
azure_maintenance UTF8 en_US.utf8
postgres UTF8 en_US.utf8
azure_sys UTF8 en_US.utf8
aucert UTF8 en_US.utf8

Databases on internal PG (aucertdev-internal-pg-41e0x5)

Name                Charset    Collation
------------------ --------- -----------
azure_maintenance UTF8 en_US.utf8
postgres UTF8 en_US.utf8
azure_sys UTF8 en_US.utf8
plane_db UTF8 en_US.utf8
astra_db UTF8 en_US.utf8
internal_shared_db UTF8 en_US.utf8

Additional TF state details:

  • Product PG admin login: aucertadmin
  • Internal PG admin login: internaladmin
  • Both: public_network_access_enabled = false, auto_grow_enabled = false
  • Internal PG tagged: destroyable=false, tier=internal-platform

Section 6: Redis cache

[
{
"enableNonSslPort": false,
"hostName": "aucertdev-redis-41e0x5.redis.cache.windows.net",
"minimumTlsVersion": "1.2",
"name": "aucertdev-redis-41e0x5",
"port": 6379,
"sku": "Basic",
"skuCapacity": 0,
"skuFamily": "C",
"sslPort": 6380,
"subnetId": null
}
]

Additional TF state details:

  • Redis version: 6.0
  • public_network_access_enabled = false (accessible only via private endpoint)
  • Access keys authentication enabled

Section 7: ACR

{
"adminUserEnabled": false,
"loginServer": "aucertacr41e0x5.azurecr.io",
"name": "aucertacr41e0x5",
"publicNetworkAccess": "Enabled",
"sku": "Basic"
}

Section 8: Key Vault

Vault properties

{
"name": "aucertdev-kv-41e0x5",
"publicNetworkAccess": "Enabled",
"purgeProtection": null,
"sku": "standard",
"softDeleteEnabled": true,
"softDeleteRetention": 7,
"uri": "https://aucertdev-kv-41e0x5.vault.azure.net/"
}

Secrets (names only)

Name                           Enabled
----------------------------- ---------
internal-pg-admin-password True
internal-pg-connection-string True
pg-admin-password True
pg-connection-string True
redis-connection-string True
redis-primary-key True
storage-account-key True

Total: 7 secrets, all enabled. No disabled/expired secrets.


Section 9: Storage account

[
{
"accessTier": "Hot",
"httpsOnly": true,
"kind": "StorageV2",
"name": "aucertdev41e0x5",
"publicAccess": true,
"sku": "Standard_LRS"
}
]

Containers (from TF state): test-artifacts, screenshots


Section 10: Resource locks

No locks found. az lock list --resource-group aucert-dev-rg returned empty output.

This is expected for a dev environment. Consider adding a CanNotDelete lock to the internal PG server in aucert-foundation-rg after migration.


Section 11: DNS zones

Public DNS zones

No public DNS zones found in aucert-dev-rg.

Private DNS zones

ZoneName                                     ResourceGroup    RecordSets    VirtualNetworkLinks
------------------------------------------- --------------- ------------ ---------------------
aucert-internal.postgres.database.azure.com aucert-dev-rg 2 1
aucertdev.postgres.database.azure.com aucert-dev-rg 2 1
privatelink.redis.cache.windows.net aucert-dev-rg 2 1

All three private DNS zones have 1 VNet link each (to aucertdev-vnet) and 2 record sets (SOA + the A record).


Section 12: Managed identities

No user-assigned managed identities found in aucert-dev-rg.

AKS uses a SystemAssigned managed identity (principal ID: f4840d67-a0d2-443f-9b93-5593288af641). This is managed automatically by Azure — it lives with the AKS resource, not as a separate resource.


Section 13: Role assignments on aucert-dev-rg

PrincipalName                         RoleDefinition    Scope
------------------------------------ ---------------- ----------------------------------------------------------------------
2524de9f-c128-42ee-bdf8-14793078a004 Contributor /subscriptions/dae5d10c-2ab5-4b04-8201-ed5e6ba3400e/resourceGroups/aucert-dev-rg

Only 1 explicit role assignment at the RG scope. The principal 2524de9f-... is likely the CI/CD service principal.

Note: Additional role assignments managed via Terraform (AKS → ACR pull, AKS → KV reader/crypto) are scoped to individual resources, not the RG. These are tracked in the foundation Terraform state.


Section 14: Kubernetes state

Namespaces

NAME                STATUS
aucert-dev Active
default Active
ingress Active
internal-platform Active
kube-node-lease Active
kube-public Active
kube-system Active

Pods (all namespaces)

NAMESPACE           NAME                                                   READY   STATUS             RESTARTS        AGE
internal-platform astra-backend-68f75f554b-q67gv 0/1 ImagePullBackOff 0 ~2m
internal-platform astra-backend-fc5bf57c5-l489w 0/1 ImagePullBackOff 0 ~2m
internal-platform astra-frontend-55897c479-kkzrp 0/1 ImagePullBackOff 0 ~2m
internal-platform astra-frontend-646d45cbc6-bk58h 0/1 ImagePullBackOff 0 ~2m
internal-platform astra-proxy-79679bbddf-w4jkb 1/1 Running 0 ~2m
internal-platform cloudflared-5c7c7cd749-rlcrn 1/1 Running 0 ~2m
internal-platform plane-admin-wl-749cb95ccf-jn5kz 1/1 Running 0 5h17m
internal-platform plane-api-wl-98dd7c77c-f9vlg 1/1 Running 1 5h17m
internal-platform plane-beat-worker-wl-74cbf4c7db-6npc5 1/1 Running 0 5h24m
internal-platform plane-live-wl-594b9d5585-7ghpm 1/1 Running 0 5h24m
internal-platform plane-minio-wl-0 1/1 Running 0 5h17m
internal-platform plane-proxy-6d8d5bd6dd-mhql6 1/1 Running 0 5h24m
internal-platform plane-rabbitmq-wl-0 1/1 Running 0 5h17m
internal-platform plane-space-wl-69d64bbf55-nxvkb 1/1 Running 0 5h24m
internal-platform plane-web-wl-577bb7f76-tfqnj 1/1 Running 0 5h24m
internal-platform plane-worker-wl-767bc64f8b-5n4sx 1/1 Running 3 5h17m
kube-system (22 system pods — all Running)

Notable findings:

  • Astra backend/frontend pods are in ImagePullBackOff — images not yet available in ACR
  • Plane CE components all running (9 components: web, api, admin, space, live, worker, beat-worker, minio, rabbitmq)
  • Cloudflared tunnel running
  • No pods in aucert-dev namespace (product not yet deployed)
  • No pods in ingress namespace

Services

NAMESPACE           NAME                               TYPE        CLUSTER-IP     PORT(S)
default kubernetes ClusterIP 10.0.128.1 443/TCP
internal-platform astra-backend ClusterIP 10.0.162.12 8081/TCP
internal-platform astra-frontend ClusterIP 10.0.208.184 3000/TCP
internal-platform astra-proxy ClusterIP 10.0.231.215 80/TCP
internal-platform plane-admin ClusterIP None 3000/TCP
internal-platform plane-api ClusterIP None 8000/TCP
internal-platform plane-live ClusterIP None 3000/TCP
internal-platform plane-minio ClusterIP None 9000/TCP,9090/TCP
internal-platform plane-proxy ClusterIP 10.0.150.123 80/TCP
internal-platform plane-rabbitmq ClusterIP None 5672/TCP,15672/TCP
internal-platform plane-space ClusterIP None 3000/TCP
internal-platform plane-web ClusterIP None 3000/TCP
kube-system azure-wi-webhook-webhook-service ClusterIP 10.0.184.161 443/TCP
kube-system kube-dns ClusterIP 10.0.128.10 53/UDP,53/TCP
kube-system metrics-server ClusterIP 10.0.234.127 443/TCP

All services are ClusterIP (no LoadBalancer or NodePort). External access via Cloudflare Tunnel only.

Secrets (names and types only)

NAMESPACE           NAME                                                        TYPE
internal-platform astra-db-credentials Opaque
internal-platform astra-secrets Opaque
internal-platform cloudflared-tunnel-credentials Opaque
internal-platform plane-app-secrets Opaque
internal-platform plane-db-credentials Opaque
internal-platform plane-doc-store-secrets Opaque
internal-platform plane-live-secrets Opaque
internal-platform plane-rabbitmq-secrets Opaque
internal-platform plane-redis-credentials Opaque
internal-platform sh.helm.release.v1.plane.v{1-5} helm.sh/release.v1
kube-system azure-wi-webhook-server-cert Opaque
kube-system bootstrap-token-2t9gjq bootstrap.kubernetes.io/token
kube-system konnectivity-certs Opaque
kube-system sh.helm.release.v1.aks-managed-overlay-upgrade-data.v{...} helm.sh/release.v1
kube-system sh.helm.release.v1.aks-managed-workload-identity.v{...} helm.sh/release.v1

ConfigMaps

NAMESPACE           NAME
aucert-dev kube-root-ca.crt
internal-platform astra-config
internal-platform astra-proxy-config
internal-platform cloudflared-config
internal-platform plane-app-vars
internal-platform plane-live-vars
internal-platform plane-proxy-config
kube-system (system configmaps)

Helm releases

NAME                              NAMESPACE          REVISION  STATUS    CHART                                                      APP VERSION
aks-managed-overlay-upgrade-data kube-system 6687 deployed overlay-upgrade-data-addon-0.1.0-v20260317-addon-260321-1
aks-managed-workload-identity kube-system 6669 deployed workload-identity-addon-0.1.0-v20260317-addon-260321-1
plane internal-platform 5 deployed plane-ce-1.4.1 1.2.0

Resource quotas

# aucert-dev namespace
apiVersion: v1
kind: ResourceQuota
metadata:
name: aucert-dev-quota
namespace: aucert-dev
spec:
hard:
limits.cpu: "8"
limits.memory: 16Gi
requests.cpu: "4"
requests.memory: 8Gi
status:
used:
limits.cpu: "0" # nothing deployed yet
limits.memory: "0"
requests.cpu: "0"
requests.memory: "0"

Cloudflare Tunnel

DEPLOYMENT: cloudflared (internal-platform)
Image: cloudflare/cloudflared:2024.12.2
Replicas: 1/1
Pod: cloudflared-5c7c7cd749-rlcrn — Running

Section 15: Terraform state

Foundation tier

State key: foundation.terraform.tfstate Backend: aucerttfstate in aucert-tfstate-rg Resources tracked: 42

data.azurerm_client_config.current
azurerm_container_registry.main
azurerm_key_vault.main
azurerm_key_vault_secret.internal_pg_connection_string
azurerm_key_vault_secret.internal_pg_password
azurerm_key_vault_secret.pg_connection_string
azurerm_key_vault_secret.pg_password
azurerm_key_vault_secret.redis_connection_string
azurerm_key_vault_secret.redis_primary_key
azurerm_key_vault_secret.storage_key
azurerm_kubernetes_cluster.main
azurerm_postgresql_flexible_server.internal
azurerm_postgresql_flexible_server.main
azurerm_postgresql_flexible_server_database.aucert
azurerm_postgresql_flexible_server_database.plane
azurerm_private_dns_zone.internal_postgres
azurerm_private_dns_zone.postgres
azurerm_private_dns_zone.redis
azurerm_private_dns_zone_virtual_network_link.internal_postgres
azurerm_private_dns_zone_virtual_network_link.postgres
azurerm_private_dns_zone_virtual_network_link.redis
azurerm_private_endpoint.redis
azurerm_redis_cache.main
azurerm_resource_group.main
azurerm_role_assignment.aks_acr_pull
azurerm_role_assignment.aks_kv_crypto_user
azurerm_role_assignment.aks_kv_reader
azurerm_role_assignment.kv_admin
azurerm_role_assignment.kv_crypto_officer
azurerm_storage_account.main
azurerm_storage_container.screenshots
azurerm_storage_container.test_artifacts
azurerm_subnet.aks
azurerm_subnet.internal_platform
azurerm_subnet.keyvault
azurerm_subnet.postgres
azurerm_subnet.redis
azurerm_virtual_network.main
random_password.internal_pg_password
random_password.pg_password
random_string.suffix
time_sleep.wait_for_rbac

Internal-platform tier

State key: internal-platform.terraform.tfstate Resources tracked: 5

data.azurerm_key_vault.main
data.terraform_remote_state.foundation
azurerm_key_vault_key.astra_token_encryption
azurerm_postgresql_flexible_server_database.astra
azurerm_postgresql_flexible_server_database.internal_shared

Dev environment tier

State key: env-dev.terraform.tfstate Status: Not initialized — terraform init has not been run in this directory.

Error: Backend initialization required, please run "terraform init"

Section 16: Terraform directory structure

.tf files

infra/terraform/environments/dev/main.tf
infra/terraform/foundation/acr.tf
infra/terraform/foundation/aks.tf
infra/terraform/foundation/database.tf
infra/terraform/foundation/keyvault.tf
infra/terraform/foundation/main.tf
infra/terraform/foundation/network.tf
infra/terraform/foundation/outputs.tf
infra/terraform/foundation/redis.tf
infra/terraform/foundation/storage.tf
infra/terraform/foundation/variables.tf
infra/terraform/internal-platform/_shared.tf
infra/terraform/internal-platform/databases.tf
infra/terraform/internal-platform/keyvault.tf
infra/terraform/internal-platform/main.tf
infra/terraform/internal-platform/plane/database.tf
infra/terraform/internal-platform/plane/variables.tf
infra/terraform/internal-platform/variables.tf

.tfvars files

infra/terraform/environments/dev/terraform.tfvars
infra/terraform/foundation/terraform.tfvars
infra/terraform/internal-platform/terraform.tfvars

Backend configurations

Foundation (infra/terraform/foundation/main.tf):

backend "azurerm" {
resource_group_name = "aucert-tfstate-rg"
storage_account_name = "aucerttfstate"
container_name = "tfstate"
key = "foundation.terraform.tfstate"
}

Internal-platform (infra/terraform/internal-platform/main.tf):

backend "azurerm" {
resource_group_name = "aucert-tfstate-rg"
storage_account_name = "aucerttfstate"
container_name = "tfstate"
key = "internal-platform.terraform.tfstate"
}

Dev environment (infra/terraform/environments/dev/main.tf):

backend "azurerm" {
resource_group_name = "aucert-tfstate-rg"
storage_account_name = "aucerttfstate"
container_name = "tfstate"
key = "env-dev.terraform.tfstate"
}

Section 17: File references to old names

References to aucert-dev-rg (14 hits across 11 files)

.github/workflows/deploy-astra.yml:12:#   AKS_RESOURCE_GROUP    — e.g. aucert-dev-rg
.github/workflows/deploy-astra.yml:138: resource-group: ${{ vars.AKS_RESOURCE_GROUP || 'aucert-dev-rg' }}
.github/workflows/deploy-astra.yml:181: resource-group: ${{ vars.AKS_RESOURCE_GROUP || 'aucert-dev-rg' }}
.init/bootstrap.sh:396:Deploy now. aucert-dev-rg, East US 2, VNet 10.0.0.0/16
.context/drift/2026-03-24-infra-dev-environment.md:43:| Resource Group | `aucert-dev-rg` | West US |
.context/drift/infra-current-state.md:14:| Resource group | `aucert-dev-rg` (all resources) |
tools/scripts/setup-dev.sh:55: echo " ✗ Cannot reach AKS. Run: az aks get-credentials --resource-group aucert-dev-rg --name aucertdev-aks"
infra/.context/CLOUD.md:4:Verify command: `az resource list -g aucert-dev-rg -o table`
infra/.context/CLOUD.md:23:| aucert-dev-rg | All infrastructure (VNet, AKS, databases, shared services) | foundation/ |
tools/scripts/astra-deploy.sh:25:AKS_RG="aucert-dev-rg"
infra/terraform/foundation/variables.tf:19: default = "aucert-dev-rg"
infra/k8s/internal-platform/plane/SETUP.md:10: --resource-group aucert-dev-rg \
infra/terraform/foundation/README.md:6:- Resource Group: aucert-dev-rg (West US)

References to aucertdev-aks (9 hits across 6 files)

.github/workflows/deploy-astra.yml:11:#   AKS_CLUSTER           — e.g. aucertdev-aks
.github/workflows/deploy-astra.yml:139: cluster-name: ${{ vars.AKS_CLUSTER || 'aucertdev-aks' }}
.github/workflows/deploy-astra.yml:182: cluster-name: ${{ vars.AKS_CLUSTER || 'aucertdev-aks' }}
tools/scripts/setup-dev.sh:55: echo " ✗ Cannot reach AKS. Run: az aks get-credentials --resource-group aucert-dev-rg --name aucertdev-aks"
tools/scripts/astra-deploy.sh:7:# - kubectl configured for aucertdev-aks
tools/scripts/astra-deploy.sh:26:AKS_CLUSTER="aucertdev-aks"
.context/drift/2026-03-24-infra-dev-environment.md:45:| AKS | `aucertdev-aks` | ...
.context/drift/infra-current-state.md:45:| Cluster name | `aucertdev-aks` |
infra/.context/CLOUD.md:42:- AKS cluster: aucertdev-aks

References to aucertdev-vnet (3 hits across 3 files)

.context/drift/2026-03-24-infra-dev-environment.md:44:| VNet | `aucertdev-vnet` | ...
infra/.context/CLOUD.md:26:## Network (VNet: aucertdev-vnet, 10.0.0.0/16)
.context/drift/infra-current-state.md:22:**VNet:** `aucertdev-vnet` — `10.0.0.0/16`

References to MC_aucert-dev-rg

No matches found. The AKS node resource group name is not hardcoded anywhere.


Section 18: Other resource groups

Name                                   Location    State
------------------------------------- ---------- ---------
aucert-dev-rg westus Succeeded
MC_aucert-dev-rg_aucertdev-aks_westus westus Succeeded
aucert-tfstate-rg westus Succeeded

Key finding: aucert-foundation-rg does NOT exist yet. It must be created before the migration.

Three RGs currently exist:

  1. aucert-dev-rg — all user-deployed resources (target of migration)
  2. MC_aucert-dev-rg_aucertdev-aks_westus — AKS-managed node RG (auto-created by Azure, not directly manageable)
  3. aucert-tfstate-rg — Terraform state storage (separate, not affected by migration)

Migration considerations

Critical warnings

  1. PostgreSQL Flexible Servers cannot be moved between resource groups via az resource move. They must be handled through Terraform state manipulation (remove + import) or recreated. This is the hardest part of the migration.

  2. AKS node resource group (MC_aucert-dev-rg_aucertdev-aks_westus) is auto-named from the parent RG. If AKS moves to aucert-foundation-rg, the node RG would be renamed on cluster recreation only — it cannot be renamed in place.

  3. Private DNS zones and VNet links are currently in aucert-dev-rg. If foundation resources (VNet, internal PG) move to aucert-foundation-rg, the DNS zones should move with them to maintain the VNet link integrity.

  4. Terraform state for foundation contains dev-only resources (product PG, Redis). The migration must also split the Terraform state — some resources should be re-homed to the dev environment state.

  5. Redis private endpoint depends on both the Redis cache (dev-only) and the VNet subnet (foundation). If Redis stays in dev-rg, the PE and its NIC should stay too.

  6. Key Vault secrets reference resources across both RGs (product PG secrets + internal PG secrets + Redis secrets). The Key Vault itself should be in foundation.

  7. Role assignments — the Contributor assignment on aucert-dev-rg will need a corresponding assignment on aucert-foundation-rg.

Resources NOT in aucert-dev-rg but relevant

  • Terraform state storage (aucerttfstate in aucert-tfstate-rg) — unaffected
  • AKS node resources in MC_aucert-dev-rg_aucertdev-aks_westus — cannot be moved independently