CIS Microsoft Teams Benchmark

Security configuration recommendations for Microsoft Teams enterprise collaboration platform

v1.0.0 01-2025

Overview

▶

This benchmark provides prescriptive guidance for establishing a secure configuration posture for Microsoft Teams. It covers external and guest access, meeting policies, messaging controls, app governance, data loss prevention, identity and access management, and audit logging using Teams Admin Center and PowerShell cmdlets.

16Recommendations
7Sections
2Profile Levels
SectionAreaFocus
1External & Guest AccessFederation restrictions and guest permission controls
2Meeting PoliciesLobby controls, admission settings, and recording policies
3Messaging PoliciesContent restrictions and channel moderation settings
4App GovernanceThird-party app restrictions and sideloading controls
5Data Loss PreventionDLP policy coverage and retention policy configuration
6Identity & AccessConditional access with MFA and sensitivity labeling
7Audit & ComplianceUnified audit logging and communication compliance

Profile Definitions

▶
ProfileDescriptionIntended Use
L1Level 1 — StandardEssential security for all Microsoft Teams deployments; minimal performance impact.
L2Level 2 — HardenedAdvanced hardening for PCI-DSS, HIPAA, or high-security environments.

1 — External & Guest Access

▶

1.1 Federation & Guest Policies

▶
1.1.1 Ensure external access is restricted to approved domains (Automated)
L1 Auto
Description

This setting ensures that external access is restricted to approved domains on the Microsoft Teams collaboration platform. Restricting this capability limits potential abuse and enforces the principle of least privilege across the environment.

Rationale

Unrestricted access to this capability could allow unauthorized users or processes to perform actions beyond their intended scope. Applying least-privilege principles to the Microsoft Teams collaboration platform is essential for defense in depth.

Audit
# Check external access policy:
Get-CsTenantFederationConfiguration | Format-List

# Check allowed domains:
Get-CsAllowedDomain | Format-Table Domain, Action
Remediation
# Restrict external access:
Set-CsTenantFederationConfiguration \
  -AllowPublicUsers $false \
  -AllowFederatedUsers $true \
  -AllowedDomains @{AllowedDomain='partner.com'}

# Block Skype consumer access:
Set-CsTenantFederationConfiguration -AllowPublicUsers $false
1.1.2 Ensure guest access permissions are minimized (Automated)
L1 Auto
Description

This setting ensures that guest access permissions are minimized on the Microsoft Teams collaboration platform. Restricting this capability limits potential abuse and enforces the principle of least privilege across the environment.

Rationale

Unrestricted access to this capability could allow unauthorized users or processes to perform actions beyond their intended scope. Applying least-privilege principles to the Microsoft Teams collaboration platform is essential for defense in depth.

Audit
# Check guest access settings:
Get-CsTeamsGuestCallingConfiguration | Format-List
Get-CsTeamsGuestMeetingConfiguration | Format-List
Get-CsTeamsGuestMessagingConfiguration | Format-List
Remediation
# Restrict guest access:
Set-CsTeamsGuestCallingConfiguration -AllowPrivateCalling $false

Set-CsTeamsGuestMeetingConfiguration \
  -AllowIPVideo $false \
  -ScreenSharingMode Disabled

Set-CsTeamsGuestMessagingConfiguration \
  -AllowUserEditMessage $false \
  -AllowUserDeleteMessage $false \
  -AllowGiphy $false

2 — Meeting Policies

▶

2.1 Meeting Security

▶
2.1.1 Ensure meeting lobby and admission controls are configured (Automated)
L1 Auto
Description

This recommendation verifies that meeting lobby and admission controls are configured on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check meeting policies:
Get-CsTeamsMeetingPolicy -Identity Global | Format-List

# Check lobby settings:
Get-CsTeamsMeetingPolicy | Select-Object Identity, AutoAdmittedUsers, AllowAnonymousUsersToJoinMeeting
Remediation
# Configure secure meeting defaults:
Set-CsTeamsMeetingPolicy -Identity Global \
  -AutoAdmittedUsers 'EveryoneInCompanyExcludingGuests' \
  -AllowAnonymousUsersToJoinMeeting $false \
  -AllowAnonymousUsersToStartMeeting $false \
  -AllowPSTNUsersToBypassLobby $false \
  -DesignatedPresenterRoleMode 'OrganizerOnlyUserOverride'
2.1.2 Ensure meeting recording and transcription policies are set (Automated)
L1 Auto
Description

This recommendation verifies that meeting recording and transcription policies are set on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check meeting recording policy:
Get-CsTeamsMeetingPolicy -Identity Global | \
  Select-Object AllowCloudRecording, AllowRecordingStorageOutsideRegion, \
  RecordingStorageMode
Remediation
# Configure meeting recording:
Set-CsTeamsMeetingPolicy -Identity Global \
  -AllowCloudRecording $true \
  -AllowRecordingStorageOutsideRegion $false \
  -RecordingStorageMode 'OneDriveForBusiness' \
  -AllowTranscription $true \
  -LiveCaptionsEnabledType 'DisabledUserOverride'

3 — Messaging Policies

▶

3.1 Chat & Channel Controls

▶
3.1.1 Ensure messaging policies restrict unsafe content (Automated)
L1 Auto
Description

This recommendation verifies that messaging policies restrict unsafe content on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check messaging policies:
Get-CsTeamsMessagingPolicy -Identity Global | Format-List
Remediation
# Configure secure messaging:
Set-CsTeamsMessagingPolicy -Identity Global \
  -AllowUrlPreviews $true \
  -AllowOwnerDeleteMessage $true \
  -AllowUserEditMessage $true \
  -AllowUserDeleteMessage $true \
  -AllowUserChat $true \
  -AllowGiphy $false \
  -GiphyRatingType 'Strict' \
  -AllowMemes $false \
  -AllowStickers $false \
  -AllowUserTranslation $true
3.1.2 Ensure channel moderation and creation policies are configured (Automated)
L1 Auto
Description

This recommendation verifies that channel moderation and creation policies are configured on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check channel moderation:
Get-CsTeamsChannelPolicy | Format-List

# Check per-team settings (Graph API):
# GET https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}
# Check moderationSettings
Remediation
# Configure channel moderation:
# Via Graph API:
# PATCH https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}
# {
#   "moderationSettings": {
#     "userNewMessageRestriction": "moderators",
#     "replyRestriction": "everyone",
#     "allowNewMessageFromBots": false,
#     "allowNewMessageFromConnectors": false
#   }
# }

# Set channel creation policy:
Set-CsTeamsChannelPolicy -Identity Global \
  -AllowPrivateChannelCreation $false

4 — App Governance

▶

4.1 App Permissions & Setup

▶
4.1.1 Ensure third-party app permissions are restricted (Automated)
L1 Auto
Description

This setting ensures that third-party app permissions are restricted on the Microsoft Teams collaboration platform. Restricting this capability limits potential abuse and enforces the principle of least privilege across the environment.

Rationale

Unrestricted access to this capability could allow unauthorized users or processes to perform actions beyond their intended scope. Applying least-privilege principles to the Microsoft Teams collaboration platform is essential for defense in depth.

Audit
# Check app permission policies:
Get-CsTeamsAppPermissionPolicy -Identity Global | Format-List

# List allowed apps:
Get-CsTeamsAppPermissionPolicy -Identity Global | \
  Select-Object -ExpandProperty DefaultCatalogApps
Remediation
# Restrict app permissions:
Set-CsTeamsAppPermissionPolicy -Identity Global \
  -DefaultCatalogAppsType 'AllowedAppList' \
  -GlobalCatalogAppsType 'AllowedAppList' \
  -PrivateCatalogAppsType 'AllowedAppList'

# Block specific risky apps:
# Teams Admin Center > Teams apps > Permission policies
# Set Third-party apps to 'Block all apps'
# Selectively allow vetted apps
4.1.2 Ensure app sideloading is disabled (Automated)
L1 Auto
Description

This recommendation verifies that app sideloading is disabled on the Microsoft Teams collaboration platform. Disabling or removing unnecessary components reduces the attack surface and limits potential vectors for exploitation.

Rationale

Running unnecessary components on the Microsoft Teams collaboration platform increases the attack surface and the risk of exploitation. Disabling or removing them follows the principle of least functionality and reduces exposure to known vulnerabilities.

Audit
# Check app setup policies:
Get-CsTeamsAppSetupPolicy -Identity Global | Format-List

# Check sideloading:
Get-CsTeamsAppSetupPolicy | \
  Select-Object Identity, AllowSideLoading, AllowUserPinning
Remediation
# Disable app sideloading:
Set-CsTeamsAppSetupPolicy -Identity Global \
  -AllowSideLoading $false \
  -AllowUserPinning $true

# Pin essential apps:
Set-CsTeamsAppSetupPolicy -Identity Global \
  -PinnedAppBarApps @(
    @{Id='com.microsoft.teamspace.tab.wiki'},
    @{Id='com.microsoft.teamspace.tab.planner'}
  )

5 — Data Loss Prevention

▶

5.1 DLP & Retention

▶
5.1.1 Ensure DLP policies cover Teams locations (Automated)
L1 Auto
Description

This recommendation verifies that DLP policies cover Teams locations on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check DLP policies (Security & Compliance Center):
Get-DlpCompliancePolicy | Format-List Name, Mode, Enabled

# Check DLP rules:
Get-DlpComplianceRule | Select-Object Name, ParentPolicyName, BlockAccess
Remediation
# Create DLP policy for Teams:
New-DlpCompliancePolicy -Name 'Teams Sensitive Data' \
  -TeamsLocation All \
  -Mode Enable

New-DlpComplianceRule -Name 'Block SSN sharing' \
  -Policy 'Teams Sensitive Data' \
  -ContentContainsSensitiveInformation @(
    @{Name='U.S. Social Security Number (SSN)'; minCount='1'}
  ) \
  -BlockAccess $true \
  -NotifyUser 'SiteAdmin'
5.1.2 Ensure retention policies are applied to Teams (Automated)
L1 Auto
Description

This recommendation verifies that retention policies are applied to Teams on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check retention policies:
Get-RetentionCompliancePolicy | Where-Object {$_.TeamsChannelLocation} | \
  Format-List Name, Enabled, TeamsChannelLocation

Get-RetentionComplianceRule | Format-List Name, RetentionDuration
Remediation
# Create retention policy for Teams:
New-RetentionCompliancePolicy -Name 'Teams 1 Year Retention' \
  -TeamsChannelLocation All \
  -TeamsChatLocation All \
  -Enabled $true

New-RetentionComplianceRule -Name 'Teams 1 Year Rule' \
  -Policy 'Teams 1 Year Retention' \
  -RetentionDuration 365 \
  -RetentionComplianceAction KeepAndDelete

6 — Identity & Access

▶

6.1 Conditional Access & Classification

▶
6.1.1 Ensure conditional access policies enforce MFA for Teams (Automated)
L1 Auto
Description

This recommendation verifies that conditional access policies enforce MFA for Teams on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check conditional access policies:
Get-AzureADMSConditionalAccessPolicy | \
  Where-Object {$_.Conditions.ClientAppTypes -contains 'All'} | \
  Format-List DisplayName, State, GrantControls

# Check MFA status:
Get-MsolUser -All | Select-Object DisplayName, StrongAuthenticationMethods
Remediation
# Create conditional access policy for Teams:
# Azure AD > Security > Conditional Access > New Policy
# Name: Require MFA for Teams
# Users: All users
# Cloud apps: Microsoft Teams
# Conditions: All client apps
# Grant: Require MFA, Require compliant device
# Session: Sign-in frequency 12 hours

# Via PowerShell:
New-AzureADMSConditionalAccessPolicy \
  -DisplayName 'Secure Teams Access' \
  -State 'Enabled' \
  -Conditions @{
    ClientAppTypes = @('All')
    Applications = @{IncludeApplications = @('cc15fd57-2c6c-4117-a88c-83b1d56b4bbe')}
  } \
  -GrantControls @{
    BuiltInControls = @('mfa', 'compliantDevice')
    Operator = 'AND'
  }
6.1.2 Ensure sensitivity labels are applied to Teams (Manual)
L2 Manual
Description

This recommendation verifies that sensitivity labels are applied to Teams on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check sensitivity labels:
Get-Label | Select-Object DisplayName, Priority, ContentType | Format-Table

# Check label policies:
Get-LabelPolicy | Format-List Name, Labels, Settings
Remediation
# Create and apply sensitivity labels:
New-Label -Name 'Confidential-Teams' \
  -DisplayName 'Confidential' \
  -Tooltip 'For internal use only' \
  -ContentType 'File, Email, Site, UnifiedGroup, Teamwork'

# Create label policy:
New-LabelPolicy -Name 'Teams Classification' \
  -Labels 'Confidential-Teams' \
  -ExchangeLocation All \
  -Settings @{
    mandatory=$true;
    defaultlabel='Confidential-Teams'
  }

7 — Audit & Compliance

▶

7.1 Logging & Monitoring

▶
7.1.1 Ensure unified audit logging captures Teams events (Automated)
L1 Auto
Description

This recommendation verifies that unified audit logging captures Teams events on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check audit log search:
Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-7) \
  -EndDate (Get-Date) -RecordType MicrosoftTeams | \
  Select-Object -First 10 CreationDate, UserIds, Operations
Remediation
# Enable unified audit logging:
Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true

# Search Teams-specific events:
Search-UnifiedAuditLog \
  -StartDate (Get-Date).AddDays(-30) \
  -EndDate (Get-Date) \
  -RecordType MicrosoftTeams \
  -Operations 'TeamCreated','MemberAdded','MemberRemoved','ChannelAdded' \
  -ResultSize 5000 | Export-Csv teams-audit.csv
7.1.2 Ensure communication compliance policies are configured (Manual)
L2 Manual
Description

This recommendation verifies that communication compliance policies are configured on the Microsoft Teams collaboration platform. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Microsoft Teams collaboration platform vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check communication compliance:
Get-SupervisoryReviewPolicyV2 | Format-List Name, IsActive

# Check eDiscovery cases:
Get-ComplianceCase | Format-List Name, Status
Remediation
# Configure communication compliance:
# Microsoft 365 Compliance > Communication Compliance > Policies
# Create policy to monitor:
# - Offensive language
# - Sensitive information sharing
# - Regulatory compliance keywords

# Enable eDiscovery for Teams:
New-ComplianceCase -Name 'Teams Investigation'
New-CaseHoldPolicy -Case 'Teams Investigation' \
  -Name 'Teams Hold' \
  -ExchangeLocation user@example.com