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
KONFIGURATION

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.

  1. Registrera en app i Entra ID.

    Single tenant, ingen omdirigerings-URI behövs. Notera application (client) ID och directory (tenant) ID.
  2. Bevilja Graph-behörigheter.

    Lägg till programbehörigheterna för de objekt du vill hantera (se tabellen nedan) och bevilja administratörsgodkännande.
  3. Deklarera providern.

    Sätt ARM_TENANT_ID och ARM_CLIENT_ID, samt ARM_CLIENT_SECRET för ett första test. I en pipeline, använd OpenID Connect i stället (nedan).
    main.tf
    terraform {  required_providers {    microsoft365wp = {      source = "terraprovider/microsoft365wp"    }  }}provider "microsoft365wp" {}
  4. Planera.

    Skriv en resurs, till exempel en efterlevnadspolicy, och kör terraform plan eller tofu plan. Ingenting förändras i tenanten förrän du tillämpar.
    compliance.tf
    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.

BEHÖRIGHETER

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.

Graph-behörigheterna som krävs
BehörighetVad den tillåter
DeviceManagementConfiguration.ReadWrite.AllIntune enhetskonfiguration och policyer
DeviceManagementApps.ReadWrite.AllIntune appar
DeviceManagementServiceConfig.ReadWrite.AllIntune tjänstkonfiguration, till exempel registrering
Policy.ReadWrite.ConditionalAccessPolicyer för villkorsstyrd åtkomst
Policy.Read.AllLäsning av organisationens policyer
Application.ReadWrite.AllApplikationer
Directory.ReadWrite.AllKatalogdata
Group.ReadWrite.AllGrupper
User.ReadWrite.AllAnvändares fullständiga profiler
CloudPC.ReadWrite.AllWindows 365-konfiguration

Källa: providerguiden "Configuring a Service Principal for managing EntraID".

INLOGGNING

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.

Samma inloggningsinställningar som azuread-providern
MetodPassar förAktivera
OpenID Connect, GitHub ActionsArbetsflöden utan lagrad hemlighetARM_USE_OIDC=true
OpenID Connect, Azure DevOpsPipelines med en tjänstanslutningARM_USE_OIDC=true
ARM_ADO_PIPELINE_SERVICE_CONNECTION_ID
OpenID Connect, valfri utfärdareAndra CI-system som delar ut en ID-tokenARM_USE_OIDC=true
ARM_OIDC_TOKEN / ARM_OIDC_TOKEN_FILE_PATH
KlientcertifikatRunners som innehåller ett certifikatARM_CLIENT_CERTIFICATE / ARM_CLIENT_CERTIFICATE_PATH
KlienthemlighetEtt första test, ett labbARM_CLIENT_SECRET / ARM_CLIENT_SECRET_FILE_PATH
Hanterad identitetRunners på AzureARM_USE_MSI=true
AKS workload identityRunners på Kubernetes i AzureARM_USE_AKS_WORKLOAD_IDENTITY=true
Azure CLIDin laptopaktiverat 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_host or ARM_METADATA_HOSTNAME
DRIFT

Vad planen bevakar

Terraform jämför din konfiguration med vad tenanten rapporterar. TerraProvider gör att den jämförelsen täcker hela objektet: varje attribut du inte anger får ett standardvärde, hämtat från vad Microsoft-portalerna skickar när du skapar samma objekt där. Därför visas ett undantag som lagts till i en policy i portalen, en inställning som ändrats i Intune admin center eller ett värde som ändrats av ett skript i nästa plan, oavsett om din fil nämner det eller inte.
  • 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.
Exempeldata.
BEFINTLIG TENANT

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.

  1. 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.
  2. Importera dem.

    Verktyget anropar Terraform eller OpenTofu för att importera varje exporterat objekt till tillståndet.
  3. 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.
  4. Importera dem.

    Samma verktyg, andra fasen.
  5. 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å GitHub
APPAR

En 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 = {} }  }]}

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.

TENANTS

Flera tenants från ett och samma repo

Ett providerblock loggar in på en tenant. För flera tenants deklarerar du ett block per tenant med ett alias och dess 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.
main.tf
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.