Ga naar inhoud

Spoke JSON-naslag

Eén JSON-bestand per spoke (één workload in één spoke-omgeving), opgeslagen onder <env-folder>/spokes/.

  • Schema: src/Xebia.Mcp/Files/json/spokeschema.json (JSON Schema draft-07).
  • Consumer: src/Xebia.Mcp/Files/terraform/spoke-canvas/deploy/spoke/ (locals.tf, main.tf).

Verpl. = verplicht volgens het schema. Gebruikt = gelezen door de Terraform. Velden die wel in het schema staan maar niet worden gebruikt, zijn gemarkeerd als no effect.

Zie Nieuwe spoke voor de walkthrough van een nieuw bestand. Instellingen die voor alle spokes gelden (tenant, regio's, IPAM-pools, PIM-profielen) staan in Spoke common settings.

Hoogste niveau

Veld Type Verpl. Beschrijving
workloadShortName string, max 6 ja Korte workloadcode. Wordt gebruikt in resourcenamen, groepsnamen en de state key. Wijzig dit niet na aanmaak.
environment string ja dev, tst, test, acc, acc<n>, prd, prod, shrd, shared. De pipeline groepeert ze in de stages dev / tst / acc / prd / shared, maar namen en de state key gebruiken de ruwe waarde. Wijzig dit niet na aanmaak.
azureSubscriptionId string ja ID van een bestaande subscription (zie Nieuwe spoke).
azureSubscriptionName string ja De subscription wordt hernoemd naar deze naam. Als het leeg is, wordt SpokeCommon.tenantinfo.SubsciptionNamingTemplate gebruikt.
managementGroupId string ja Naam van de management group (niet de volledige ID), bijvoorbeeld cloudplatform-landingzones-corp. Moet een id zijn in <env-folder>/<targetRegions.primary>/foundation.auto.tfvars (config test).
subType string nee No effect.
resourceGroup.name string/null nee Overschrijft de naam van de resource group rg-canvas-<wl>-<env>-<region>-001.
tags object ja Verplichte keys: owner, department, workload, pii (yes/no), costcentre, environment. Extra keys zijn toegestaan. Toegepast op de subscription en de canvas-resources, plus spoke_canvas_version. De deployment voegt ook een gereserveerde tag hidden-XebiaSpokeMetadata toe met JSON-gecodeerde metadata uit het spoke-bestand. Zet die tag niet in het bestand.
adInfo object ja Identiteit, zie hieronder.
targetRegions.primary string ja Korte regionaam, bijvoorbeeld weu.
targetRegions.additional array ja Extra regio's ([] voor geen).
azdo object nee Maakt een Azure DevOps-repo en service connection aan. Laat de key helemaal weg om dit over te slaan; null faalt op het schema. Zie Spoke-integraties.
extensions object nee Het schema staat alleen apim, acr, servicebus, eventhub toe, elk als { "enabled": bool }. Ze gebruiken de gedeelde services in mcp.json SpokeCommon.shared_services (wat elke extensie inricht). De Terraform leest ook extensions.github (zie Spoke-integraties) en extensions.integrations, maar het schema van sommige versies wijst deze af. servicebus.enabled: true heeft group-name keys nodig die het schema afwijst, dus het kan de config test op dit moment niet halen (Bekende problemen).
resourceconfiguration object ja Resources, zie hieronder.

adInfo

Veld Type Verpl. Beschrijving
ProductTeamGroupNames string[] ja Weergavenamen van bestaande Entra ID-groepen die via de spoke-groepen toegang krijgen.
PIMGroupConfig.Readers / .Contributors / .Owners enum ja nopim = actief lidmaatschap, self-approve = PIM-eligible zonder goedkeuring, approval = PIM-eligible met goedkeuring. De profielen worden gedefinieerd in pim_configurations (common settings). De Support-groep is niet configureerbaar: de deploymentlogica stelt die altijd in (RBAC en PIM).
ad_OwnersMembers, ad_OwnersMembersUPN string[] (e-mail / UPN) nee Initiële owners van de spoke-groepen. Samen met de deployment-identiteit en de spoke SPN worden ze owners van alle vier spoke-groepen, alleen bij aanmaak (ignore_changes).
ad_ReadersMembers, ad_ReadersMembersUPN array nee Worden leden van de Readers-groep, alleen bij aanmaak.
ad_EngineersMembers, ad_EngineersMembersUPN array nee No effect (wordt gelezen, maar niet toegepast op een groep).
PIMAssignments object nee Override per spoke van de RBAC-rolmap, met de exacte Azure-rolnaam als key, met levels en/of pim_profile. Zie RBAC en PIM voor spokes.
SPNGraphPermissions string[] nee (niet in schema) Microsoft Graph app roles die aan de spoke service principal worden toegekend.
SupportManagementInfo object nee No effect (niet gelezen door de Terraform).

resourceconfiguration.network[]

Veld Type Verpl. Beschrijving
name string ja VNet-naam. De placeholders ##wlshortname##, ##environment## en ##region## worden vervangen.
region string ja Korte regionaam van dit VNet.
addressPrefix string[] (CIDR) ja, tenzij ipamPool wordt gebruikt Adresruimte van het VNet, bijvoorbeeld 10.20.4.0/23. Geen controle op overlap. Sluit ipamPool uit.
ipamPool string nee Naam van een IPAM-pool uit networking.ipam_pools in de common settings. Gebruik in plaats van addressPrefix. Zie hieronder.
numberOfIpAddresses number nee Grootte van het blok dat uit de pool wordt toegewezen, bijvoorbeeld 256 voor een /24. Alleen met ipamPool. Default 256.
peerHub bool ja De virtual hub connection aanmaken (standaard true).
dnsServerOverwrite string ja "" = gebruik de hub DNS-server van de regio. Anders een IP.
InternetSecurityEnabled bool nee (niet in schema) internet_security_enabled op de hub connection (standaard true: internet via de hub firewall).
overwritePeeringConnectionName string nee Overschrijft de naam van de hub connection (standaard: VNet-naam met vnet- → con-).
useIPAM bool nee No effect.
subnets[] array ja Zie hieronder.
networksecuritygroups[] array ja { name, rules[] }. Een NSG wordt door subnets aangeduid met dezelfde name. Wijzig de priority van een bestaande regel niet (die wordt opnieuw aangemaakt, wat kan mislukken): voeg een nieuwe regel met een nieuwe naam en prioriteit toe en verwijder de oude regel later. Elke regel vereist name, priority (string), direction, access, protocol (*, Tcp, Udp, Icmp, Ah, Esp), source_port_range, destination_port_range, source_address_prefix, destination_address_prefix. Regelnamen moeten uniek zijn en zeggen waar de regel voor dient. priority is uniek per NSG, van 100 tot 4096 (lager is hogere prioriteit). Poorten zijn 1 tot 65535, een bereik (2048-2055) of een lijst (80,443). Adresprefixes zijn een CIDR, een bereik of een service tag.
routetables[] array ja { name, routes[] }. Een route is { name, properties: { addressPrefix, nextHopType, nextHopIpAddress } }. nextHopType is een van VirtualNetworkGateway, VnetLocal, Internet, VirtualAppliance, None.

subnets[]

Veld Type Verpl. Beschrijving
name string ja Placeholders worden vervangen.
addressPrefix string (CIDR) ja, tenzij een IPAM-pool wordt gebruikt Moet binnen de adresruimte van het VNet liggen. Sluit ipamPool en numberOfIpAddresses uit.
ipamPool string nee Alleen nodig als het subnet uit een andere pool moet komen dan zijn VNet. Subnets erven de pool van het VNet.
numberOfIpAddresses number ja voor een subnet dat een pool gebruikt Grootte van het subnet, bijvoorbeeld 16 voor een /28. Een subnet heeft geen default.
isprivatelinksubnet bool ja Subnet bedoeld voor Private Endpoints. Elk network[]-item heeft minstens één subnet met true nodig; het eerste wordt gebruikt voor de private endpoints van de Key Vault en storage van de spoke. Wijs hier één subnet voor aan.
privateEndpointNetworkPoliciesEnabled bool ja true → Enabled. Anders RouteTableEnabled voor private link-subnets, en anders Disabled.
privateLinkServiceNetworkPoliciesEnabled bool nee
serviceEndpoints [{ "service": "<name>" }] ja Bijvoorbeeld Microsoft.Storage, Microsoft.KeyVault.
delegations [{ "name", "actions": [] }] ja name uit de lijst in het schema (66 waarden, bijvoorbeeld Microsoft.Web/serverFarms, Microsoft.App/environments, Microsoft.DBforPostgreSQL/flexibleServers).
linkedroutetablename string/null ja Naam van een route table in routetables[], of null. Recente versies hebben geen extra routes nodig, dus een route table hoort een uitzondering te zijn.
linkednetworksecuritygroupname string nee Naam van een NSG in networksecuritygroups[]. Leeg → er wordt een standaard-NSG aangemaakt en gekoppeld.

Adresruimte uit een IPAM-pool

In plaats van adresprefixes hard te coderen kan een spoke adresruimte vragen aan een Azure Virtual Network Manager IPAM-pool. Alleen de poolnaam en de grootte worden geconfigureerd. Azure kiest de adressen.

"network": [
  {
    "name": "vnet-##wlshortname##-##environment##-##region##-001",
    "region": "weu",
    "ipamPool": "dev-weu",
    "numberOfIpAddresses": 512,
    "peerHub": true,
    "dnsServerOverwrite": "",
    "subnets": [
      {
        "name": "snet-##wlshortname##-default-##environment##-##region##-001",
        "isprivatelinksubnet": false,
        "numberOfIpAddresses": 256,
        "privateEndpointNetworkPoliciesEnabled": false,
        "serviceEndpoints": [],
        "delegations": [],
        "linkedroutetablename": null,
        "linkednetworksecuritygroupname": ""
      }
    ],
    "networksecuritygroups": [],
    "routetables": []
  }
]

Regels:

  • De poolnaam moet bestaan in networking.ipam_pools van de common settings. Anders faalt het plan en toont het de beschikbare namen.
  • addressPrefix en ipamPool sluiten elkaar uit, voor een VNet en voor een subnet.
  • Een VNet zonder numberOfIpAddresses krijgt 256 adressen. Elk subnet moet zijn eigen grootte opgeven.
  • Een subnet erft de pool van zijn VNet. Om numberOfIpAddresses vragen onder een VNet met een hardgecodeerde addressPrefix laat het plan falen, omdat er geen pool is om uit toe te wijzen.
  • De adressen zijn niet bekend als je het bestand schrijft. Schrijf NSG-regels en routes tegen service tags of de VirtualNetwork-tag, niet tegen letterlijke CIDR's.
  • De toegewezen bereiken staan in de deployment-output: networking.virtualnetwork.<vnet>.resVirtualNetworkAddressSpace en resAllSubnets.

Optionele resourceblokken

Als een blok ontbreekt, gelden de defaults in de Terraform. Storage account, Key Vault en Log Analytics worden standaard gedeployed. Als een blok aanwezig is, moeten alle door het schema verplichte keys aanwezig zijn.

Blok Verplichte keys als het blok aanwezig is Opmerkingen
storageaccount EnablePublicAccess, CreatePrivateEndpoint, AccountReplicationType, AccessTier (Cool/Hot/Premium), AccountKind, AccountTier, infrastructure_encryption_enabled, allow_nested_items_to_be_public Optioneel: deploy (standaard true), name, PrivateEndpointList (blob, queue, file, table, dfs, web), EnableSAS, Containers. Een storage account forceert een Key Vault (customer-managed key).
keyvault enablepublicaccess, createprivateendpoint, EnableRBACAuthorization (moet true zijn), SKUName, SoftDeleteRetentionInDays, EnabledForDeployment, EnabledForDiskEncryption, EnabledForTemplateDeployment Optioneel: deploy (standaard true), name.
loganalytics deploy, sku, RetentionInDays, AllowResourceOnlyPermissions Optioneel: name. forwardactivitylog heeft geen effect.
networkwatcher deploy Standaard false.
privatedns – name: maakt een private DNS zone aan die is gekoppeld aan het VNet van de hub DNS resolver. null = geen.

Defaults en opmerkingen

Instelling Default of opmerking
Storage account EnablePublicAccess false. true hoort een uitzondering te zijn.
Storage account / Key Vault CreatePrivateEndpoint true. false hoort een uitzondering te zijn.
AccountReplicationType, AccessTier, AccountTier ZRS, Hot, Standard
PrivateEndpointList Alleen namen in kleine letters. Eén private endpoint per genoemd subtype.
Containers Lijst met containernamen die in het storage account worden aangemaakt (bijvoorbeeld een voor Terraform state).
Key Vault SoftDeleteRetentionInDays 30. Toegestaan 7 tot 90.
Key Vault deploy: false Geen Key Vault en geen private endpoint, en er wordt geen service principal-secret opgeslagen. Wordt genegeerd (geforceerd naar true) zolang het storage account wordt uitgerold.
Storage account deploy: false Geen storage account en geen private endpoints.
loganalytics.deploy true. false hoort een uitzondering te zijn.
Network watcher Eén per regio als hij is ingeschakeld, in een eigen resource group, niet in de canvas-resource group.

azdo

Veld Beschrijving
projectName Bestaand Azure DevOps-project
repoName Aan te maken repository (##wlshortname## en ##environment## worden vervangen)
serviceConnectionName Aan te maken Azure RM service connection voor de spoke SPN (##wlshortname## en ##environment## worden vervangen)
useFederatedCredentials true = workload identity federation in plaats van een secret Er wordt geen secret gegenereerd of in de Key Vault opgeslagen, en er wordt een federated credential aangemaakt op de app registration. Default false. Niet in het schema van sommige versies, wel gelezen door Terraform.

Wat de deployment met dit blok doet, en het GitHub-equivalent: Spoke-integraties.