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
Ensimmäinen plan neljässä vaiheessa
Suunnilleen yhtä nopea kuin minkä tahansa muun Azure-providerin käyttöönotto, koska kirjautuminen toimii samalla tavalla.
Rekisteröi sovellus Entra ID:ssä.
Single tenant, uudelleenohjaus-URI:ta ei tarvita. Kirjaa ylös sovelluksen (client) ID ja hakemiston (tenant) ID.Myönnä Graph-oikeudet.
Lisää sovelluksen oikeudet hallittaville objekteille (ks. alla oleva taulukko) ja myönnä järjestelmänvalvojan suostumus.Määrittele provider.
AsetaARM_TENANT_IDjaARM_CLIENT_IDsekäARM_CLIENT_SECRETensimmäistä testiä varten. Pipelinessä käytä sen sijaan OpenID Connectia (alla).terraform { required_providers { microsoft365wp = { source = "terraprovider/microsoft365wp" } }}provider "microsoft365wp" {}
Plan.
Kirjoita yksi resurssi, esimerkiksi compliance-käytäntö, ja ajaterraform plantaitofu plan. Tenantissa ei muutu mitään ennen kuin ajat applyn.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.
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.
| Oikeus | Mitä se sallii |
|---|---|
| DeviceManagementConfiguration.ReadWrite.All | Intune-laitekonfiguraatio ja -käytännöt |
| DeviceManagementApps.ReadWrite.All | Intune-sovellukset |
| DeviceManagementServiceConfig.ReadWrite.All | Intune-palvelukonfiguraatio, kuten rekisteröinti |
| Policy.ReadWrite.ConditionalAccess | Ehdollisen käytön käytännöt |
| Policy.Read.All | Organisaatiosi käytäntöjen lukeminen |
| Application.ReadWrite.All | Sovellukset |
| Directory.ReadWrite.All | Hakemistotiedot |
| Group.ReadWrite.All | Ryhmät |
| User.ReadWrite.All | Käyttäjien täydet profiilit |
| CloudPC.ReadWrite.All | Windows 365 -konfiguraatio |
Lähde: providerin opas "Configuring a Service Principal for managing EntraID".
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.
| Menetelmä | Sopii tilanteeseen | Käyttöönotto |
|---|---|---|
| OpenID Connect, GitHub Actions | Workflowt ilman tallennettua salaisuutta | ARM_USE_OIDC=true |
| OpenID Connect, Azure DevOps | Pipelinet, joissa on palveluyhteys | ARM_USE_OIDC=trueARM_ADO_PIPELINE_SERVICE_CONNECTION_ID |
| OpenID Connect, mikä tahansa issuer | Muut CI-järjestelmät, jotka myöntävät ID-tokenin | ARM_USE_OIDC=trueARM_OIDC_TOKEN / ARM_OIDC_TOKEN_FILE_PATH |
| Client certificate | Runnerit, joilla on sertifikaatti | ARM_CLIENT_CERTIFICATE / ARM_CLIENT_CERTIFICATE_PATH |
| Client secret | Ensimmäinen testi, lab-ympäristö | ARM_CLIENT_SECRET / ARM_CLIENT_SECRET_FILE_PATH |
| Managed identity | Runnerit Azuressa | ARM_USE_MSI=true |
| AKS workload identity | Runnerit Kubernetesissa Azuressa | ARM_USE_AKS_WORKLOAD_IDENTITY=true |
| Azure CLI | Oma kannettava | kä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_hostorARM_METADATA_HOSTNAME
Mitä plan seuraa
- 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.
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"] }}
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.
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ä.Tuo ne.
Työkalu kutsuu Terraformia tai OpenTofua tuodakseen jokaisen viedyn objektin stateen.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.Tuo ne.
Sama työkalu, toinen vaihe.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 GitHubissaYksi 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 = {} } }]}
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.
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.
Useita tenanteja yhdestä repositoriosta
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.
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ää.