Een spoke wijzigen¶
Standaardwijziging: Wijzigingen aan spoke canvas. Dit omvat de RBAC-eigenaar, service principal-gegevens, netwerk, enzovoort.
Effect: Terraform brengt de bestaande spoke in lijn met het aangepaste JSON-bestand. Alleen de verschillen worden toegepast.
Aanvraagvelden¶
Hetzelfde als bij Nieuwe spoke: Name, Rationale, Environment, Usage type, Exposure to public internet, IP range/size, subnet name/size/delegations/service endpoints, welk team toegang nodig heeft, en Comments. Vul alleen de velden in die wijzigen.
Hoe het werkt¶
Er is geen aparte "update"-pipeline. Je past het JSON-bestand van de spoke aan en draait spoke voor dat bestand. De spoke behoudt zijn
identiteit via de Terraform state-sleutel, spoke_<workloadShortName>_<environment>.tfstate. Dus:
Wijzig nooit
workloadShortNameofenvironmentvan een bestaande spoke. Beide wijzigingen maken een nieuwe state-sleutel en een volledige tweede spoke aan, terwijl de oude ongewijzigd blijft. Het bestand hernoemen of naar een andere map verplaatsen is veilig: de bestandsnaam wordt alleen gebruikt voor job- en artifactnamen.
Wat je kunt wijzigen en wat er dan gebeurt¶
| Wijziging | JSON-veld | Wat het plan moet tonen |
|---|---|---|
| Een subnet toevoegen | toevoegen aan network[].subnets[] |
subnet aangemaakt + NSG-koppeling (+ route table-koppeling) |
| Subnet-delegations of service endpoints wijzigen | subnets[].delegations / .serviceEndpoints |
subnet bijgewerkt |
| Een subnet- of VNet-adresbereik wijzigen | subnets[].addressPrefix, network[].addressPrefix |
Update of replace. Azure weigert een subnet te vergroten of verkleinen waar resources in staan. Als het plan must be replaced meldt, stop dan en plan een migratie. |
| NSG-regels toevoegen of wijzigen | networksecuritygroups[].rules[] |
regels aangemaakt of bijgewerkt. Wijzig de priority van een bestaande regel niet: de regel wordt opnieuw aangemaakt, en dat kan mislukken en de NSG inconsistent achterlaten. Voeg een nieuwe regel toe met een nieuwe naam en een nieuwe priority, en verwijder de oude regel in een latere wijziging. |
| Een route table / routes toevoegen | routetables[], en subnets[].linkedroutetablename |
route table + koppeling |
| Een ander team toegang geven | toevoegen aan adInfo.ProductTeamGroupNames |
PIM-eligibility of actief lidmaatschap voor de nieuwe groep |
| Wijzigen wie een data-plane-rol mag gebruiken (Key Vault, Storage, andere) | adInfo.PIMAssignments |
Roltoewijzingen en PIM-eligibility op subscriptionscope. Zie RBAC en PIM. |
| Een Azure DevOps-repository en service connection toevoegen | azdo |
Nieuwe repo en service connection. Bereid eerst voor: Spoke-integraties. |
| Een GitHub-repository met federated credentials toevoegen | extensions.github |
Nieuwe repo, federated credentials, Actions secrets. Zie Spoke-integraties. |
| Een environment toevoegen aan de GitHub federated credentials | extensions.github.environments |
Nog een federated credential |
| Een service connection omzetten naar federated credentials | azdo.useFederatedCredentials |
De service connection gebruikt workload identity federation. Er wordt geen secret gegenereerd. Lees het plan om te zien wat er wijzigt. |
| Een IPAM-netwerk vergroten of verkleinen | numberOfIpAddresses |
Behandel het als een wijziging van het adresbereik: lees het plan en stop bij elke replace. |
| PIM-gedrag wijzigen | adInfo.PIMGroupConfig.{Readers,Contributors,Owners} |
PIM-instellingen bijgewerkt |
| Tags wijzigen (eigendom van het team) | tags |
tags op subscription en resources bijgewerkt |
| De subscription naar een andere management group verplaatsen | managementGroupId |
management group-koppeling |
| De subscription hernoemen | azureSubscriptionName |
subscription hernoemd |
| Internetroutering via de hub in- of uitschakelen | network[].InternetSecurityEnabled |
hub-connectie bijgewerkt |
| Een regio toevoegen | targetRegions.additional + een network[]-item met die region |
resource group, VNet, LAW, KV en storage per regio |
De eigenaar wijzigen (RBAC-eigenaar)¶
De Entra ID-groepen van de spoke worden aangemaakt met owners uit adInfo.ad_OwnersMembers (e-mailadressen) en
adInfo.ad_OwnersMembersUPN. In modules/ad_groups/main.tf staan owners en members onder
lifecycle { ignore_changes = [owners, members] }. Deze lijsten aanpassen na de eerste deployment heeft geen effect.
Wijzig het eigenaarschap in plaats daarvan door:
- te wijzigen wie er in de teamgroepen in
ProductTeamGroupNameszit (Entra ID), of - een andere teamgroep toe te voegen aan
ProductTeamGroupNamesen de oude te verwijderen, en daarna de pipeline te draaien, of - de eigenaren van de
SG_SPOKE_<wl>_<env>_*-groepen rechtstreeks in Entra ID te wijzigen. Terraform negeert deze, dus de wijziging wordt niet teruggedraaid, maar ze wordt ook niet in Git vastgelegd. Leg haar vast in het wijzigingsticket.
Service principal-gegevens wijzigen¶
De service principal <SPNNamePrefix><wl>-<env> wordt beheerd door het spoke canvas:
- Het secret roteren: het secret staat in de Key Vault van de spoke, tenzij federated credentials zijn geconfigureerd. Het wordt
opnieuw gegenereerd door een
time_rotating-resource (modules/ad_service_principal/main.tf) metrotation_days = SpokeCommon.tenantinfo.SPNSecretrotationPeriod. Het nieuwe secret wordt aangemaakt tijdens de eerste spoke-run nadat de periode is verstreken. Draai de spoke-pipeline dus regelmatig, anders verloopt het secret. - De Azure DevOps service connection omzetten naar workload identity federation: zet
azdo.useFederatedCredentialsoptrue. - Graph-rechten:
adInfo.SPNGraphPermissionswordt gelezen door de Terraform. Het schema definieert dit veld niet, maar staat het toe omdatadInfoextra sleutels accepteert. Bekijk het plan zorgvuldig.
Stappen¶
- Pas de spoke-JSON aan in een branch (zie Veilig een wijziging doorvoeren). Een standaard branchnaam helpt,
bijvoorbeeld
feature/SpokeUpdate-<request id>-<workload short name>-<environment>. Sommige wijzigingen zijn niet mogelijk vanwege beperkingen in Terraform of Azure. Je kunt bijvoorbeeld een subnet dat door virtual machines wordt gebruikt niet wijzigen. - Draai
spokemetspokeGlobingesteld op dat ene bestand. Gebruik bij voorkeur modusApproveModifications, zodat je het plan kunt lezen voordat het wordt toegepast. De referentie-entrybestanden hebbenmode: Applyhard-coded; zie Mode en whatIf beschikbaar maken tijdens runtime. - Lees het plan. Verwacht alleen de wijzigingen uit de tabel hierboven. Stop bij elke
destroy/must be replaceddie je niet bedoeld hebt. Dat geldt ook voor een destroy vanazurerm_management_group_subscription_association(een bekend probleem, zie Bekende problemen). - Keur goed of pas toe.
Controleren¶
Controleer het gewijzigde onderdeel in de Azure portal of Entra ID en vraag het aanvragende team om bevestiging.
Rollback¶
Draai de JSON-wijziging terug en draai spoke opnieuw voor het bestand.