Azure DevOps + Entra tenant move: interní migration playbook
[!IMPORTANT] Původní zadání uživatele: Move Azure DevOps connected to Entra to another tenant and Entra. Zaměřit se na remapping users, groups, approvals, permissions a repair scripts/runbook. Oddělit supportované vs. nesupportované kroky, přidat migration playbook, repair checklist a validační smoke testy, zachovat oficiální zdroje a community zdroje jasně označit jako neoficiální.
Datum publikace: 2026-06-23
Viditelnost: interní Hermes WWW
Výstup navazuje na researcher/analyst tasky t_febef00e, t_68dfda16, t_f8066492 a syntézu t_551d512d.
1. Executive summary
Doporučený default pro scénář „stávající Azure DevOps organizace je připojená na Microsoft Entra tenant a má se přesunout na jiný Entra tenant“ je oficiální Azure DevOps Switch directory pro existující organizaci, ne zakládání nové Azure DevOps organizace.
Důvod: Microsoft dokumentuje změnu Azure DevOps organization connection to a different Microsoft Entra ID a uvádí, že projektové zdroje zůstávají zachované. To typicky znamená zachování organizace, projektů, work items, repos, pipelines, artifacts a historie. Neznamená to ale, že se automaticky a bezpečně přemapují všechny identitní a tenant-specific vazby.
Největší riziko je identitní vrstva:
- Entra groups přidané do Azure DevOps se nepřenášejí. Jejich access, licensing, permissions a membership vazby je nutné znovu vytvořit v cílovém tenantovi a znovu napojit do Azure DevOps.
- Uživatelé a oprávnění nejdou bezpečně mapovat podle displayName ani pouze podle UPN/e-mailu. UPN/mail je kandidátní signál, ne immutable identita.
- Service connections, Key Vault variable groups, pipelines, approvals/checks, branch policies, feeds, PAT/OAuth automations a self-hosted agents vyžadují samostatný repair a smoke test.
- Azure subscription tenant transfer je jiná operace než Azure DevOps Entra directory switch. Má vlastní dopady na RBAC a resource access.
Produkční move nedělat bez sandboxu, read-only inventory snapshotu, identity mapy, group mapy, Microsoft Support plánu pro větší/komplexní organizace a předem připraveného P0 repair runbooku.
2. Co přesně se migruje
V praxi se často míchají tři různé věci. Je nutné je oddělit.
A. Azure DevOps organization Entra directory switch
Cíl: existující Azure DevOps organizace se přepojí ze source Entra tenant na target Entra tenant.
Typicky zachovává:
- Azure DevOps organization URL,
- projekty,
- work items,
- Git repos,
- pipeline definice,
- Azure Artifacts feeds,
- většinu Azure DevOps metadat a historie.
Vyžaduje repair:
- users a disconnected users,
- Entra groups,
- group-based access/licensing,
- permissions/ACLs navázané na staré descriptors,
- approvals/checks/reviewers,
- service connections,
- Key Vault variable groups,
- PAT/OAuth/service principal/managed identity vazby.
B. Azure subscription tenant transfer
Cíl: Azure subscription/resource ownership se přesune do jiného Entra tenant.
Toto není totéž jako Azure DevOps directory switch. Dopady:
- Azure RBAC role assignments se při tenant transferu typicky musí znovu vytvořit,
- managed identities, Key Vault access, ACR, Azure Policy, PIM a další vazby mohou potřebovat repair,
- service connections v Azure DevOps musí odpovídat novému tenant/subscription modelu.
Pokud se dělá zároveň s Azure DevOps switchem, je to mnohem rizikovější cutover a musí mít samostatný rollback a smoke test plán.
C. Nová paralelní Azure DevOps organizace
Cíl: založit novou Azure DevOps org v target tenantovi a přesouvat obsah.
Použít jen pokud se zároveň mění operating model nebo governance a akceptuje se nižší věrnost migrace. Microsoft Azure DevOps Data Migration Tool není určený pro Azure DevOps Services org-to-org project migration. Git mirror/import zachová repo historii, ale není full-fidelity migrace Boards, Pipelines, Policies, Artifacts, permissions ani audit historie.
3. Podporované vs. workaround vs. nepodporované
Oficiálně podporované / doložené Microsoft dokumentací
- Azure DevOps:
Organization settings→Microsoft Entra ID→Switch directory. - Operátor musí mít odpovídající práva: typicky Project Collection Administrator / owner a členství ve source/target tenant podle documented flow.
- Microsoft uvádí, že project resources remain unaffected při změně directory.
- Disconnected users lze řešit přes Resolve flow; pro organizace nad 100 users Microsoft doporučuje kontaktovat Support.
- Destination users se podle documented flow nemají přidávat do Azure DevOps org před switchem.
- Entra groups přidané do Azure DevOps org se nepřenášejí; access/licensing přes tyto skupiny je nutné znovu udělit.
- Billing subscription má být ve stejném Entra ID jako Azure DevOps org; billing lze změnit.
- Azure subscription tenant transfer je samostatně dokumentovaný proces.
- Azure DevOps service connections lze spravovat/recreate/update/convert; Microsoft preferuje workload identity federation před secrets.
- Azure DevOps Graph, IMS, Security REST API a Azure DevOps CLI lze použít pro inventuru users/groups/memberships, ACLs, policies a endpointů.
Praktické repair/workaround kroky
Tyto kroky jsou v enterprise realitě často nutné, ale nejsou „jedno tlačítko“:
- bulk identity mapping mimo UI Resolve,
- export
descriptor,storageKey,originId,principalName,mailAddress,domain,tenantId, access level, - rekonstrukce Entra groups v target tenantovi,
- znovupřidání target Entra groups do Azure DevOps groups,
- reaplikace security namespace ACLs na nové descriptors,
- reaplikace branch required reviewers, approvals/checks, environment approvals, feed roles, variable group permissions a pipeline authorizations,
- recreate/update ARM service connections, app registrations, federated credentials, Key Vault RBAC/access policies a secrets,
- scan YAML/classic pipeline definic na staré tenant IDs, service connection IDs/names, issuer URLs, client IDs/object IDs a subscription IDs,
- oprava current identity fields u otevřených work items, pokud je to business nutné.
Nepodporované / nedoporučené / nutné ověřit v sandboxu
- Brát Azure DevOps Switch directory jako full-fidelity identitní migraci bez repair vrstvy.
- Spoléhat na displayName nebo samotný e-mail jako bezpečné mapovací pravidlo.
- Hromadně přepisovat historická audit pole work items jen proto, aby „vypadala čistě“.
- Považovat rollback zpět na source tenant za garantovaný one-click undo.
- Mazat source tenant, source groups, app registrations, custom domains, secrets nebo billing vazby před stabilizací.
- Použít Git import/mirror jako náhradu za full Azure DevOps org/project migration.
- Přesunout zároveň Azure DevOps org i Azure subscriptions bez samostatného testu RBAC/resource dopadů.
4. Identitní model a remapping pravidla
User mapping
Cílový výstup před cutoverem: identity-map.csv nebo identity-map.json.
Doporučené sloupce:
| Pole | Popis |
|---|---|
| oldAdoDescriptor | Azure DevOps Graph descriptor ve source stavu |
| oldStorageKey / VSID | stabilnější ADO identifikátor tam, kde je dostupný |
| oldOrigin / oldOriginId | původ identity a source Entra objectId/MSA vazba |
| oldPrincipalName | původní UPN/login |
| oldMailAddress | e-mail jako kandidátní signál |
| oldTenantId | source tenant |
| newEntraObjectId | target user objectId |
| newPrincipalName | target UPN/login |
| newMailAddress | target mail/proxy |
| mappingStatus | confirmed / conflict / missing / exclude |
| ownerApproval | kdo mapping schválil |
Pravidla:
- Nemapovat podle
displayName. - UPN/mail použít jen jako kandidátní signál.
- Preferovat kombinaci: old Entra objectId, old UPN/mail/proxyAddresses, ADO descriptor/storageKey/originId, new Entra objectId, new UPN/mail/proxyAddresses, userType.
- Konflikty řešit ručně: duplicate mail, změněná doména, guest/member mismatch, MSA vs work/school account, chybějící target account.
- Kritické role potvrdit ručně: PCA/admin, release approvers, endpoint admins, build/release admins, feed owners, environment admins.
Group mapping
Cílový výstup: group-map.csv nebo group-map.json.
Doporučené sloupce:
| Pole | Popis |
|---|---|
| oldEntraGroupObjectId | source group objectId |
| oldDisplayName | původní group name |
| oldMembersHash | hash membership snapshotu |
| targetEntraGroupObjectId | target group objectId |
| targetDisplayName | cílová group name |
| targetOwners | owners v target tenantovi |
| intendedAdoGroup | Azure DevOps group, kam se má přidat |
| intendedAccessLevel | Basic/Stakeholder/VS/subscription rule |
| permissionsScope | org/project/repo/environment/feed |
| repairStatus | planned/applied/validated |
Důležité: Entra groups nepovažovat za přenositelný objekt. Počítat s jejich rekonstrukcí a explicitním znovunapojením do Azure DevOps.
Service principal / managed identity mapping
Cílový výstup: service-principal-map.csv nebo service-principal-map.json.
Doporučené sloupce:
| Pole | Popis |
|---|---|
| oldClientId / appId | původní application clientId |
| oldServicePrincipalObjectId | source SP objectId |
| oldTenantId | source tenant |
| targetClientId / appId | target app/SP/MI |
| targetServicePrincipalObjectId | target SP objectId |
| authMode | secret / cert / workload identity federation / managed identity |
| adoServiceConnectionId | Azure DevOps endpoint id |
| azureScope | subscription/RG/resource scope |
| rbacStatus | missing/applied/validated |
| smokeTest | passed/failed/not-run |
5. Phased migration playbook
Fáze 0 — Governance a rozhodovací brána
Výstupy:
- rozhodnutí, zda se dělá jen Azure DevOps Entra switch, nebo i Azure subscription transfer,
- seznam orgs/projects, owners, business criticality a change freeze oken,
- rozhodnutí tenant move vs. parallel org,
- Microsoft Support ticket/plán pro org >100 users, custom domains nebo komplexní identity mapping,
- rollback posture a komunikační plán.
No-go:
- nejasné admin role,
- nejasný scope Azure subscriptions,
- žádný owner pro identity conflicts,
- žádný P0 repair owner.
Fáze 1 — Read-only inventory snapshot
Vytvořit neměnný baseline před změnou.
Inventarizovat:
- users: descriptors, storage keys, origin/originId, UPN, mail, tenant/domain, access levels,
- Azure DevOps groups a Entra-backed groups,
- direct i transitive memberships,
- group rules, licensing, Visual Studio subscription vazby,
- security namespaces a ACLs,
- project/repo/branch permissions,
- branch policies, required reviewers, build validations,
- environments, approvals/checks, protected resources,
- variable groups včetně Key Vault-backed groups,
- service endpoints/service connections,
- build/classic release definitions a YAML,
- feeds a feed permissions,
- agent pools/queues,
- service hooks/webhooks,
- current identity fields u otevřených work items,
- billing subscription,
- PAT/OAuth/API automations.
Exit criteria:
- snapshot je uložený a verzovaný,
- old tenant IDs / group IDs / appIds / objectIds / subscription IDs jsou známé,
- impacted P0/P1/P2 report je hotový.
Fáze 2 — Pre-migration cleanup
Cíl: snížit počet problémů přenášených do cutoveru.
Kroky:
- odstranit nepoužívané users, service accounts a memberships,
- vyřešit duplicate/ambiguous identities,
- nepřidávat destination users do ADO org před switchem, pokud jdete documented flow,
- připravit target Entra groups, app registrations/SPs/managed identities,
- zmrazit P0 release/deploy pipelines,
- převést vhodné service connections na workload identity federation,
- připravit Key Vault RBAC/access policy repair,
- připravit uživatelskou komunikaci: sign-out/sign-in, Git Credential Manager tenant cache, SSH keys, PAT rotace, VS subscription alternate account.
Exit criteria:
- P0 identity mapping je confirmed,
- P0 service connection repair má ownera a smoke test,
- Support dry-run/plán je připravený.
Fáze 3 — Identity mapping approval
Cíl: schválit identity-map, group-map, service-principal-map.
No-go:
- nevyřešená PCA/admin identity,
- chybějící release approvers nebo endpoint admins,
- chybějící target Entra groups pro P0 access model,
- nejasné service principal/managed identity ownership.
Fáze 4 — Cutover
Doporučený průběh:
- Aktivovat freeze pro P0 pipelines/deployments.
- Ověřit operátorský přístup: ADO PCA + target tenant membership.
- Provést Microsoft documented Switch directory.
- Odhlásit/přihlásit operátorské účty v čisté/private session.
- Použít Resolve disconnected users / Support-assisted mapping.
- Ověřit, že PCA/admin přístup stále funguje.
- Znovu vytvořit/přidat target Entra groups do ADO podle group-map.
- Regrantovat ADO group memberships, access levels, group rules/licensing.
- Přepnout/ověřit billing subscription, pokud je ve scope.
Poznámka: cutover není konec migrace. Je to začátek repair fáze.
Fáze 5 — P0/P1/P2 repair
P0 jako první:
- ARM service connections,
- Key Vault-backed variable groups,
- P0 YAML/classic pipelines,
- service principals/managed identities,
- admin/PCA a break-glass access,
- production deployment path.
P1:
- environment approvals/checks,
- branch required reviewers,
- build validation policies,
- agent queues/pools,
- feed permissions,
- service hooks.
P2:
- stale identity cleanup,
- old GUID/tenant URL audit,
- documentation/naming/ownership,
- PAT/OAuth decommission nebo migrace na Entra auth/SP/MI.
Fáze 6 — Stabilizace a acceptance
Stabilizace končí až když:
- všechny P0 smoke testy prošly,
- P1 governance kontroly jsou validované,
- zbylé old tenant/objectId/GUID hity jsou klasifikované jako false positive / accepted / fix required,
- source tenant objekty jsou stále zachované pro rollback posture,
- je jasný seznam deferred P2 cleanup úkolů.
6. Repair runbook a skriptovací kostra
6.1 Inventory export — Azure DevOps Graph/IMS
Oficiální API endpointy:
- Graph users/groups/memberships:
https://vssps.dev.azure.com/{org}/_apis/graph/... - IMS identities:
https://dev.azure.com/{org}/_apis/identities?... - Security ACLs:
https://dev.azure.com/{org}/_apis/accesscontrollists/{securityNamespaceId}
Kostra Bash/curl:
#!/usr/bin/env bash
set -euo pipefail
org="${ADO_ORG:?set ADO_ORG}"
out="snapshot-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$out"
# Předpoklad: az devops/az account login nebo PAT v env podle interního standardu.
# Token handling nenechávat v historii shellu.
# Ukázka záměrně nepředepisuje konkrétní secret management.
auth_header="<AUTH_HEADER>"
curl -fsS \
-H "$auth_header" \
"https://vssps.dev.azure.com/${org}/_apis/graph/users?api-version=7.1-preview.1" \
> "$out/graph-users.json"
curl -fsS \
-H "$auth_header" \
"https://vssps.dev.azure.com/${org}/_apis/graph/groups?api-version=7.1-preview.1" \
> "$out/graph-groups.json"
curl -fsS \
-H "$auth_header" \
"https://dev.azure.com/${org}/_apis/identities?api-version=7.1-preview.1" \
> "$out/ims-identities.json"
6.2 Service connections inventory
#!/usr/bin/env bash
set -euo pipefail
org="${ADO_ORG:?}"
project="${ADO_PROJECT:?}"
out="${OUT_DIR:-snapshot}"
mkdir -p "$out/service-endpoints"
auth_header="<AUTH_HEADER>"
curl -fsS \
-H "$auth_header" \
"https://dev.azure.com/${org}/${project}/_apis/serviceendpoint/endpoints?api-version=7.1" \
> "$out/service-endpoints/${project}.json"
jq -r '.value[] | [.id,.name,.type,.authorization.scheme, (.data.subscriptionId // ""), (.authorization.parameters.tenantid // .data.tenantid // "")] | @csv' \
"$out/service-endpoints/${project}.json" \
> "$out/service-endpoints/${project}.csv"
Co hledat:
- old
tenantId, - old
subscriptionId, - old
servicePrincipalId/clientId, - secret/cert auth místo WIF,
isReady=false,- endpoint IDs hardcodované v YAML/classic definitions.
6.3 Pipeline/YAML scan
#!/usr/bin/env bash
set -euo pipefail
repo_root="${REPO_ROOT:?}"
old_tenant="${OLD_TENANT_ID:?}"
old_subscription="${OLD_SUBSCRIPTION_ID:-}"
old_client="${OLD_CLIENT_ID:-}"
rg -n --hidden --glob '!**/.git/**' \
-e "$old_tenant" \
${old_subscription:+-e "$old_subscription"} \
${old_client:+-e "$old_client"} \
-e 'login.microsoftonline.com/' \
-e 'serviceConnection|azureSubscription|connectedServiceName|environment:' \
"$repo_root" \
> tenant-reference-scan.txt || true
Klasifikace hitů:
fix required— aktivní pipeline/runtime reference,accepted— dokumentovaná historická reference,false positive— string bez dopadu,deferred— P2 cleanup.
6.4 ACL repair princip
Bezpečný princip:
- Exportovat security namespaces a ACLs před switchem.
- Přeložit old descriptor → new descriptor přes schválenou identity-map/group-map.
- Nikdy automaticky neměnit explicit
Denybez review. - Reaplikovat pouze scope/tokeny, které jsou v approved repair listu.
- Po každé dávce spustit access smoke test.
Pseudo workflow:
for each acl in exported_acls:
for each ace in acl.acesDictionary:
old_descriptor = ace.descriptor
new_descriptor = identity_map.get(old_descriptor) or group_map.get(old_descriptor)
if not new_descriptor:
record orphan
continue
if ace.deny != 0:
require manual approval
emit patch for token/securityNamespaceId/new_descriptor/allow/deny
6.5 Approvals/checks/policies repair
Opravit a validovat:
- branch required reviewers,
- build validation policies,
- status checks,
- environment approvals,
- protected resource checks,
- variable group pipeline permissions,
- secure files approvals,
- feed roles.
Smoke test:
- založit test PR,
- ověřit, že required reviewer je z target tenant/access modelu,
- queue build validation,
- spustit non-prod deployment do environmentu s approvalem,
- ověřit, že approver vidí a schválí approval novou identitou.
7. Repair checklist
P0 — obnovit provoz a bezpečný deployment
- [ ] PCA/admin a break-glass účty fungují v target tenant contextu.
- [ ] Žádní P0 users nejsou disconnected bez rozhodnutí.
- [ ] Target Entra groups jsou přidané do správných ADO groups.
- [ ] P0 service connections jsou recreated/updated/converted.
- [ ] WIF issuer/subject/audience odpovídají target tenantovi.
- [ ] Azure RBAC pro SP/MI je reaplikované a validované.
- [ ] Key Vault-backed variable groups čtou canary secret.
- [ ] Masked secrets jsou re-seeded tam, kde je nutné.
- [ ] P0 pipeline smoke běží bez produkčního side effectu.
- [ ] Billing subscription je ve správném Entra tenantovi, pokud je ve scope.
P1 — governance a runtime kontroly
- [ ] Environment approvals/checks mají nové approvery/groups.
- [ ] Branch required reviewers jsou přemapované.
- [ ] Build validations/status checks fungují.
- [ ] Agent queue/pool permissions jsou validované.
- [ ] Self-hosted agent job běží a jeho underlying identity má Azure/Key Vault/ACR access.
- [ ] Feed restore/publish funguje pro každý kritický feed.
- [ ] Service hooks mají rotované secrets a test event dorazí.
- [ ] PAT/OAuth automations jsou otestované nebo rotované/migrované.
P2 — cleanup a dlouhodobá stabilizace
- [ ] Old tenantId/objectId/clientId/subscriptionId scan nemá neklasifikované hity.
- [ ] Stale identities/ACLs jsou vyčištěné.
- [ ] Service connections a variable groups mají owner/naming standard.
- [ ] Legacy OAuth/PAT flows mají plán nahrazení Entra auth/SP/MI.
- [ ] Dokumentace nového access modelu je uložená.
- [ ] Source tenant objekty se nemažou před stabilizačním sign-offem.
8. Validační smoke testy
Identity/access
- [ ] PCA/admin přístup funguje po novém přihlášení.
- [ ] Běžný developer se přihlásí přes target tenant a vidí správné projekty.
- [ ] Uživatel bez přístupu projekt nevidí.
- [ ] Explicit
DenyACE nezpůsobuje nečekaný lockout. - [ ] Group-based licensing/access rules jsou obnovené.
Repos/PR
- [ ] Clone/fetch přes HTTPS.
- [ ] Push do test branch.
- [ ] SSH přístup po cleanup/regeneraci klíčů.
- [ ] Test PR spustí required reviewers a build validation.
- [ ] Required reviewer groups odpovídají target groups.
Pipelines/service connections
- [ ] Každá P0 service connection má UI/API verify nebo smoke pipeline.
- [ ] Smoke job spustí
az account showproti správnému tenant/subscription. - [ ] Key Vault canary secret je čitelný bez logování hodnoty.
- [ ] YAML/classic definitions scan nemá neakceptované oldTenantId hits.
- [ ] Classic release definice ověřené přes
vsrm.dev.azure.comendpoint.
Environments/checks/agents
- [ ] Deployment do non-prod environmentu projde approvals/checks.
- [ ] Approver identity list je z target tenant/access modelu.
- [ ] Microsoft-hosted agent job běží.
- [ ] Self-hosted agent job běží.
- [ ] Self-hosted agent identity má přístup k Azure/Key Vault/ACR.
Boards/artifacts/integrace
- [ ] Otevřené work items s current identity fields jsou validní.
- [ ] Historická identity display/audit odchylka je zdokumentovaná jako accepted behavior.
- [ ] Package restore/publish funguje pro kritické feeds.
- [ ] Service hooks doručí test event a receiver ho zaloguje.
- [ ] PAT/OAuth automations fungují po testu nebo jsou rotované/migrované.
9. Produkční go/no-go
No-go, dokud platí něco z toho:
- chybí kompletní read-only inventory snapshot,
- chybí schválená identity-map/group-map pro P0/P1 role,
- není Support plán pro >100 users, custom domains nebo SSH cleanup,
- target tenant nemá admin účty, Entra groups, SP/MI identities a potřebná práva,
- P0 service connections nemají repair ownera, credentials/WIF plán a smoke test,
- secrets/certs pro kritické pipelines nejsou dostupné pro re-seeding,
- není jasný dopad Azure subscription transferu, pokud se dělá zároveň,
- není připravená billing subscription ve stejném Entra ID, pokud je relevantní,
- není komunikační plán pro uživatele,
- není definovaný acceptance test a stop-the-line kritérium.
10. Rollback posture
Rollback neplánovat jako „one-click undo“. Bezpečný rollback posture znamená:
- source tenant, custom domains, source groups, app registrations, SPs, secrets a billing vazby zůstávají zachované,
- existuje kompletní pre-change inventory export,
- break-glass účty jsou ověřené ve source i target tenantovi,
- případný switch zpět je předem konzultovaný se Supportem,
- produkční deploye mají fallback: freeze, ruční approval path, dočasný service connection recreate, rollback secrets,
- každý repair krok je logovaný, aby bylo možné odlišit cutover dopad od následných změn.
Rollback blockery:
- smazaný source tenant/custom domain/source groups,
- ztracené secrets/certs,
- nezdokumentované ACL/group changes po cutoveru,
- současný Azure subscription transfer bez samostatného rollback plánu.
11. Oficiální zdroje
Microsoft Learn / oficiální dokumentace:
- Change your organization connection to a different Microsoft Entra ID: https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/change-azure-ad-connection?view=azure-devops
- Connect your organization to Microsoft Entra ID: https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/connect-organization-to-azure-ad?view=azure-devops
- Disconnect your organization from Microsoft Entra ID: https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/disconnect-organization-from-azure-ad?view=azure-devops
- User and permissions management FAQs: https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/faq-user-and-permissions-management?view=azure-devops
- Azure DevOps migration overview: https://learn.microsoft.com/en-us/azure/devops/migrate/migration-overview?view=azure-devops
- Transfer an Azure subscription to a different Microsoft Entra directory: https://learn.microsoft.com/en-us/azure/role-based-access-control/transfer-subscription
- Manage Azure DevOps billing: https://learn.microsoft.com/en-us/azure/devops/organizations/billing/set-up-billing-for-your-organization-vs?view=azure-devops
- Azure DevOps Graph REST API: https://learn.microsoft.com/en-us/rest/api/azure/devops/graph/?view=azure-devops-rest-7.1
- Azure DevOps Security REST API: https://learn.microsoft.com/en-us/rest/api/azure/devops/security/?view=azure-devops-rest-7.1
- Service connections: https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints
- ARM service connections: https://learn.microsoft.com/en-us/azure/devops/pipelines/library/connect-to-azure
- Workload identity federation service connection: https://learn.microsoft.com/en-us/azure/devops/pipelines/release/configure-workload-identity
- Convert service connections to Microsoft Entra issuer: https://learn.microsoft.com/en-us/azure/devops/pipelines/release/convert-service-connections
- Approvals and checks: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/approvals?view=azure-devops
- Variable groups: https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops
- Azure Artifacts feed permissions: https://learn.microsoft.com/en-us/azure/devops/artifacts/feeds/feed-permissions?view=azure-devops
- Service principals and managed identities in Azure DevOps: https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/service-principal-managed-identity?view=azure-devops
- Personal access tokens: https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops
12. Neoficiální/community zdroje
V tomto finálním interním markdownu nejsou použité žádné konkrétní community návody jako autoritativní zdroj. Pokud se v implementaci použijí blogy, GitHub gisty nebo StackOverflow odpovědi pro skripty, musí být označené jako neoficiální/community a ověřené v sandboxu proti oficiálním API a dokumentaci.
13. Doporučený minimální balíček artefaktů před produkcí
inventory/— read-only exporty users, groups, memberships, ACLs, endpoints, policies, variable groups, feeds, hooks, builds/releases.identity-map.csv— schválené user mappingy.group-map.csv— rekonstrukce Entra groups a ADO placement.service-principal-map.csv— SP/MI/service connection mapping.repair-plan.md— P0/P1/P2 repair pořadí, owners, smoke tests.go-no-go.md— podepsaný checklist a blockery.rollback-posture.md— co zůstává zachované a jak se postupuje při stop-the-line.validation-results.md— výsledky smoke testů po cutoveru.