SLIK FUNGERER DET
Sett opp TerraProvider i din tenant og pipeline.
Det en engineer trenger å vite når de setter opp TerraProvider: hvordan innlogging fungerer, hvilke tillatelser som kreves, hva den første planen ser ut som og hvordan en eksisterende tenant kommer under kode.
- terraprovider/microsoft365wp
- Terraform and OpenTofu
- 10 builds
- versjon 0.20.2
Din første plan i fire steg
Omtrent like lang tid som å sette opp en annen Azure-provider, fordi innlogging fungerer på samme måte.
Registrer en app i Entra ID.
Single tenant, ingen redirect-URI nødvendig. Noter applikasjons-ID (client ID) og katalog-ID (tenant ID).Gi Graph-tillatelser.
Legg til applikasjonstillatelsene for objektene du vil administrere (se tabellen nedenfor) og gi admin consent.Deklarer provideren.
SettARM_TENANT_IDogARM_CLIENT_ID, samtARM_CLIENT_SECRETfor en første test. I en pipeline bruker du OpenID Connect i stedet (se nedenfor).terraform { required_providers { microsoft365wp = { source = "terraprovider/microsoft365wp" } }}provider "microsoft365wp" {}
Plan.
Skriv én ressurs, for eksempel en compliance-policy, og kjørterraform planellertofu plan. Ingenting endres i tenanten før du kjører apply.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.
Graph-tillatelsene provideren ber om
Applikasjonstillatelser, gitt med admin consent. Gi kun de tillatelsene som gjelder objektene du administrerer; en ressurs som ikke er listet her oppgir sine tillatelser på sin egen dokumentasjonsside.
| Tillatelse | Hva den gir tilgang til |
|---|---|
| DeviceManagementConfiguration.ReadWrite.All | Intune-enhetskonfigurasjon og -policyer |
| DeviceManagementApps.ReadWrite.All | Intune-apper |
| DeviceManagementServiceConfig.ReadWrite.All | Intune-tjenestekonfigurasjon, som registrering |
| Policy.ReadWrite.ConditionalAccess | Conditional Access-policyer |
| Policy.Read.All | Lesing av organisasjonens policyer |
| Application.ReadWrite.All | Applikasjoner |
| Directory.ReadWrite.All | Katalogdata |
| Group.ReadWrite.All | Grupper |
| User.ReadWrite.All | Brukernes fulle profiler |
| CloudPC.ReadWrite.All | Windows 365-konfigurasjon |
Kilde: providerens veiledning «Configuring a Service Principal for managing EntraID».
Samme innloggingsinnstillinger som azuread-provideren
Provideren leser de samme ARM_*-innstillingene som azuread-provideren. Sett ARM_TENANT_ID og ARM_CLIENT_ID, og velg deretter én metode.
| Metode | Passer til | Slå det på |
|---|---|---|
| OpenID Connect, GitHub Actions | Workflows uten lagret hemmelighet | ARM_USE_OIDC=true |
| OpenID Connect, Azure DevOps | Pipelines med en service connection | ARM_USE_OIDC=trueARM_ADO_PIPELINE_SERVICE_CONNECTION_ID |
| OpenID Connect, any issuer | Andre CI-systemer som utsteder et ID-token | ARM_USE_OIDC=trueARM_OIDC_TOKEN / ARM_OIDC_TOKEN_FILE_PATH |
| Client certificate | Runners som har et sertifikat | ARM_CLIENT_CERTIFICATE / ARM_CLIENT_CERTIFICATE_PATH |
| Client secret | En første test, et lab-miljø | 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 egen laptop | på som standard; ARM_USE_CLI=false slår det av |
Hver innstilling finnes også som et provider-argument (use_oidc, client_certificate_path og så videre). Providerens OpenID Connect-veiledning viser hvordan du lar Entra ID stole på et GitHub-repositorium. Kort oppsummert: OpenID Connect (GitHub Actions, Azure DevOps, ethvert OIDC-token), client certificate, client secret, managed identity, AKS workload identity, Azure CLI.
Fire clouds
Sett environment eller ARM_ENVIRONMENT. Provideren kommuniserer deretter med det aktuelle cloud-endepunktet for Microsoft Graph: global, US Government L4, US Government L5 (DoD), China.
Environment
- global (also public)
- Den kommersielle skyen, standardvalget
- usgovernmentl4 (also usgovernment)
- US Government L4
- usgovernmentl5 (also dod)
- US Government L5 (DoD)
- china
- Microsofts cloud i Kina
- Ditt eget endepunkt
metadata_hostorARM_METADATA_HOSTNAME
Hva planen overvåker
- Samlinger du utelater får standardverdien tom, slik at et lagt-til medlem, en ekskludering eller en app blir synlig.
- En ny Conditional Access-policy uten en tilstand opprettes som
enabledForReportingButNotEnforced. - Standardverdien for hvert attributt står på ressursens dokumentasjonsside, merket som provider default.
Baksiden: en innstilling noen skrudde på og av igjen i en portal kan komme tilbake som false i stedet for å være utenfor tilstand, og vises én gang som en endring. Ett apply løser det.
I portalen: Ingen endringer siden forrige 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"] }}
Eksporter og importer en eksisterende tenant i to faser
Quickstart-repositoriet inneholder en referansekonfigurasjon med moduler, GitHub Actions-workflows og en PowerShell-eksport. Eksporten foregår i to faser fordi policyer refererer til grupper og filtre.
Eksporter grupper, filtre og varslingsmaler.
De skrives inn i quickstartets moduler, med én mappingfil per type. E-postaktiverte grupper utelates med mindre du eksplisitt ber om dem.Importer dem.
Verktøyet kaller Terraform eller OpenTofu for å importere hvert eksportert objekt inn i tilstanden.Eksporter compliance- og konfigurasjonspolicyer.
Settings catalog- og endpoint security-policyer regnes som konfigurasjonspolicyer. Hver eksport lagrer også et råformat JSON-dump av det Graph returnerte.Importer dem.
Samme verktøy, andre fase.Plan.
Planen viser hva som fortsatt avviker. Ikke alle attributter kan eksporteres, så regn med litt opprydding før den første rene planen.
Ett objekt av gangen
For alt eksporten ikke dekker, skriver et lite skript en Terraform-fil for ett objekt av en hvilken som helst ressurstype, gitt dets id. Det bruker Terraforms egen konfigurasjonsgenerering, så filen inneholder det provideren selv leser fra tenanten.
Quickstart på GitHubÉn ressurs inneholder appen, pakken og tilordningene
microsoft365wp_mobile_app dekker 21 app-typer. For .intunewin, MSI, APPX/MSIX, DMG, PKG pakker krypterer provideren filen og laster den opp til Intune, og gjør det på nytt kun når source_sha256 endres. Tilordninger ligger i samme ressurs: alle enheter, alle lisensierte brukere, en gruppe eller en ekskluderingsgruppe, 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 (eldre), Microsoft Edge, Microsoft 365 Apps, web-lenker.
macOS
DMG, PKG, Microsoft Edge, Microsoft Defender, Microsoft 365 Apps, web clips.
iOS og iPadOS
App Store-apper, administrerte iOS Store-apper, web clips.
Android
Google Play Store-apper, administrerte Google Play-apper, administrerte Android Store-apper.
Alle plattformer
Web-lenker.
Flere tenants fra ett repositorium
tenant_id, skriver baseline som en modul og kaller den én gang per tenant. Hver blokk logger inn på egenhånd, slik at hver tenant kan ha sin egen service principal med sine egne tillatelser.- Forskjeller mellom tenants er modulvariabler, synlige i gjennomgangen.
- En ny tenant er én provider-blokk, ett modulkall 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.
Hvordan provideren håndterer Graph throttling
Microsoft Graph begrenser hvor mange forespørsler en klient kan sende, og en plan over en stor tenant sender mange. Provideren venter og prøver på nytt på egen hånd.
Retries
- Retries per forespørsel
- opptil 10
- Ventetid mellom retries
- 3 til 60 sekunder
- En Retry-After på null
- Strekkes til backoff-intervallet, fordi Graph ofte svarer slik og et umiddelbart nytt forsøk sjelden hjelper
Start med quickstart.
Klon det, pek det mot en test-tenant og kjør en plan. Community Edition er gratis for organisasjoner med opptil 99 brukere.