The @drunk-pulumi/intune-components library provides custom Pulumi components for managing Microsoft Intune resources using infrastructure as code. It enables programmatic configuration of device management policies, compliance settings, and corporate device identifiers through the Microsoft Graph API.
The library uses a base component architecture with two key abstractions:
-
BaseComponent: Abstract foundation class for all Pulumi resource components
- Extends
pulumi.ComponentResource - Provides
getOutputs()method for exposing component outputs - Uses custom resource type prefix:
drunk:intune:
- Extends
-
BaseProvider: Base class for dynamic providers that interact with Microsoft Graph API
- Implements CRUD operations (create, read, update, delete)
- Handles authentication via Azure service principal
- Uses Microsoft Graph Beta endpoints
All components authenticate with Microsoft Intune via Azure service principal credentials:
- Required Environment Variables:
INTUNE_AZURE_TENANT_ID: Azure AD tenant IDINTUNE_AZURE_CLIENT_ID: Service principal application IDINTUNE_AZURE_CLIENT_SECRET: Service principal secret
src/
IntuneManagement.ts # Main orchestration component
DeviceConfiguration.ts # Device configuration policies
DeviceCustomConfiguration.ts # Custom configurations
DeviceCustomConfigurationImporter.ts # Import custom configs from files
base/ # Base classes
BaseComponent.ts
BaseProvider.ts
devices/ # Device-specific components
MacCompliancePolicy.ts
ConfigurationPolicy.ts
ConfigurationPolicyAssignment.ts
CompliancePolicyAssignment.ts
CorporateDeviceIdentifiers.ts
DefaultPlatformRestrictions.ts
CustomPolicy.ts
DeviceCatalogs.ts
helpers/ # Policy payload generators
createMacCompliancePayload.ts
createMacAntivirusPayload.ts
createMacDiskEncryptionPayload.ts
createMacFirewallPayload.ts
createMacCustomConfig.ts
helpers.ts # Graph API utilities
types.ts # Shared TypeScript types
Main component for orchestrating Microsoft Intune configurations:
- Manages macOS compliance policies
- Configures device security policies (antivirus, firewall, disk encryption)
- Handles corporate device identifiers
- Manages device catalogs
- Sets default platform restrictions
- MacCompliancePolicy: macOS device compliance settings
- ConfigurationPolicy: General device configuration policies
- CustomPolicy: Custom device configurations
- CorporateDeviceIdentifiers: Corporate-owned device registration
- DeviceCatalogs: Device catalog management
- CompliancePolicyAssignment: Assigns compliance policies to groups
- ConfigurationPolicyAssignment: Assigns configuration policies to groups
The library uses TypeScript's type system extensively:
- AsInput: Converts type to accept Pulumi inputs
- AsOutput: Converts type to return Pulumi outputs
- WithName: Mixin for optional resource naming
- WithVaultInfo: Mixin for Key Vault integration
- ResourceType: Standard resource identifier structure
All components interact with Microsoft Graph API Beta endpoints:
- Base URL:
https://graph.microsoft.com/beta - Primary namespace:
deviceManagement - Supports full CRUD operations
- Handles error responses and retries
- Install dependencies:
pnpm install - Build library:
pnpm run build - Fast build:
pnpm run fastBuild(TypeScript only) - Run tests:
pnpm run test - Type check:
npx tsc --noEmit - Update dependencies:
pnpm run update
- Package Name:
@drunk-pulumi/intune-components - Version: 0.0.1
- Main Entry:
index.js - Types:
index.d.ts - Output Directory:
bin/ - License: MIT
@azure/identity: Azure authentication@microsoft/microsoft-graph-types-beta: TypeScript types for Graph API@pulumi/pulumi: Pulumi SDKlodash: Utility functions
typescript: TypeScript compilerts-node: TypeScript executioncpy-cli: File copying utilitycross-env: Cross-platform environment variables
import { IntuneManagement } from '@drunk-pulumi/intune-components';
const intune = new IntuneManagement('my-intune', {
macOs: {
compliancePolicy: {
displayName: 'macOS Compliance',
passwordRequired: true,
assignments: {
includeAllDevices: true
}
},
antiVirusPolicy: {
name: 'Antivirus Policy',
description: 'macOS antivirus configuration',
assignments: {
includeAllDevices: true
}
}
}
});- Always set required environment variables before deployment
- Use TypeScript for type safety
- Test configurations in non-production environment first
- Review Microsoft Graph API permissions required
- Follow the established component patterns when extending
- Document custom configurations with clear descriptions
- Use assignment options to target specific device groups