SÅDAN FUNGERER DET
Sæt TerraProvider op i din tenant og pipeline.
Det en ingeniør skal vide, når TerraProvider sættes op: hvordan det logger ind, hvilke tilladelser det beder om, hvad den første plan ser ud som, og hvordan en eksisterende tenant kommer under kode.
- terraprovider/microsoft365wp
- Terraform and OpenTofu
- 10 builds
- version 0.20.2
Din første plan i fire trin
Omtrent det samme som at sætte enhver anden Azure-provider op, fordi login fungerer på samme måde.
Registrer en app i Entra ID.
Single tenant, ingen redirect-URI nødvendig. Notér applikationens (client) ID og katalogets (tenant) ID.Tildel Graph-tilladelser.
Tilføj applikationstilladelserne for de objekter, du vil administrere (se tabellen nedenfor), og giv admin consent.Deklarér provideren.
SætARM_TENANT_IDogARM_CLIENT_ID, samtARM_CLIENT_SECRETtil en første test. Brug OpenID Connect i en pipeline i stedet (se nedenfor).terraform { required_providers { microsoft365wp = { source = "terraprovider/microsoft365wp" } }}provider "microsoft365wp" {}
Plan.
Skriv én ressource, f.eks. en compliancepolitik, og kørterraform planellertofu plan. Der ændres ingenting i tenanten, før du anvender planen.resource "microsoft365wp_device_compliance_policy" "windows_defender" { display_name = "Windows - Defender for Endpoint" windows10 = { device_threat_protection_enabled = true } scheduled_actions_for_rule = [{ scheduled_action_configurations = [{ action_type = "block" grace_period_hours = 6 }] }] assignments = [{ target = { all_licensed_users = {} } }]}
Eksempeldata.
De Graph-tilladelser det beder om
Applikationstilladelser, tildelt med admin consent. Tildel kun dem, der gælder for de objekter, du administrerer. En ressource, der ikke er opført her, angiver sine tilladelser på sin egen dokumentationsside.
| Tilladelse | Hvad den giver adgang til |
|---|---|
| DeviceManagementConfiguration.ReadWrite.All | Intune enhedskonfiguration og politikker |
| DeviceManagementApps.ReadWrite.All | Intune apps |
| DeviceManagementServiceConfig.ReadWrite.All | Intune servicekonfiguration, f.eks. enrollment |
| Policy.ReadWrite.ConditionalAccess | Politikker for Conditional Access |
| Policy.Read.All | Læsning af organisationens politikker |
| Application.ReadWrite.All | Applikationer |
| Directory.ReadWrite.All | Katalogdata |
| Group.ReadWrite.All | Grupper |
| User.ReadWrite.All | Brugernes fulde profiler |
| CloudPC.ReadWrite.All | Windows 365-konfiguration |
Kilde: providerens guide "Configuring a Service Principal for managing EntraID".
De samme login-indstillinger som azuread-provideren
Provideren læser de samme ARM_*-indstillinger som azuread-provideren. Sæt ARM_TENANT_ID og ARM_CLIENT_ID, og vælg derefter én metode.
| Metode | Passer til | Slå til |
|---|---|---|
| OpenID Connect, GitHub Actions | Workflows uden en gemt hemmelighed | ARM_USE_OIDC=true |
| OpenID Connect, Azure DevOps | Pipelines med en serviceforbindelse | ARM_USE_OIDC=trueARM_ADO_PIPELINE_SERVICE_CONNECTION_ID |
| OpenID Connect, enhver udsteder | Andre CI-systemer, der udsteder et ID-token | ARM_USE_OIDC=trueARM_OIDC_TOKEN / ARM_OIDC_TOKEN_FILE_PATH |
| Klientcertifikat | Runners, der har et certifikat | ARM_CLIENT_CERTIFICATE / ARM_CLIENT_CERTIFICATE_PATH |
| Klienthemmelighed | En første test, et lab | ARM_CLIENT_SECRET / ARM_CLIENT_SECRET_FILE_PATH |
| Managed identity | Runners på Azure | ARM_USE_MSI=true |
| AKS workload identity | Runners på Kubernetes i Azure | ARM_USE_AKS_WORKLOAD_IDENTITY=true |
| Azure CLI | Din laptop | slået til som standard; ARM_USE_CLI=false deaktiverer det |
Hver indstilling findes også som et provider-argument (use_oidc, client_certificate_path osv.). Providerens OpenID Connect-guide viser, hvordan Entra ID kan konfigureres til at stole på et GitHub-repository. Kort fortalt: OpenID Connect (GitHub Actions, Azure DevOps, ethvert OIDC-token), klientcertifikat, klienthemmelighed, managed identity, AKS workload identity, Azure CLI.
Fire clouds
Sæt environment eller ARM_ENVIRONMENT. Provideren kommunikerer derefter med det pågældende clouds Microsoft Graph-endpoint: global, US Government L4, US Government L5 (DoD), China.
Miljø
- global (også public)
- Det kommercielle cloud, standardvalget
- usgovernmentl4 (også usgovernment)
- US Government L4
- usgovernmentl5 (også dod)
- US Government L5 (DoD)
- china
- Microsofts cloud i Kina
- Dit eget endpoint
metadata_hostorARM_METADATA_HOSTNAME
Hvad planen overvåger
- Samlinger, du udelader, får tom som standard, så et tilføjet medlem, en udelukkelse eller en app er synlig.
- En ny Conditional Access-politik uden en tilstand oprettes som
enabledForReportingButNotEnforced. - Standardværdien for hver attribut fremgår af ressourcens dokumentationsside, markeret som provider default.
Bagsiden af medaljen: en indstilling, som nogen har slået til og fra igen i en portal, kan dukke op som false i stedet for ikke-sat og vises én gang som en ændring. Én apply løser det.
I portalen: Ingen ændringer siden sidste apply.
microsoft365wp_conditional_access_policy.require_mfa_admins: Refreshing state... [id=2b7f9c3e-8d41-4f6a-b0e2-5c9a1d7e3f80]No changes. Your infrastructure matches the configuration.
resource "microsoft365wp_conditional_access_policy" "require_mfa_admins" { display_name = "Require MFA for admins" state = "enabled" conditions = { users = { include_roles = ["62e90394-69f5-4237-9190-012177145e10"] } applications = { include_applications = ["All"] } } grant_controls = { operator = "OR" built_in_controls = ["mfa"] }}
Eksportér og importér en eksisterende tenant i to faser
Quickstart-repositoryet indeholder en referencekonfiguration med moduler, GitHub Actions-workflows og en PowerShell-eksport. Eksporten arbejder i to faser, fordi politikker refererer til grupper og filtre.
Eksportér grupper, filtre og notifikationsskabeloner.
De skrives ind i quickstartets moduler med en mapping-fil for hver type. Mail-aktiverede grupper udelades, medmindre du eksplicit beder om dem.Importér dem.
Værktøjet kalder Terraform eller OpenTofu for at importere hvert eksporteret objekt til state.Eksportér compliance- og konfigurationspolitikker.
Indstillingskatalog og endpoint security-politikker tæller som konfigurationspolitikker. Hver eksport gemmer også et råt JSON-dump af det, Graph returnerede.Importér dem.
Samme værktøj, anden fase.Plan.
Planen viser, hvad der stadig afviger. Ikke alle attributter kan eksporteres, så forvent en kortere oprydning, inden den første rene plan er opnået.
Ét objekt ad gangen
For alt, hvad eksporten ikke dækker, skriver et lille script en Terraform-fil for ét objekt af en hvilken som helst ressourcetype ud fra dets id. Det bruger Terraforms egen konfigurationsgenerering, så filen indeholder præcis det, provideren selv læser fra tenanten.
Quickstart på GitHubÉn ressource rummer appen, dens pakke og dens tildelinger
microsoft365wp_mobile_app dækker 21 app-typer. For .intunewin, MSI, APPX/MSIX, DMG, PKG pakker krypterer provideren filen og uploader den til Intune, og det sker kun igen, når source_sha256 ændres. Tildelinger ligger i samme ressource: alle enheder, alle licenserede brugere, en gruppe eller en udelukkelsesgruppe, hver med et include- eller exclude-filter.locals { agent_package = "${path.module}/packages/contoso-agent-4.2.1.intunewin" agent_meta = provider::microsoft365wp::parse_intunewin_metadata(local.agent_package)}resource "microsoft365wp_mobile_app" "contoso_agent" { display_name = "Contoso Agent" publisher = "Contoso" win32_lob = { file_name = local.agent_meta.file_name setup_file_path = local.agent_meta.setup_file install_command_line = "setup.exe /quiet" uninstall_command_line = "setup.exe /uninstall /quiet" detection_rules = [{ filesystem = { detection_type = "exists" path = "C:\\Program Files\\Contoso\\Agent" file_or_folder_name = "agent.exe" } }] source_file = local.agent_package source_sha256 = filesha256(local.agent_package) } assignments = [{ target = { group = { group_id = "3d9b2f61-7a4e-4c18-9e05-6f2a8b1c4d93" } } settings = { win32_lob = {} } }]}
microsoft365wp_mobile_app.contoso_agent: Refreshing state... [id=5e0c8a17-2d94-4b6f-a3e1-9c7d0f2b8a46]No changes. Your infrastructure matches the configuration.
# microsoft365wp_mobile_app.contoso_agent will be updated in-place ~ resource "microsoft365wp_mobile_app" "contoso_agent" { ~ win32_lob = { ~ source_file = "./packages/contoso-agent-4.2.1.intunewin" -> "./packages/contoso-agent-4.3.0.intunewin" ~ source_sha256 = "9f2c41d0…" -> "b71e05aa…" # (6 unchanged attributes hidden) } # (4 unchanged attributes hidden) }Plan: 0 to add, 1 to change, 0 to destroy.
Eksempeldata.
Windows
Win32 (.intunewin), MSI, APPX/MSIX, Microsoft Store (ny, via WinGet), Microsoft Store (ældre), Microsoft Edge, Microsoft 365 Apps, weblinks.
macOS
DMG, PKG, Microsoft Edge, Microsoft Defender, Microsoft 365 Apps, webklip.
iOS og iPadOS
App Store-apps, administrerede iOS Store-apps, webklip.
Android
Google Play Store-apps, administrerede Google Play-apps, administrerede Android Store-apps.
Enhver platform
Weblinks.
Flere tenants fra ét repository
tenant_id, skriver baseline som et modul og kalder det én gang per tenant. Hver blok logger ind for sig selv, så hver tenant kan have sit eget service principal med sine egne tilladelser.- Forskelle mellem tenants er modulvariabler, der er synlige i gennemgangen.
- En ny tenant er én provider-blok, ét modulkald og én plan.
provider "microsoft365wp" { alias = "contoso" tenant_id = "8a1f3c2e-5b7d-4e90-a6c4-2d9e7f1b0c35"}provider "microsoft365wp" { alias = "fabrikam" tenant_id = "e4c27b91-0d3a-4f86-b5e2-7a1c9d0f6b48"}module "baseline_contoso" { source = "./baseline" providers = { microsoft365wp = microsoft365wp.contoso }}module "baseline_fabrikam" { source = "./baseline" providers = { microsoft365wp = microsoft365wp.fabrikam } allow_byod = true}
Eksempeldata.
Sådan håndterer det Graph-throttling
Microsoft Graph begrænser, hvor mange forespørgsler en klient må sende, og en plan over en stor tenant sender mange. Provideren venter og forsøger igen på egen hånd.
Genforsøg
- Genforsøg pr. forespørgsel
- op til 10
- Ventetid mellem genforsøg
- 3 til 60 sekunder
- En Retry-After på nul
- Forlænges til backoff-intervallet, fordi Graph ofte svarer sådan, og et øjeblikkeligt genforsøg sjældent hjælper
Start med quickstart.
Klon det, peg det mod en test-tenant, og kør en plan. Community Edition er gratis for organisationer med op til 99 brugere.