NÄIN SE TOIMII

Ota TerraProvider käyttöön tenantissasi ja pipelinessasi.

Mitä TerraProvider-käyttöönoton tekevän insinöörin täytyy tietää: miten kirjautuminen toimii, mitä oikeuksia vaaditaan, miltä ensimmäinen plan näyttää ja miten olemassa oleva tenant saadaan koodin alle.

  • terraprovider/microsoft365wp
  • Terraform and OpenTofu
  • 10 buildia
  • versio 0.20.2
KÄYTTÖÖNOTTO

Ensimmäinen plan neljässä vaiheessa

Suunnilleen yhtä nopea kuin minkä tahansa muun Azure-providerin käyttöönotto, koska kirjautuminen toimii samalla tavalla.

  1. Rekisteröi sovellus Entra ID:ssä.

    Single tenant, uudelleenohjaus-URI:ta ei tarvita. Kirjaa ylös sovelluksen (client) ID ja hakemiston (tenant) ID.
  2. Myönnä Graph-oikeudet.

    Lisää sovelluksen oikeudet hallittaville objekteille (ks. alla oleva taulukko) ja myönnä järjestelmänvalvojan suostumus.
  3. Määrittele provider.

    Aseta ARM_TENANT_ID ja ARM_CLIENT_ID sekä ARM_CLIENT_SECRET ensimmäistä testiä varten. Pipelinessä käytä sen sijaan OpenID Connectia (alla).
    main.tf
    terraform {  required_providers {    microsoft365wp = {      source = "terraprovider/microsoft365wp"    }  }}provider "microsoft365wp" {}
  4. Plan.

    Kirjoita yksi resurssi, esimerkiksi compliance-käytäntö, ja aja terraform plan tai tofu plan. Tenantissa ei muutu mitään ennen kuin ajat applyn.
    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 = {} }  }]}

    Esimerkkitiedot.

OIKEUDET

Vaaditut Graph-oikeudet

Sovelluksen oikeudet, myönnetty järjestelmänvalvojan suostumuksella. Myönnä vain ne oikeudet, joita hallittavat objektisi edellyttävät; tästä listasta puuttuva resurssi ilmoittaa tarvitsemansa oikeudet omalla dokumentaatiosivullaan.

Vaaditut Graph-oikeudet
OikeusMitä se sallii
DeviceManagementConfiguration.ReadWrite.AllIntune-laitekonfiguraatio ja -käytännöt
DeviceManagementApps.ReadWrite.AllIntune-sovellukset
DeviceManagementServiceConfig.ReadWrite.AllIntune-palvelukonfiguraatio, kuten rekisteröinti
Policy.ReadWrite.ConditionalAccessEhdollisen käytön käytännöt
Policy.Read.AllOrganisaatiosi käytäntöjen lukeminen
Application.ReadWrite.AllSovellukset
Directory.ReadWrite.AllHakemistotiedot
Group.ReadWrite.AllRyhmät
User.ReadWrite.AllKäyttäjien täydet profiilit
CloudPC.ReadWrite.AllWindows 365 -konfiguraatio

Lähde: providerin opas "Configuring a Service Principal for managing EntraID".

KIRJAUTUMINEN

Samat kirjautumisasetukset kuin azuread-providerissa

Provider lukee samat ARM_*-asetukset kuin azuread-provider. Aseta ARM_TENANT_ID ja ARM_CLIENT_ID, ja valitse sitten kirjautumistapa.

Samat kirjautumisasetukset kuin azuread-providerissa
MenetelmäSopii tilanteeseenKäyttöönotto
OpenID Connect, GitHub ActionsWorkflowt ilman tallennettua salaisuuttaARM_USE_OIDC=true
OpenID Connect, Azure DevOpsPipelinet, joissa on palveluyhteysARM_USE_OIDC=true
ARM_ADO_PIPELINE_SERVICE_CONNECTION_ID
OpenID Connect, mikä tahansa issuerMuut CI-järjestelmät, jotka myöntävät ID-tokeninARM_USE_OIDC=true
ARM_OIDC_TOKEN / ARM_OIDC_TOKEN_FILE_PATH
Client certificateRunnerit, joilla on sertifikaattiARM_CLIENT_CERTIFICATE / ARM_CLIENT_CERTIFICATE_PATH
Client secretEnsimmäinen testi, lab-ympäristöARM_CLIENT_SECRET / ARM_CLIENT_SECRET_FILE_PATH
Managed identityRunnerit AzuressaARM_USE_MSI=true
AKS workload identityRunnerit Kubernetesissa AzuressaARM_USE_AKS_WORKLOAD_IDENTITY=true
Azure CLIOma kannettavakäytössä oletuksena; ARM_USE_CLI=false poistaa sen käytöstä

Jokainen asetus on käytettävissä myös provider-argumenttina (use_oidc, client_certificate_path jne.). Providerin OpenID Connect -opas näyttää, miten Entra ID:n saa luottamaan GitHub-repositorioon. Lyhyesti: OpenID Connect (GitHub Actions, Azure DevOps, mikä tahansa OIDC-token), client certificate, client secret, managed identity, AKS workload identity, Azure CLI.

Neljä pilveä

Aseta environment tai ARM_ENVIRONMENT. Provider ottaa sen jälkeen yhteyden kyseisen pilven Microsoft Graph -endpointiin: global, US Government L4, US Government L5 (DoD), China.

Ympäristö

global (also public)
Kaupallinen pilvi, oletusarvo
usgovernmentl4 (also usgovernment)
US Government L4
usgovernmentl5 (also dod)
US Government L5 (DoD)
china
Microsoftin pilvi Kiinassa
Oma endpoint
metadata_host or ARM_METADATA_HOSTNAME
DRIFT

Mitä plan seuraa

Terraform vertaa konfiguraatiotasi siihen, mitä tenant raportoi. TerraProvider laajentaa tämän vertailun kattamaan koko objektin: jokaiselle määrittämättömälle attribuutille asetetaan oletusarvo, joka on peräisin siitä, mitä Microsoft-portaalit lähettävät, kun luot saman objektin siellä. Näin käytäntöön portaalissa lisätty poissulku, Intune-hallintakeskuksessa vaihdettu asetus tai skriptin muuttama arvo näkyy seuraavassa planissa riippumatta siitä, mainitseeko tiedostosi sen vai ei.
  • Pois jätetyt kokoelmat saavat oletukseksi tyhjän, joten lisätty jäsen, poissulku tai sovellus on näkyvissä.
  • Uusi Conditional Access -käytäntö ilman tilaa luodaan tilaan enabledForReportingButNotEnforced.
  • Jokaisen attribuutin oletusarvo löytyy resurssin dokumentaatiosivulta, merkittynä provider-oletukseksi.

Kääntöpuolena: asetus, jonka joku on kytkenyt portaalissa päälle ja pois, voi palata arvona false tyhjän sijaan ja näkyä kerran muutoksena. Yksi apply korjaa tilanteen.

Portaalissa: Ei muutoksia viimeisen aplyn jälkeen.

microsoft365wp_conditional_access_policy.require_mfa_admins: Refreshing state... [id=2b7f9c3e-8d41-4f6a-b0e2-5c9a1d7e3f80]No changes. Your infrastructure matches the configuration.
Esimerkkidata.
OLEMASSA OLEVA TENANT

Vie ja tuo olemassa oleva tenant kahdessa vaiheessa

Quickstart-repositoriossa on referenssikonfiguraatio moduuleineen, GitHub Actions -workfloweineen ja PowerShell-vientiskripteineen. Vienti toimii kahdessa vaiheessa, koska käytännöt viittaavat ryhmiin ja suodattimiin.

  1. Vie ryhmät, suodattimet ja ilmoitusmallit.

    Ne kirjoitetaan quickstartin moduuleihin, ja kullekin tyypille luodaan oma mappaus-tiedosto. Sähköpostiyhteensopivat ryhmät jätetään pois, ellei niitä erikseen pyydetä.
  2. Tuo ne.

    Työkalu kutsuu Terraformia tai OpenTofua tuodakseen jokaisen viedyn objektin stateen.
  3. Vie compliance- ja konfiguraatiokäytännöt.

    Settings catalog- ja endpoint security -käytännöt lasketaan konfiguraatiokäytännöiksi. Kukin vienti tallentaa myös raakaan JSON-muotoon sen, mitä Graph palautti.
  4. Tuo ne.

    Sama työkalu, toinen vaihe.
  5. Plan.

    Plan näyttää, mitä eroja vielä on. Kaikkia attribuutteja ei voida viedä, joten ennen ensimmäistä puhdasta plania on odotettavissa lyhyt siivousvaihe.

Yksi objekti kerrallaan

Jos vienti ei kata jotakin objektia, pieni skripti kirjoittaa Terraform-tiedoston yhdelle objektille minkä tahansa resurssityypin id:n perusteella. Se käyttää Terraformin omaa konfiguraatiogenerointia, joten tiedosto sisältää täsmälleen sen, mitä provider itse lukee tenantista.

Quickstart GitHubissa
SOVELLUKSET

Yksi resurssi sisältää sovelluksen, sen paketin ja sen kohdennukset

microsoft365wp_mobile_app kattaa 21 sovellustyypin. .intunewin, MSI, APPX/MSIX, DMG, PKG paketille provider salaa tiedoston ja lataa sen Intuneen, ja tekee sen uudelleen vain kun source_sha256 muuttuu. Kohdennukset ovat samassa resurssissa: kaikki laitteet, kaikki lisensoidut käyttäjät, ryhmä tai poissulkuryhmä, jokainen include- tai exclude-suodattimella.
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 = {} }  }]}

Esimerkkitiedot.

  • Windows

    Win32 (.intunewin), MSI, APPX/MSIX, Microsoft Store (uusi, WinGetin kautta), Microsoft Store (vanha), Microsoft Edge, Microsoft 365 Apps, verkkolinkit.

  • macOS

    DMG, PKG, Microsoft Edge, Microsoft Defender, Microsoft 365 Apps, web clipit.

  • iOS ja iPadOS

    App Store -sovellukset, hallitut iOS-kauppasovellukset, web clipit.

  • Android

    Google Play -kauppasovellukset, hallitut Google Play -sovellukset, hallitut Android-kauppasovellukset.

  • Mikä tahansa alusta

    Verkkolinkit.

TENANTIT

Useita tenanteja yhdestä repositoriosta

Yksi provider-blokki kirjautuu yhteen tenantiin. Useita tenanteja varten määrittele yksi blokki per tenant aliasineen ja tenant_id:neen, kirjoita perusmääritys moduulina ja kutsu sitä kerran per tenant. Jokainen blokki kirjautuu itsenäisesti, joten kullakin tenantilla voi olla oma service principal omine oikeuksineen.
  • Tenantien väliset erot ovat moduulimuuttujia, jotka näkyvät reviewssa.
  • Uusi tenant tarkoittaa yhtä provider-blokkia, yhtä moduulikutsua ja yhtä plania.
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}

Esimerkkitiedot.

Miten provider käsittelee Graph-throttlingin

Microsoft Graph rajoittaa asiakkaan pyyntömäärää, ja suuren tenantin plan lähettää niitä paljon. Provider odottaa ja yrittää uudelleen automaattisesti.

Uudelleenyritykset

Uudelleenyritykset per pyyntö
enintään 10
Odotusaika uudelleenyritysten välillä
3–60 sekuntia
Retry-After-arvo nolla
Venytetään backoffin mukaiseksi, koska Graph vastaa usein näin eikä välitön uudelleenyritys juuri auta

Aloita quickstartilla.

Kloonaa se, osoita se testitenanttiin ja aja plan. Community Edition on ilmainen organisaatioille, joissa on enintään 99 käyttäjää.