Ga naar inhoud

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 workloadShortName of environment van 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 ProductTeamGroupNames zit (Entra ID), of
  • een andere teamgroep toe te voegen aan ProductTeamGroupNames en 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) met rotation_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.useFederatedCredentials op true.
  • Graph-rechten: adInfo.SPNGraphPermissions wordt gelezen door de Terraform. Het schema definieert dit veld niet, maar staat het toe omdat adInfo extra sleutels accepteert. Bekijk het plan zorgvuldig.

Stappen

  1. 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.
  2. Draai spoke met spokeGlob ingesteld op dat ene bestand. Gebruik bij voorkeur modus ApproveModifications, zodat je het plan kunt lezen voordat het wordt toegepast. De referentie-entrybestanden hebben mode: Apply hard-coded; zie Mode en whatIf beschikbaar maken tijdens runtime.
  3. Lees het plan. Verwacht alleen de wijzigingen uit de tabel hierboven. Stop bij elke destroy / must be replaced die je niet bedoeld hebt. Dat geldt ook voor een destroy van azurerm_management_group_subscription_association (een bekend probleem, zie Bekende problemen).
  4. 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.