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
OPPSETT

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.

  1. Registrer en app i Entra ID.

    Single tenant, ingen redirect-URI nødvendig. Noter applikasjons-ID (client ID) og katalog-ID (tenant ID).
  2. Gi Graph-tillatelser.

    Legg til applikasjonstillatelsene for objektene du vil administrere (se tabellen nedenfor) og gi admin consent.
  3. Deklarer provideren.

    Sett ARM_TENANT_ID og ARM_CLIENT_ID, samt ARM_CLIENT_SECRET for en første test. I en pipeline bruker du OpenID Connect i stedet (se nedenfor).
    main.tf
    terraform {  required_providers {    microsoft365wp = {      source = "terraprovider/microsoft365wp"    }  }}provider "microsoft365wp" {}
  4. Plan.

    Skriv én ressurs, for eksempel en compliance-policy, og kjør terraform plan eller tofu plan. Ingenting endres i tenanten før du kjører apply.
    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 = {} }  }]}

    Eksempeldata.

TILLATELSER

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.

Graph-tillatelsene provideren ber om
TillatelseHva den gir tilgang til
DeviceManagementConfiguration.ReadWrite.AllIntune-enhetskonfigurasjon og -policyer
DeviceManagementApps.ReadWrite.AllIntune-apper
DeviceManagementServiceConfig.ReadWrite.AllIntune-tjenestekonfigurasjon, som registrering
Policy.ReadWrite.ConditionalAccessConditional Access-policyer
Policy.Read.AllLesing av organisasjonens policyer
Application.ReadWrite.AllApplikasjoner
Directory.ReadWrite.AllKatalogdata
Group.ReadWrite.AllGrupper
User.ReadWrite.AllBrukernes fulle profiler
CloudPC.ReadWrite.AllWindows 365-konfigurasjon

Kilde: providerens veiledning «Configuring a Service Principal for managing EntraID».

INNLOGGING

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.

Samme innloggingsinnstillinger som azuread-provideren
MetodePasser tilSlå det på
OpenID Connect, GitHub ActionsWorkflows uten lagret hemmelighetARM_USE_OIDC=true
OpenID Connect, Azure DevOpsPipelines med en service connectionARM_USE_OIDC=true
ARM_ADO_PIPELINE_SERVICE_CONNECTION_ID
OpenID Connect, any issuerAndre CI-systemer som utsteder et ID-tokenARM_USE_OIDC=true
ARM_OIDC_TOKEN / ARM_OIDC_TOKEN_FILE_PATH
Client certificateRunners som har et sertifikatARM_CLIENT_CERTIFICATE / ARM_CLIENT_CERTIFICATE_PATH
Client secretEn første test, et lab-miljøARM_CLIENT_SECRET / ARM_CLIENT_SECRET_FILE_PATH
Managed identityRunners på AzureARM_USE_MSI=true
AKS workload identityRunners på Kubernetes i AzureARM_USE_AKS_WORKLOAD_IDENTITY=true
Azure CLIDin egen laptoppå 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_host or ARM_METADATA_HOSTNAME
DRIFT

Hva planen overvåker

Terraform sammenligner konfigurasjonen din med det tenanten rapporterer. TerraProvider utvider denne sammenligningen til å dekke hele objektet: alle attributter du ikke setter får en standardverdi, hentet fra det Microsoft-portalene returnerer når du oppretter det samme objektet der. Dermed vil en ekskludering lagt til i en policy i portalen, en veksleknapp endret i Intune admin center eller en innstilling endret av et skript dukke opp i den neste planen, uavhengig av om filen din nevner det.
  • 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.
Eksempeldata.
EKSISTERENDE TENANT

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.

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

    Verktøyet kaller Terraform eller OpenTofu for å importere hvert eksportert objekt inn i tilstanden.
  3. 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.
  4. Importer dem.

    Samme verktøy, andre fase.
  5. 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
APPER

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

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.

TENANTS

Flere tenants fra ett repositorium

En provider-blokk logger inn på én tenant. For flere tenants deklarerer du én blokk per tenant med et alias og dens 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.
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}

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.