SÅ HÄR FUNGERAR DET
Konfigurera TerraProvider i din tenant och pipeline.
Vad den ingenjör som konfigurerar TerraProvider behöver veta: hur inloggningen fungerar, vilka behörigheter som krävs, hur den första planen ser ut och hur en befintlig tenant hamnar under kod.
- terraprovider/microsoft365wp
- Terraform and OpenTofu
- 10 builds
- version 0.20.2
Din första plan i fyra steg
Ungefär lika lång tid som att konfigurera vilken annan Azure-provider som helst, eftersom inloggningen fungerar på samma sätt.
Registrera en app i Entra ID.
Single tenant, ingen omdirigerings-URI behövs. Notera application (client) ID och directory (tenant) ID.Bevilja Graph-behörigheter.
Lägg till programbehörigheterna för de objekt du vill hantera (se tabellen nedan) och bevilja administratörsgodkännande.Deklarera providern.
SättARM_TENANT_IDochARM_CLIENT_ID, samtARM_CLIENT_SECRETför ett första test. I en pipeline, använd OpenID Connect i stället (nedan).terraform { required_providers { microsoft365wp = { source = "terraprovider/microsoft365wp" } }}provider "microsoft365wp" {}
Planera.
Skriv en resurs, till exempel en efterlevnadspolicy, och körterraform planellertofu plan. Ingenting förändras i tenanten förrän du tillämpar.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 = {} } }]}
Exempeldata.
Graph-behörigheterna som krävs
Programbehörigheter, beviljade med administratörsgodkännande. Bevilja bara de behörigheter som gäller de objekt du hanterar; en resurs som inte finns i listan anger sina behörigheter på sin dokumentationssida.
| Behörighet | Vad den tillåter |
|---|---|
| DeviceManagementConfiguration.ReadWrite.All | Intune enhetskonfiguration och policyer |
| DeviceManagementApps.ReadWrite.All | Intune appar |
| DeviceManagementServiceConfig.ReadWrite.All | Intune tjänstkonfiguration, till exempel registrering |
| Policy.ReadWrite.ConditionalAccess | Policyer för villkorsstyrd åtkomst |
| Policy.Read.All | Läsning av organisationens policyer |
| Application.ReadWrite.All | Applikationer |
| Directory.ReadWrite.All | Katalogdata |
| Group.ReadWrite.All | Grupper |
| User.ReadWrite.All | Användares fullständiga profiler |
| CloudPC.ReadWrite.All | Windows 365-konfiguration |
Källa: providerguiden "Configuring a Service Principal for managing EntraID".
Samma inloggningsinställningar som azuread-providern
Providern läser samma ARM_*-inställningar som azuread-providern. Sätt ARM_TENANT_ID och ARM_CLIENT_ID, och välj sedan en metod.
| Metod | Passar för | Aktivera |
|---|---|---|
| OpenID Connect, GitHub Actions | Arbetsflöden utan lagrad hemlighet | ARM_USE_OIDC=true |
| OpenID Connect, Azure DevOps | Pipelines med en tjänstanslutning | ARM_USE_OIDC=trueARM_ADO_PIPELINE_SERVICE_CONNECTION_ID |
| OpenID Connect, valfri utfärdare | Andra CI-system som delar ut en ID-token | ARM_USE_OIDC=trueARM_OIDC_TOKEN / ARM_OIDC_TOKEN_FILE_PATH |
| Klientcertifikat | Runners som innehåller ett certifikat | ARM_CLIENT_CERTIFICATE / ARM_CLIENT_CERTIFICATE_PATH |
| Klienthemlighet | Ett första test, ett labb | ARM_CLIENT_SECRET / ARM_CLIENT_SECRET_FILE_PATH |
| Hanterad identitet | 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 | aktiverat som standard; ARM_USE_CLI=false stänger av det |
Varje inställning finns också som ett providerargument (use_oidc, client_certificate_path och så vidare). Providerguiden för OpenID Connect visar hur du låter Entra ID lita på ett GitHub-repo. Kortfattat: OpenID Connect (GitHub Actions, Azure DevOps, valfri OIDC-token), klientcertifikat, klienthemlighet, hanterad identitet, AKS workload identity, Azure CLI.
Fyra moln
Sätt environment eller ARM_ENVIRONMENT. Providern kommunicerar sedan med det molnets Microsoft Graph-slutpunkt: global, US Government L4, US Government L5 (DoD), Kina.
Miljö
- global (även public)
- Det kommersiella molnet, standardvalet
- usgovernmentl4 (även usgovernment)
- US Government L4
- usgovernmentl5 (även dod)
- US Government L5 (DoD)
- china
- Microsofts moln i Kina
- Din egen slutpunkt
metadata_hostorARM_METADATA_HOSTNAME
Vad planen bevakar
- Samlingar du utelämnar är som standard tomma, så ett tillagt objekt, undantag eller app syns.
- En ny policy för villkorsstyrd åtkomst utan ett tillstånd skapas som
enabledForReportingButNotEnforced. - Standardvärdet för varje attribut finns på resursens dokumentationssida, markerat som providerstandard.
Baksidan: en inställning som någon slagit på och av igen i en portal kan dyka upp som false i stället för att vara borttagen, och visas en gång som en ändring. Ett apply löser det.
I portalen: Inga ändringar sedan senaste 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"] }}
Exportera och importera en befintlig tenant i två faser
Quickstart-repot innehåller en referenskonfiguration med moduler, GitHub Actions-arbetsflöden och en PowerShell-export. Exporten sker i två faser, eftersom policyer pekar på grupper och filter.
Exportera grupper, filter och aviseringsmallar.
De skrivs in i quickstartets moduler, med en mappningsfil för varje typ. E-postaktiverade grupper utelämnas om du inte explicit begär dem.Importera dem.
Verktyget anropar Terraform eller OpenTofu för att importera varje exporterat objekt till tillståndet.Exportera efterlevnads- och konfigurationspolicyer.
Inställningskatalog och slutpunktssäkerhetspolicyer räknas som konfigurationspolicyer. Varje export sparar även en rå JSON-dump av vad Graph returnerade.Importera dem.
Samma verktyg, andra fasen.Planera.
Planen visar vad som fortfarande skiljer sig. Inte alla attribut kan exporteras, så räkna med en kort städrunda innan den första rena planen.
Ett objekt i taget
För allt som exporten inte täcker skriver ett litet skript en Terraform-fil för ett objekt av valfri resurstyp, givet dess id. Det använder Terraforms egen konfigurationsgenerering, så filen innehåller det som providern själv läser från tenanten.
Quickstart på GitHubEn resurs innehåller appen, dess paket och dess tilldelningar
microsoft365wp_mobile_app täcker 21 apptyper. För .intunewin, MSI, APPX/MSIX, DMG, PKG paket krypterar providern filen och laddar upp den till Intune, och gör det igen bara när source_sha256 ändras. Tilldelningar finns i samma resurs: alla enheter, alla licensierade användare, en grupp eller en exkluderingsgrupp, var och en med ett inkluderings- eller exkluderingsfilter.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.
Exempeldata.
Windows
Win32 (.intunewin), MSI, APPX/MSIX, Microsoft Store (ny, via WinGet), Microsoft Store (äldre), Microsoft Edge, Microsoft 365 Apps, webblänkar.
macOS
DMG, PKG, Microsoft Edge, Microsoft Defender, Microsoft 365 Apps, webbklipp.
iOS och iPadOS
App Store-appar, hanterade iOS Store-appar, webbklipp.
Android
Google Play Store-appar, hanterade Google Play-appar, hanterade Android Store-appar.
Alla plattformar
Webblänkar.
Flera tenants från ett och samma repo
tenant_id, skriver baslinjen som en modul och anropar den en gång per tenant. Varje block loggar in separat, så varje tenant kan ha sitt eget service principal med egna behörigheter.- Skillnader mellan tenants är modulvariabler, synliga i granskningen.
- En ny tenant är ett providerblock, ett modulanrop och en 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}
Exempeldata.
Hur Graph-throttling hanteras
Microsoft Graph begränsar hur många förfrågningar en klient får skicka, och en plan mot en stor tenant skickar många. Providern väntar och försöker igen på egen hand.
Återförsök
- Återförsök per förfrågan
- upp till 10
- Väntetid mellan återförsök
- 3 till 60 sekunder
- En Retry-After på noll
- Utökas till backoff-intervallet, eftersom Graph ofta svarar så och ett omedelbart nytt försök sällan hjälper
Börja med quickstart.
Klona det, peka det mot en testtenant och kör en plan. Community Edition är gratis för organisationer med upp till 99 användare.