WBS: 1.1.2.2.2
Task: Set Up Collaboration Platforms and Tools
Date: August 8, 2025
Version: 1.0
This guide provides comprehensive instructions for configuring and deploying collaboration platforms, project management tools, and communication systems as part of the ICT Governance Framework implementation. The configuration follows the established governance principles and integrates with existing Microsoft 365 and Azure DevOps environments.
Platform | Purpose | Primary Use Cases |
---|---|---|
Microsoft Teams | Communication & Collaboration | - Team communication - Video conferencing - File sharing - Channel-based collaboration |
SharePoint Online | Document Management | - Document repositories - Knowledge management - Governance documentation - Policy libraries |
Azure DevOps | Project Management & Development | - Project tracking - Code repositories - CI/CD pipelines - Work item management |
Microsoft Project | Project Planning | - Project scheduling - Resource management - Timeline tracking - Reporting |
Power Platform | Business Process Automation | - Workflow automation - Custom applications - Data visualization - Process improvement |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Microsoft │ │ Azure │ │ Power │
│ Teams │◄──►│ DevOps │◄──►│ Platform │
│ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ SharePoint │
│ Online │
│ │
└─────────────────┘
Governance Teams:
# Create ICT Governance Council Team
New-Team -DisplayName "ICT Governance Council" `
-Description "Strategic governance oversight and decision-making" `
-Visibility Private `
-Owner "governance.admin@company.com"
# Create Domain Owner Teams
$domains = @("Infrastructure", "Applications", "Data", "Security", "Innovation")
foreach ($domain in $domains) {
New-Team -DisplayName "Governance - $domain Domain" `
-Description "$domain domain governance and stewardship" `
-Visibility Private `
-Owner "governance.admin@company.com"
}
Project Teams:
# Create Project Implementation Team
New-Team -DisplayName "ICT Governance Implementation" `
-Description "Framework implementation project team" `
-Visibility Private `
-Owner "project.manager@company.com"
Standard Channels for Governance Teams:
# Configure Teams policies for governance
$PolicyName = "ICT-Governance-Policy"
# Meeting policy
New-CsTeamsMeetingPolicy -Identity $PolicyName `
-AllowCloudRecording $true `
-AllowTranscription $true `
-AutoAdmittedUsers "EveryoneInCompany" `
-AllowAnonymousUsersToDialOut $false
# Messaging policy
New-CsTeamsMessagingPolicy -Identity $PolicyName `
-AllowUserEditMessage $true `
-AllowUserDeleteMessage $true `
-AllowOwnerDeleteMessage $true `
-AllowTeamMentions $true `
-AllowChannelMentions $true
Governance Hub Site:
# Create main governance hub site
New-PnPSite -Type CommunicationSite `
-Title "ICT Governance Hub" `
-Url "https://company.sharepoint.com/sites/ict-governance" `
-Description "Central hub for ICT governance framework" `
-Owner "governance.admin@company.com"
Document Libraries:
ICT Governance Hub
├── Policies/
│ ├── Framework Documents/
│ ├── Domain Policies/
│ ├── Procedures/
│ └── Standards/
├── Templates/
│ ├── Assessment Templates/
│ ├── Report Templates/
│ ├── Policy Templates/
│ └── Process Templates/
├── Reports/
│ ├── Compliance Reports/
│ ├── Performance Metrics/
│ ├── Audit Reports/
│ └── Dashboard Data/
├── Training/
│ ├── Course Materials/
│ ├── Presentations/
│ ├── Videos/
│ └── Assessments/
└── Archives/
├── Previous Versions/
├── Retired Policies/
└── Historical Reports/
# Create governance content types
Add-PnPContentType -Name "Governance Policy" `
-Description "ICT governance policy document" `
-Group "ICT Governance"
Add-PnPContentType -Name "Governance Report" `
-Description "ICT governance report" `
-Group "ICT Governance"
# Add site columns
Add-PnPField -DisplayName "Policy Category" `
-InternalName "PolicyCategory" `
-Type Choice `
-Choices @("Framework", "Domain", "Procedure", "Standard")
Add-PnPField -DisplayName "Approval Status" `
-InternalName "ApprovalStatus" `
-Type Choice `
-Choices @("Draft", "Review", "Approved", "Retired")
# Create Azure DevOps organization (if not exists)
az devops configure --defaults organization=https://dev.azure.com/company-governance
# Create main project
az devops project create --name "ICT-Governance-Framework" \
--description "ICT Governance Framework Implementation" \
--visibility private
ICT-Governance-Framework/
├── azure-infrastructure/
│ ├── bicep-templates/
│ ├── policy-definitions/
│ └── deployment-scripts/
├── m365-configuration/
│ ├── teams-config/
│ ├── sharepoint-config/
│ └── security-config/
├── governance-automation/
│ ├── powershell-scripts/
│ ├── azure-functions/
│ └── logic-apps/
├── documentation/
│ ├── policies/
│ ├── procedures/
│ └── templates/
└── training-materials/
├── presentations/
├── videos/
└── assessments/
Custom Work Item Types:
{
"name": "Governance Initiative",
"description": "High-level governance project or initiative",
"fields": [
{
"name": "Domain",
"type": "string",
"allowedValues": ["Infrastructure", "Applications", "Data", "Security", "Innovation"]
},
{
"name": "Priority",
"type": "string",
"allowedValues": ["Critical", "High", "Medium", "Low"]
},
{
"name": "Compliance Impact",
"type": "string",
"allowedValues": ["High", "Medium", "Low", "None"]
}
]
}
CI/CD Pipeline for Governance Automation:
# azure-pipelines.yml
trigger:
branches:
include:
- main
- develop
paths:
include:
- governance-automation/*
- azure-infrastructure/*
pool:
vmImage: 'windows-latest'
stages:
- stage: Validate
jobs:
- job: ValidateScripts
steps:
- task: PowerShell@2
displayName: 'Validate PowerShell Scripts'
inputs:
targetType: 'inline'
script: |
Get-ChildItem -Path "$(Build.SourcesDirectory)" -Filter "*.ps1" -Recurse |
ForEach-Object {
$result = Invoke-ScriptAnalyzer -Path $_.FullName
if ($result) {
Write-Error "Script analysis failed for $($_.Name)"
$result | Format-Table
}
}
- stage: Deploy
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- deployment: DeployGovernanceAutomation
environment: 'Production'
strategy:
runOnce:
deploy:
steps:
- task: AzurePowerShell@5
displayName: 'Deploy Governance Scripts'
inputs:
azureSubscription: 'Azure-Governance-Connection'
ScriptType: 'FilePath'
ScriptPath: '$(Pipeline.Workspace)/governance-automation/deploy.ps1'
azurePowerShellVersion: 'LatestVersion'
# Create governance distribution lists
New-DistributionGroup -Name "ICT-Governance-Council" `
-DisplayName "ICT Governance Council" `
-PrimarySmtpAddress "governance-council@company.com"
New-DistributionGroup -Name "ICT-Domain-Owners" `
-DisplayName "ICT Domain Owners" `
-PrimarySmtpAddress "domain-owners@company.com"
New-DistributionGroup -Name "ICT-All-Stakeholders" `
-DisplayName "ICT All Stakeholders" `
-PrimarySmtpAddress "governance-all@company.com"
Power Automate Flows:
{
"name": "Governance Policy Approval Notification",
"trigger": {
"type": "SharePoint",
"event": "ItemCreated",
"site": "ICT Governance Hub",
"list": "Policies"
},
"actions": [
{
"type": "SendEmail",
"to": "governance-council@company.com",
"subject": "New Policy Requires Approval: {Title}",
"body": "A new policy has been submitted for approval..."
},
{
"type": "CreateTeamsMessage",
"team": "ICT Governance Council",
"channel": "Policies",
"message": "New policy submitted: {Title}"
}
]
}
Power BI Governance Dashboard:
# Connect Teams channels to SharePoint libraries
$teams = Get-Team | Where-Object {$_.DisplayName -like "*Governance*"}
foreach ($team in $teams) {
$channels = Get-TeamChannel -GroupId $team.GroupId
foreach ($channel in $channels) {
if ($channel.DisplayName -eq "Policies") {
# Add SharePoint tab for policies library
Add-TeamChannelTab -GroupId $team.GroupId `
-ChannelId $channel.Id `
-DisplayName "Policy Library" `
-Type SharePoint `
-Configuration @{
contentUrl = "https://company.sharepoint.com/sites/ict-governance/Policies"
}
}
}
}
# Configure Azure DevOps Teams integration
az devops extension install --extension-name "ms-vsts.vss-services-teams"
# Add Teams notification for work item updates
az boards work-item-type create --name "Governance Initiative" \
--description "Governance project tracking" \
--project "ICT-Governance-Framework"
Governance Request App:
{
"name": "Governance Request Portal",
"description": "Self-service portal for governance requests",
"screens": [
{
"name": "RequestForm",
"controls": [
{
"type": "TextInput",
"name": "RequestTitle",
"required": true
},
{
"type": "Dropdown",
"name": "RequestType",
"options": ["Policy Review", "Exception Request", "Training Request"]
},
{
"type": "TextArea",
"name": "Description",
"required": true
}
]
}
],
"dataSource": "SharePoint",
"list": "Governance Requests"
}
# Create conditional access policy for governance platforms
$policy = @{
displayName = "ICT Governance Platform Access"
state = "enabled"
conditions = @{
applications = @{
includeApplications = @(
"00000003-0000-0ff1-ce00-000000000000", # SharePoint
"cc15fd57-2c6c-4117-a88c-83b1d56b4bbe" # Teams
)
}
users = @{
includeGroups = @("ICT-Governance-Users")
}
}
grantControls = @{
operator = "AND"
builtInControls = @("mfa", "compliantDevice")
}
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $policy
# Create DLP policy for governance documents
New-DlpCompliancePolicy -Name "ICT Governance Data Protection" `
-SharePointLocation "https://company.sharepoint.com/sites/ict-governance" `
-TeamsLocation "All" `
-Mode Enable
New-DlpComplianceRule -Policy "ICT Governance Data Protection" `
-Name "Protect Sensitive Governance Data" `
-ContentContainsSensitiveInformation @{
Name = "Custom Governance Classification"
MinCount = 1
} `
-BlockAccess $true `
-NotifyUser @("governance.admin@company.com")
# Create retention policy for governance documents
New-RetentionCompliancePolicy -Name "ICT Governance Retention" `
-SharePointLocation "https://company.sharepoint.com/sites/ict-governance" `
-TeamsChannelLocation "All"
New-RetentionComplianceRule -Policy "ICT Governance Retention" `
-Name "Governance Document Retention" `
-RetentionDuration 2555 `
-RetentionComplianceAction Keep
# Create security groups for governance access
$groups = @(
@{Name="ICT-Governance-Council"; Description="ICT Governance Council members"},
@{Name="ICT-Domain-Owners"; Description="Domain owners and stewards"},
@{Name="ICT-Governance-Users"; Description="All governance framework users"},
@{Name="ICT-Governance-Admins"; Description="Governance platform administrators"}
)
foreach ($group in $groups) {
New-AzureADGroup -DisplayName $group.Name `
-Description $group.Description `
-SecurityEnabled $true `
-MailEnabled $false
}
Role | Permissions | Platforms |
---|---|---|
Governance Admin | Full administrative access | All platforms |
Council Member | Policy approval, strategic oversight | Teams, SharePoint, Power BI |
Domain Owner | Domain-specific management | Teams, SharePoint, DevOps |
Steward | Implementation and monitoring | Teams, SharePoint, DevOps |
User | Read access, training participation | Teams, SharePoint |
# Configure access reviews
$reviewSettings = @{
displayName = "ICT Governance Access Review"
descriptionForAdmins = "Review access to governance platforms"
descriptionForReviewers = "Please review user access to governance systems"
scope = @{
principalScopes = @(
@{
query = "/groups/ICT-Governance-Users/members"
queryType = "MicrosoftGraph"
}
)
}
reviewers = @(
@{
query = "/groups/ICT-Governance-Admins/members"
queryType = "MicrosoftGraph"
}
)
settings = @{
recurrence = @{
pattern = @{
type = "monthly"
interval = 3
}
}
autoApplyDecisionsEnabled = $false
defaultDecision = "None"
}
}
New-MgIdentityGovernanceAccessReviewDefinition -BodyParameter $reviewSettings
# Enable audit logging for governance platforms
Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true
# Configure audit retention
New-RetentionCompliancePolicy -Name "Governance Audit Logs" `
-ExchangeLocation "All" `
-SharePointLocation "All" `
-TeamsChannelLocation "All"
New-RetentionComplianceRule -Policy "Governance Audit Logs" `
-Name "Audit Log Retention" `
-RetentionDuration 2555 `
-RetentionComplianceAction Keep
Key Metrics to Monitor:
# Create automated governance reports
$reportConfig = @{
Name = "Weekly Governance Platform Report"
Schedule = "Weekly"
Recipients = @("governance-council@company.com")
Metrics = @(
"ActiveUsers",
"DocumentsCreated",
"PoliciesUpdated",
"TrainingCompleted",
"SecurityIncidents"
)
}
# This would integrate with Power Automate for automated report generation
Document Control: