CIS Microsoft Azure Foundations Benchmark v1.3.1
CIS Microsoft Azure Foundations Benchmark v1.3.1
CIS Microsoft Azure Foundations Benchmark v1.3.1
Benchmark
v1.3.1 - 07-21-2021
Terms of Use
Please see the below link for our current terms of use:
https://www.cisecurity.org/cis-securesuite/cis-securesuite-membership-terms-of-use/
1|Page
Table of Contents
2|Page
1.15 Ensure that 'Restrict access to Azure AD administration portal' is set to 'Yes'
(Manual) ............................................................................................................................................. 46
1.16 Ensure that 'Restrict user ability to access groups features in the Access
Pane' is set to 'No' (Manual) ....................................................................................................... 48
1.17 Ensure that 'Users can create security groups in Azure Portals' is set to 'No'
(Manual) ............................................................................................................................................. 50
1.18 Ensure that 'Owners can manage group membership requests in the Access
Panel' is set to 'No' (Manual) ...................................................................................................... 52
1.19 Ensure that 'Users can create Microsoft 365 groups in Azure Portals' is set to
'No' (Manual) .................................................................................................................................... 54
1.20 Ensure that 'Require Multi-Factor Auth to join devices' is set to 'Yes'
(Manual) ............................................................................................................................................. 56
1.21 Ensure that no custom subscription owner roles are created (Automated) . 58
1.22 Ensure Security Defaults is enabled on Azure Active Directory (Automated)
................................................................................................................................................................ 61
1.23 Ensure Custom Role is assigned for Administering Resource Locks (Manual)
................................................................................................................................................................ 63
2 Security Center ........................................................................................................................................... 66
2.1 Ensure that Azure Defender is set to On for Servers (Manual) ............................. 67
2.2 Ensure that Azure Defender is set to On for App Service (Manual)..................... 70
2.3 Ensure that Azure Defender is set to On for Azure SQL database servers
(Manual) ............................................................................................................................................. 73
2.4 Ensure that Azure Defender is set to On for SQL servers on machines (Manual)
................................................................................................................................................................ 76
2.5 Ensure that Azure Defender is set to On for Storage (Manual) ............................. 79
2.6 Ensure that Azure Defender is set to On for Kubernetes (Manual) ..................... 82
2.7 Ensure that Azure Defender is set to On for Container Registries (Manual) ... 85
2.8 Ensure that Azure Defender is set to On for Key Vault (Manual) ......................... 88
2.9 Ensure that Windows Defender ATP (WDATP) integration with Security
Center is selected (Manual) ........................................................................................................ 91
2.10 Ensure that Microsoft Cloud App Security (MCAS) integration with Security
Center is selected (Manual) ........................................................................................................ 94
2.11 Ensure that 'Automatic provisioning of monitoring agent' is set to 'On'
(Automated) ...................................................................................................................................... 97
3|Page
2.12 Ensure any of the ASC Default policy setting is not set to "Disabled" (Manual)
.............................................................................................................................................................. 100
2.13 Ensure 'Additional email addresses' is configured with a security contact
email (Automated) ....................................................................................................................... 102
2.14 Ensure that 'Notify about alerts with the following severity' is set to 'High'
(Automated) .................................................................................................................................... 105
2.15 Ensure that 'All users with the following roles' is set to 'Owner' (Automated)
.............................................................................................................................................................. 108
3 Storage Accounts ..................................................................................................................................... 111
3.1 Ensure that 'Secure transfer required' is set to 'Enabled' (Automated) .......... 112
3.2 Ensure that storage account access keys are periodically regenerated
(Manual) ........................................................................................................................................... 114
3.3 Ensure Storage logging is enabled for Queue service for read, write, and delete
requests (Manual)......................................................................................................................... 117
3.4 Ensure that shared access signature tokens expire within an hour (Manual)
.............................................................................................................................................................. 120
3.5 Ensure that 'Public access level' is set to Private for blob containers
(Automated) .................................................................................................................................... 122
3.6 Ensure default network access rule for Storage Accounts is set to deny
(Automated) .................................................................................................................................... 125
3.7 Ensure 'Trusted Microsoft Services' is enabled for Storage Account access
(Manual) ........................................................................................................................................... 127
3.8 Ensure soft delete is enabled for Azure Storage (Automated) ............................ 129
3.9 Ensure storage for critical data are encrypted with Customer Managed Key
(Automated) .................................................................................................................................... 131
3.10 Ensure Storage logging is enabled for Blob service for read, write, and delete
requests (Manual)......................................................................................................................... 133
3.11 Ensure Storage logging is enabled for Table service for read, write, and
delete requests (Manual) ........................................................................................................... 136
4 Database Services .................................................................................................................................... 139
4.1 SQL Server - Auditing..................................................................................................................... 140
4.1.1 Ensure that 'Auditing' is set to 'On' (Automated) .................................................. 141
4.1.2 Ensure that 'Data encryption' is set to 'On' on a SQL Database (Automated)
.............................................................................................................................................................. 144
4|Page
4.1.3 Ensure that 'Auditing' Retention is 'greater than 90 days' (Automated) ..... 147
4.2 SQL Server - Azure Defender for SQL ...................................................................................... 149
4.2.1 Ensure that Advanced Threat Protection (ATP) on a SQL server is set to
'Enabled' (Automated) ................................................................................................................ 150
4.2.2 Ensure that Vulnerability Assessment (VA) is enabled on a SQL server by
setting a Storage Account (Automated) ............................................................................... 153
4.2.3 Ensure that VA setting Periodic Recurring Scans is enabled on a SQL server
(Automated) .................................................................................................................................... 157
4.2.4 Ensure that VA setting Send scan reports to is configured for a SQL server
(Automated) .................................................................................................................................... 160
4.2.5 Ensure that VA setting 'Also send email notifications to admins and
subscription owners' is set for a SQL server (Automated) ........................................... 163
4.3 PostgreSQL Database Server ...................................................................................................... 166
4.3.1 Ensure 'Enforce SSL connection' is set to 'ENABLED' for PostgreSQL
Database Server (Automated).................................................................................................. 167
4.3.2 Ensure 'Enforce SSL connection' is set to 'ENABLED' for MySQL Database
Server (Automated) ..................................................................................................................... 169
4.3.3 Ensure server parameter 'log_checkpoints' is set to 'ON' for PostgreSQL
Database Server (Automated).................................................................................................. 171
4.3.4 Ensure server parameter 'log_connections' is set to 'ON' for PostgreSQL
Database Server (Automated).................................................................................................. 173
4.3.5 Ensure server parameter 'log_disconnections' is set to 'ON' for PostgreSQL
Database Server (Automated).................................................................................................. 175
4.3.6 Ensure server parameter 'connection_throttling' is set to 'ON' for
PostgreSQL Database Server (Automated) ......................................................................... 177
4.3.7 Ensure server parameter 'log_retention_days' is greater than 3 days for
PostgreSQL Database Server (Automated) ......................................................................... 179
4.3.8 Ensure 'Allow access to Azure services' for PostgreSQL Database Server is
disabled (Manual) ......................................................................................................................... 181
4.4 Ensure that Azure Active Directory Admin is configured (Automated) .......... 184
4.5 Ensure SQL server's TDE protector is encrypted with Customer-managed key
(Automated) .................................................................................................................................... 187
5 Logging and Monitoring ........................................................................................................................ 190
5.1 Configuring Diagnostic Settings ................................................................................................ 191
5|Page
5.1.1 Ensure that a 'Diagnostics Setting' exists (Automated) ...................................... 192
5.1.2 Ensure Diagnostic Setting captures appropriate categories (Automated).. 194
5.1.3 Ensure the storage container storing the activity logs is not publicly
accessible (Automated) .............................................................................................................. 198
5.1.4 Ensure the storage account containing the container with activity logs is
encrypted with BYOK (Use Your Own Key) (Automated)............................................. 201
5.1.5 Ensure that logging for Azure KeyVault is 'Enabled' (Automated) ................ 204
5.2 Monitoring using Activity Log Alerts ....................................................................................... 206
5.2.1 Ensure that Activity Log Alert exists for Create Policy Assignment
(Automated) .................................................................................................................................... 207
5.2.2 Ensure that Activity Log Alert exists for Delete Policy Assignment
(Automated) .................................................................................................................................... 211
5.2.3 Ensure that Activity Log Alert exists for Create or Update Network Security
Group (Automated) ...................................................................................................................... 216
5.2.4 Ensure that Activity Log Alert exists for Delete Network Security Group
(Automated) .................................................................................................................................... 220
5.2.5 Ensure that Activity Log Alert exists for Create or Update Network Security
Group Rule (Automated) ............................................................................................................ 224
5.2.6 Ensure that activity log alert exists for the Delete Network Security Group
Rule (Automated) ......................................................................................................................... 228
5.2.7 Ensure that Activity Log Alert exists for Create or Update Security Solution
(Automated) .................................................................................................................................... 232
5.2.8 Ensure that Activity Log Alert exists for Delete Security Solution
(Automated) .................................................................................................................................... 236
5.2.9 Ensure that Activity Log Alert exists for Create or Update or Delete SQL
Server Firewall Rule (Automated) ......................................................................................... 240
5.3 Ensure that Diagnostic Logs are enabled for all services which support it.
(Automated) .................................................................................................................................... 244
6 Networking ................................................................................................................................................ 249
6.1 Ensure that RDP access is restricted from the internet (Automated) .............. 250
6.2 Ensure that SSH access is restricted from the internet (Automated) ............... 252
6.3 Ensure no SQL Databases allow ingress 0.0.0.0/0 (ANY IP) (Automated) ..... 254
6.4 Ensure that Network Security Group Flow Log retention period is 'greater
than 90 days' (Automated)........................................................................................................ 257
6|Page
6.5 Ensure that Network Watcher is 'Enabled' (Manual) .............................................. 259
6.6 Ensure that UDP Services are restricted from the Internet (Automated) ....... 261
7 Virtual Machines ...................................................................................................................................... 263
7.1 Ensure Virtual Machines are utilizing Managed Disks (Manual) ........................ 264
7.2 Ensure that 'OS and Data' disks are encrypted with CMK (Automated) .......... 267
7.3 Ensure that 'Unattached disks' are encrypted with CMK (Automated) ........... 270
7.4 Ensure that only approved extensions are installed (Manual) ............................ 273
7.5 Ensure that the latest OS Patches for all Virtual Machines are applied (Manual)
.............................................................................................................................................................. 275
7.6 Ensure that the endpoint protection for all Virtual Machines is installed
(Manual) ........................................................................................................................................... 277
7.7 Ensure that VHD's are encrypted (Manual) ................................................................ 279
8 Other Security Considerations ........................................................................................................... 282
8.1 Ensure that the expiration date is set on all keys (Automated) .......................... 283
8.2 Ensure that the expiration date is set on all Secrets (Automated) ..................... 286
8.3 Ensure that Resource Locks are set for mission critical Azure resources
(Manual) ........................................................................................................................................... 288
8.4 Ensure the key vault is recoverable (Automated) .................................................... 290
8.5 Enable role-based access control (RBAC) within Azure Kubernetes Services
(Automated) .................................................................................................................................... 293
9 AppService ................................................................................................................................................. 295
9.1 Ensure App Service Authentication is set on Azure App Service (Automated)
.............................................................................................................................................................. 296
9.2 Ensure web app redirects all HTTP traffic to HTTPS in Azure App Service
(Automated) .................................................................................................................................... 299
9.3 Ensure web app is using the latest version of TLS encryption (Automated) . 301
9.4 Ensure the web app has 'Client Certificates (Incoming client certificates)' set
to 'On' (Automated) ..................................................................................................................... 303
9.5 Ensure that Register with Azure Active Directory is enabled on App Service
(Automated) .................................................................................................................................... 305
9.6 Ensure that 'PHP version' is the latest, if used to run the web app (Manual) 307
9.7 Ensure that 'Python version' is the latest, if used to run the web app (Manual)
.............................................................................................................................................................. 310
7|Page
9.8 Ensure that 'Java version' is the latest, if used to run the web app (Manual) 313
9.9 Ensure that 'HTTP Version' is the latest, if used to run the web app (Manual)
.............................................................................................................................................................. 316
9.10 Ensure FTP deployments are disabled (Automated) ............................................ 319
9.11 Ensure Azure Keyvaults are used to store secrets (Manual) ............................. 322
Appendix: Recommendation Summary Table ...................................................................................... 326
Appendix: Change History ............................................................................................................................ 332
8|Page
Overview
This document, CIS Microsoft Azure Foundations Security Benchmark, provides
prescriptive guidance for establishing a secure baseline configuration for Microsoft Azure.
The scope of this benchmark is to establish the foundation level of security for anyone
adopting Microsoft Azure Cloud. The benchmark is, however, not an exhaustive list of all
possible security configurations and architecture. You should take the benchmark as a
starting point and do the required site-specific tailoring wherever needed and when it is
prudent to do so.
To obtain the latest version of this guide, please visit https://www.cisecurity.org/cis-
benchmarks/. If you have questions, comments, or have identified ways to improve this
guide, please write us at benchmarkinfo@cisecurity.org.
Intended Audience
This document is intended for system and application administrators, security specialists,
auditors, help desk, and platform deployment personnel who plan to develop, deploy,
assess, or secure solutions that incorporate Microsoft Azure.
Consensus Guidance
This benchmark was created using a consensus review process comprised of subject
matter experts. Consensus participants provide perspective from a diverse set of
backgrounds including consulting, software development, audit and compliance, security
research, operations, government, and legal.
Each CIS benchmark undergoes two phases of consensus review. The first phase occurs
during initial benchmark development. During this phase, subject matter experts convene
to discuss, create, and test working drafts of the benchmark. This discussion occurs until
consensus has been reached on benchmark recommendations. The second phase begins
after the benchmark has been published. During this phase, all feedback provided by the
Internet community is reviewed by the consensus team for incorporation in the
benchmark. If you are interested in participating in the consensus process, please visit
https://workbench.cisecurity.org/.
9|Page
Typographical Conventions
The following typographical conventions are used throughout this guide:
Convention Meaning
Stylized Monospace font Used for blocks of code, command, and script examples.
Text should be interpreted exactly as presented.
Monospace font Used for inline code, commands, or examples. Text should
be interpreted exactly as presented.
<italic font in brackets> Italic texts set in angle brackets denote a variable
requiring substitution for a real value.
Assessment Status
An assessment status is included for every recommendation. The assessment status
indicates whether the given recommendation can be automated or requires manual steps
to implement. Both statuses are equally important and are determined and supported as
defined below:
Automated
Manual
10 | P a g e
Profile Definitions
The following configuration profiles are defined by this Benchmark:
Level 1
Level 2
This profile extends the "Level 1" profile. Items in this profile exhibit one or more of
the following characteristics:
o are intended for environments or use cases where security is more critical
than manageability and usability
o acts as defense in depth measure
o may impact the utility or performance of the technology
o may include additional licensing, cost, or addition of third party software
11 | P a g e
Acknowledgements
This benchmark exemplifies the great things a community of users, vendors, and subject matter
experts can accomplish through consensus collaboration. The CIS community thanks the entire
consensus team with special recognition to the following individuals who contributed greatly to
the creation of this guide:
Contributor
Gururaj Pandurangi
Ben Layer
Felix Simmons
Jonathan Trull
Pravin Goyal
Pradeep R B
Prabhu Angadi
Robin Drake
Shobha H D
Rahul Khengare
Jesse Mrasek
Kesten Broughton
Himalay Kondekar
JR Aquino
Jeremie Kass
Sujit Singh
Robert Burton
Clément Bonnet
Lewis Matlock
Clifford Moten
Mike Wicks
Sean Decker
Phil White
Ronit Reger
Jim Cheng
Editor
Parag Patil
Iben Rodriguez
12 | P a g e
13 | P a g e
Recommendations
1 Identity and Access Management
This section covers security recommendations that to follow to set identity and access
management policies on an Azure Subscription. Identity and Access Management policies
are the first step towards a defense-in-depth approach to securing an Azure Cloud Platform
environment.
Most of the recommendations from this section are marked as "Not Scored" because of the
lack of "Azure native CLI and API support" to perform the respective audits. However, from
a security posture standpoint, these recommendations are important. According to the last
communication with the Microsoft Support team regarding "Azure native CLI and API
support", Microsoft teams are working to enhance "Microsoft graph API" to support all
these "Azure AD" functionalities. Once we get this capability through "Microsoft Graph
API", we will update the involved recommendations with the respective audit and
remediation steps to make them as scored.
14 | P a g e
1.1 Ensure that multi-factor authentication is enabled for all privileged
users (Manual)
Profile Applicability:
Level 1
Description:
Enable multi-factor authentication for all user credentials who have write access to Azure
resources. These include roles like
Service Co-Administrators
Subscription Owners
Contributors
Rationale:
Impact:
Users would require two forms of authentication before any action is granted. Also, this
requires an overhead for managing dual forms of authentication.
Audit:
15 | P a g e
Microsoft Graph API
For Every Subscription, For Every Tenant
Step 1: Identify Users with Administrative Access
GET https://graph.microsoft.com/v1.0/users
https://management.azure.com/subscriptions/:subscriptionId/providers/Microsof
t.Authorization/roleDefinitions?api-version=2017-05-01
Capture Role Definition IDs/Name ($name) and role names ($properties/roleName) where
"properties/roleName" contains (Owner or *contributor or admin )
3. List All Role Assignments (Mappings $A.uid to $B.name) Using Azure Management
API:
GET
https://management.azure.com/subscriptions/:subscriptionId/providers/Microsof
t.Authorization/roleassignments?api-version=2017-10-01-preview
If the output contains any of the $D.userPrincipalName, then this recommendation is non-
compliant.
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation. Only option is MSOL
16 | P a g e
Remediation:
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-
authentication
2. https://stackoverflow.com/questions/41156206/azure-active-directory-premium-
mfa-attributes-via-graph-api
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-4-use-strong-authentication-controls-for-all-azure-
active-directory-based-access
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
17 | P a g e
1.2 Ensure that multi-factor authentication is enabled for all non-
privileged users (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Impact:
Users would require two forms of authentication before any action is granted. Also, this
requires an overhead for managing dual forms of authentication.
Audit:
GET https://graph.microsoft.com/v1.0/users
18 | P a g e
2. List all Role Definitions Using Azure management API:
https://management.azure.com/subscriptions/:subscriptionId/providers/Microsof
t.Authorization/roleDefinitions?api-version=2017-05-01
Capture Role Definition IDs/Name ($name) and role names ($properties/roleName) where
"properties/roleName" does NOT contain (Owner or *contributor or admin )
3. List All Role Assignments (Mappings $A.uid to $B.name) Using Azure Management
API:
GET
https://management.azure.com/subscriptions/:subscriptionId/providers/Microsof
t.Authorization/roleassignments?api-version=2017-10-01-preview
If the output contains any of the $D.userPrincipleName, then this recommendation is non-
compliant.
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation. Only option is MSOL
Remediation:
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-
authentication
19 | P a g e
2. https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-
mfa-userstates
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-4-use-strong-authentication-controls-for-all-azure-
active-directory-based-access
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
20 | P a g e
1.3 Ensure guest users are reviewed on a monthly basis (Automated)
Profile Applicability:
Level 1
Description:
Azure AD is extended to include Azure AD B2B collaboration, allowing you to invite people
from outside your organization to be guest users in your cloud account and sign in with
their own work, school, or social identities. Guest users allow you to share your company's
applications and services with users from any other organization, while maintaining
control over your own corporate data.
Work with external partners, large or small, even if they don't have Azure AD or an IT
department. A simple invitation and redemption process lets partners use their own
credentials to access your company's resources a a guest user.
Rationale:
Guest users in the Azure AD are generally required for collaboration purposes in Office
365, and may also be required for Azure functions in enterprises with multiple Azure
tenants, Guest users should be reviewed on a regular basis, at least annually, Guest users
should not be granted administrative roles where possible.
Guest users are typically added outside your employee on-boarding/off-boarding process
and could potentially be overlooked indefinitely leading to a potential vulnerability.
Guest users should be review on a monthly basis to ensure that inactive and unneeded
accounts are removed.
Impact:
Until you have a business need to provide guest access to any user, avoid creating guest
users. If guest accounts are being used, they should be removed when no longer required.
Audit:
21 | P a g e
5. Ensure that guest users listed are still required (USER TYPE = Guest)
Ensure all users listed are not inactive and still required.
Using PowerShell
Remediation:
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/b2b/user-properties
2. https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/add-
users-azure-active-directory#delete-a-user
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-3-review-and-reconcile-user-access-regularly
22 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
23 | P a g e
1.4 Ensure that 'Allow users to remember multi-factor authentication on
devices they trust' is 'Disabled' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Impact:
For every login attempt, the user will be required to perform multi-factor authentication.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
24 | P a g e
2. Go to Users
3. Go to All Users
4. Click on Multi-Factor Authentication button on the top bar
5. Click on service settings
6. Disable Allow users to remember multi-factor authentication on devices
they trust
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-
authentication-whats-next#remember-multi-factor-authentication-for-devices-that-
users-trust
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-4-use-strong-authentication-controls-for-all-azure-
active-directory-based-access
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
25 | P a g e
1.5 Ensure that 'Number of methods required to reset' is set to '2'
(Manual)
Profile Applicability:
Level 1
Description:
Ensure that two alternate forms of identification are provided before allowing a password
reset.
Rationale:
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
26 | P a g e
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-
passwords-faq#password-reset-registration
2. https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-
sspr-deployment
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-4-use-strong-authentication-controls-for-all-azure-
active-directory-based-access
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
27 | P a g e
1.6 Ensure that 'Number of days before users are asked to re-confirm
their authentication information' is not set to "0" (Manual)
Profile Applicability:
Level 1
Description:
Ensure that the number of days before users are asked to re-confirm their authentication
information is not set to 0.
Rationale:
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
28 | P a g e
Default Value:
By default, the 'Number of days before users are asked to re-confirm their authentication
information' is set to '180 days'.
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-
passwords-how-it-works#registration
2. https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-
sspr-deployment
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
29 | P a g e
1.7 Ensure that 'Notify users on password resets?' is set to 'Yes'
(Manual)
Profile Applicability:
Level 1
Description:
Ensure that users are notified on their primary and secondary emails on password resets.
Rationale:
User notification on password reset is a passive way of confirming password reset activity.
It helps the user to recognize unauthorized password reset activities.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Default Value:
30 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-
passwords-how-it-works#notifications
2. https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-
sspr-deployment
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
31 | P a g e
1.8 Ensure that 'Notify all admins when other admins reset their
password?' is set to 'Yes' (Manual)
Profile Applicability:
Level 2
Description:
Ensure that all administrators are notified if any other administrator resets their password.
Rationale:
Administrator accounts are sensitive. Any password reset activity notification, when sent
to all administrators, ensures that all administrators can passively confirm if such a reset is
a common pattern within their group. For example, if all administrators change their
password every 30 days, any password reset activity before that may require
administrator(s) to evaluate any unusual activity and confirm its origin.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
32 | P a g e
Default Value:
By default, 'Notify all admins when other admins reset their password?' is set to 'No'.
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-
passwords-how-it-works#notifications
2. https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-
sspr-deployment
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
33 | P a g e
1.9 Ensure that 'Users can consent to apps accessing company data on
their behalf' is set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Impact:
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Using PowerShell
Connect-MsolService
Get-MsolCompanyInformation | Select-Object
UsersPermissionToUserConsentToAppEnabled
34 | P a g e
Remediation:
Azure Console
Default Value:
By default, 'Users can consent to apps accessing company data on their behalf' is set to
'Yes'.
References:
1. https://blogs.msdn.microsoft.com/exchangedev/2014/06/05/managing-user-
consent-for-applications-using-office-365-apis/
2. https://nicksnettravels.builttoroam.com/post/2017/01/24/Admin-Consent-for-
Permissions-in-Azure-Active-Directory.aspx
3. https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-
user-consent#configure-user-consent-to-applications
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
35 | P a g e
1.10 Ensure that 'Users can add gallery apps to their Access Panel' is set
to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Impact:
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
36 | P a g e
5. Set Users can add gallery apps to their Access Panel to No
Default Value:
By default, 'Users can add gallery apps to their Access Panel' is set to 'No'.
References:
1. https://blogs.msdn.microsoft.com/exchangedev/2014/06/05/managing-user-
consent-for-applications-using-office-365-apis/
2. https://nicksnettravels.builttoroam.com/post/2017/01/24/Admin-Consent-for-
Permissions-in-Azure-Active-Directory.aspx
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-1-define-asset-management-and-data-protection-
strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
37 | P a g e
1.11 Ensure that 'Users can register applications' is set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Impact:
This might create additional requests that administrators need to fulfill quite often.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Using PowerShell
Connect-MsolService
Get-MsolCompanyInformation | Select-Object
UsersPermissionToCreateLOBAppsEnabled
Remediation:
38 | P a g e
2. Go to Users
3. Go to User settings
4. Set Users can register applications to No
Default Value:
References:
1. https://blogs.msdn.microsoft.com/exchangedev/2014/06/05/managing-user-
consent-for-applications-using-office-365-apis/
2. https://nicksnettravels.builttoroam.com/post/2017/01/24/Admin-Consent-for-
Permissions-in-Azure-Active-Directory.aspx
3. https://docs.microsoft.com/en-us/azure/active-directory/develop/active-
directory-how-applications-are-added#who-has-permission-to-add-applications-
to-my-azure-ad-instance
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-1-define-asset-management-and-data-protection-
strategy
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
39 | P a g e
1.12 Ensure that 'Guest user permissions are limited' is set to 'Yes'
(Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Limiting guest access ensures that guest accounts do not have permission for certain
directory tasks, such as enumerating users, groups or other directory resources, and
cannot be assigned to administrative roles in your directory. If guest access in not limited,
they have the same access to directory data as regular users.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Default Value:
40 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/users-
default-permissions#member-and-guest-users
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
41 | P a g e
1.13 Ensure that 'Members can invite' is set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Restricting invitations to administrators ensures that only authorized accounts have access
to cloud resources. This helps to maintain "Need to Know" permissions and prevents
inadvertent access to data.
By default the setting Admins and users in the guest inviter role can invite is set
to yes. This will allow you to use the inviter role to control who will be able to invite
guests to the tenant.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Default Value:
42 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-b2b-
delegate-invitations
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
43 | P a g e
1.14 Ensure that 'Guests can invite' is set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Restrict guest being able to invite other guests to collaborate with your organization.
Rationale:
Restricting invitations to administrators ensures that only authorized accounts have access
to cloud resources. This helps to maintain "Need to Know" permissions and prevents
inadvertent access to data.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-b2b-
delegate-invitations
44 | P a g e
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
45 | P a g e
1.15 Ensure that 'Restrict access to Azure AD administration portal' is
set to 'Yes' (Manual)
Profile Applicability:
Level 1
Description:
Rationale:
The Azure AD administrative portal has sensitive data. All non-administrators should be
prohibited from accessing any Azure AD data in the administration portal to avoid
exposure.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Default Value:
46 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-assign-
admin-roles-azure-portal
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
47 | P a g e
1.16 Ensure that 'Restrict user ability to access groups features in the
Access Pane' is set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Self-service group management enables users to create and manage security groups or
Office 365 groups in Azure Active Directory (Azure AD). Unless a business requires this
day-to-day delegation for some users, self-service group management should be disabled.
Impact:
Enabling this setting could create a number of request that would need to me managed by
administrators.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
48 | P a g e
Default Value:
By default, Restrict user ability to access groups features in the Access Pane is
set to No.
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-
accessmanagement-self-service-group-management
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
49 | P a g e
1.17 Ensure that 'Users can create security groups in Azure Portals' is
set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
When creating security groups is enabled, all users in the directory are allowed to create
new security groups and add members to those groups. Unless a business requires this
day-to-day delegation, security group creation should be restricted to administrators only.
Impact:
Enabling this setting could create a number of request that would need to be managed by
an administrator.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
50 | P a g e
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-
accessmanagement-self-service-group-management#making-a-group-available-for-
end-user-self-service
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
51 | P a g e
1.18 Ensure that 'Owners can manage group membership requests in
the Access Panel' is set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Default Value:
By default, Owners can manage group membership requests in the Access Panel is set
to No.
52 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/active-directory-
accessmanagement-self-service-group-management#making-a-group-available-for-
end-user-self-service
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-8-choose-approval-process-for-microsoft-support
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
53 | P a g e
1.19 Ensure that 'Users can create Microsoft 365 groups in Azure
Portals' is set to 'No' (Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Restricting Microsoft 365 group creation to administrators only ensures that creation of
Microsoft 365 groups is controlled by the administrator. Appropriate groups should be
created and managed by the administrator and group creation rights should not be
delegated to any other user.
Impact:
Enabling this setting could create a number of request that would need to be managed by
an administrator.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
54 | P a g e
Default Value:
By default, Users can create Microsoft 365 groups in Azure Portals is set to Yes.
References:
1. https://whitepages.unlimitedviz.com/2017/01/disable-office-365-groups-2/
2. https://support.office.com/en-us/article/Control-who-can-create-Office-365-
Groups-4c46c8cb-17d0-44b5-9776-005fced8e618
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
55 | P a g e
1.20 Ensure that 'Require Multi-Factor Auth to join devices' is set to 'Yes'
(Manual)
Profile Applicability:
Level 1
Description:
Rationale:
Multi-factor authentication is recommended when adding devices to Azure AD. When set to
"Yes", users who are adding devices from the internet must first use the second method of
authentication before their device is successfully added to the directory. This ensures that
rogue devices are not added to the directory for a compromised user account.
Audit:
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Default Value:
56 | P a g e
References:
1. https://blogs.technet.microsoft.com/janketil/2016/02/29/azure-mfa-for-
enrollment-in-intune-and-azure-ad-device-registration-explained/
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-4-use-strong-authentication-controls-for-all-azure-
active-directory-based-access
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
57 | P a g e
1.21 Ensure that no custom subscription owner roles are created
(Automated)
Profile Applicability:
Level 2
Description:
Subscription ownership should not include permission to create custom owner roles. The
principle of least privilege should be followed and only necessary privileges should be
assigned instead of allowing full administrative access.
Rationale:
Classic subscription admin roles offer basic access management and include Account
Administrator, Service Administrator, and Co-Administrators. It is recommended the least
necessary permissions be given initially. Permissions can be added as needed by the
account holder. This ensures the account holder cannot perform actions which were not
intended.
Audit:
Connect-AzAccount
Get-AzRoleDefinition |Where-Object {($.IsCustom -eq $true) -and ($.Name -like
"Owner")}
Review output for each returned role's 'AssignableScopes' value for '/' or the current
subscription, and 'Actions' containing the '*' wildcard character.
Remediation:
58 | P a g e
Check for entries with assignableScope of / or a subscription, and an action of *
Verify the usage and impact of removing the role identified
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/billing/billing-add-change-azure-
subscription-administrator
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
8. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
9. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-7-follow-just-enough-administration-least-privilege-
principle
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
59 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
60 | P a g e
1.22 Ensure Security Defaults is enabled on Azure Active Directory
(Automated)
Profile Applicability:
Level 1
Description:
Security defaults in Azure Active Directory (Azure AD) make it easier to be secure and help
protect your organization. Security defaults contain preconfigured security settings for
common attacks.
Microsoft is making security defaults available to everyone. The goal is to ensure that all
organizations have a basic level of security-enabled at no extra cost. You turn on security
defaults in the Azure portal.
Rationale:
Security defaults provide secure default settings that we manage on behalf of organizations
to keep customers safe until they are ready to manage their own identity security settings.
Impact:
Enabling security defaults may negatively impact the functionality of other Microsoft
services, such as MS365. This recommendation should be implemented initially and then
may be overridden by other service/product specific CIS Benchmarks.
Audit:
61 | P a g e
4. Verify the Enable security defaults toggle to Yes.
Remediation:
References:
1. https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/concept-
fundamentals-security-defaults
2. https://techcommunity.microsoft.com/t5/azure-active-directory-
identity/introducing-security-defaults/ba-p/1061414
Additional Information:
The setting in this recommendation are different in the Microsoft 365 Benchmark. This is
because the potential impact associated with disabling of Security Defaults is dependent
upon the security settings implemented in the environment. It is recommended that
organizations disabling Security Defaults plan to implement equivalent settings to replace
the settings configured by Security Defaults.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
v7 13 Data Protection
Data Protection
62 | P a g e
1.23 Ensure Custom Role is assigned for Administering Resource Locks
(Manual)
Profile Applicability:
Level 2
Description:
Rationale:
Given the resource lock functionality is outside of standard Role Based Access
Control(RBAC), it would be prudent to create a resource lock administrator role to prevent
inadvertent unlocking of resources.
Impact:
By adding this role is you can have specific permissions granted for managing just resource
locks rather than needing to provide the wide owner or contributor role reducing the risk
of the user being able to do unintentional damage.
Audit:
1. In the Azure portal, open a subscription or resource group where you want the view
assigned roles.
2. Select Access control (IAM)
3. Select Roles
4. Search for the custom role named <role_name> Ex. from remediation "Resource
Lock Administrator"
5. ensure that the role is assigned the appropriate user/users
Remediation:
1. In the Azure portal, open a subscription or resource group where you want the
custom role to be assignable.
2. Select Access control (IAM)
63 | P a g e
3. Click Add
4. Select Add custom role`.
5. In the Custom Role Name field enter Resource Lock Administrator
6. In the Description field enter Can Administer Resource Locks
7. For Baseline permissions select Start from scratch
8. Click next
9. In the Permissions tab select Add permissions
10. in the Search for a permission box, type in Microsoft.Authorization/locks to
search for permissions.
11. Select the check box next to the permission called Microsoft.Authorization/locks
12. click add
13. Click Review+create
14. Click Create
Import-Module Az.Accounts
Connect-AzAccount
$role.AssignableScopes.Add("/providers/Microsoft.Management/managementGroups/
MG-Name")
References:
1. https://docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles
2. https://docs.microsoft.com/en-us/azure/role-based-access-control/check-access
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
64 | P a g e
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-7-follow-just-enough-administration-least-privilege-
principle
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
8. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
65 | P a g e
2 Security Center
This section covers security recommendations to follow when setting various security
policies on an Azure Subscription. A security policy defines the set of controls, which are
recommended for resources within the specified Azure subscription. Please note that the
majority of the recommendations mentioned in this section only produce an alert if a
security violation is found. They do not actually enforce security settings by themselves.
Alerts should be acted upon and remedied wherever possible.
66 | P a g e
2.1 Ensure that Azure Defender is set to On for Servers (Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for Server, providing threat
intelligence, anomaly detection, and behavior analytics in the Azure Security Center.
Rationale:
Enabling Azure Defender for Servers allows for greater defense-in-depth, with threat
detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the Servers resource type Plan should be set to
On.
Using PowerShell
Connect-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'VirtualMachines'} |
Select-Object Name, PricingTier
67 | P a g e
Ensure output of command is VirtualMachines Standard
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for Servers Select On under Plan.
6. Select Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
VirtualMachines",
"name": "VirtualMachines",
"type": "Microsoft.Security/pricings",
"properties": {
"pricingTier": "Standard"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
68 | P a g e
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-endpoint-security#es-1-use-endpoint-detection-and-response-edr
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
69 | P a g e
2.2 Ensure that Azure Defender is set to On for App Service (Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for App Service, providing threat
intelligence, anomaly detection, and behavior analytics in the Azure Security Center.
Rationale:
Enabling Azure Defender for App Service allows for greater defense-in-depth, with threat
detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the App Service resource type Plan should be
set to On.
Using PowerShell
Get-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'AppServices'} | Select-
Object Name, PricingTier
70 | P a g e
Ensure output of Name PricingTier is AppServices Standard
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for App Service Select On under Plan.
6. Select `Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
AppServices",
"name": "AppServices",
"type": "Microsoft.Security/pricings",
"properties": {
"pricingTier": "Standard"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
71 | P a g e
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
72 | P a g e
2.3 Ensure that Azure Defender is set to On for Azure SQL database
servers (Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for Azure SQL database servers,
providing threat intelligence, anomaly detection, and behavior analytics in the Azure
Security Center.
Rationale:
Enabling Azure Defender for Azure SQL database servers allows for greater defense-in-
depth, with threat detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the Azure SQL database servers resource type
Plan should be set to On.
73 | P a g e
Using PowerShell
Connect-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'SqlServers'} | Select-
Object Name, PricingTier
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for Azure SQL database servers Select On under Plan.
6. Select Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
SqlServers",
"name": "SqlServers",
"type": "Microsoft.Security/pricings",
"properties": {
"pricingTier": "Standard"
}
}
Default Value:
74 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-3-monitor-for-unauthorized-transfer-of-sensitive-data
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
75 | P a g e
2.4 Ensure that Azure Defender is set to On for SQL servers on machines
(Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for SQL servers on machines,
providing threat intelligence, anomaly detection, and behavior analytics in the Azure
Security Center.
Rationale:
Enabling Azure Defender for SQL servers on machines allows for greater defense-in-depth,
with threat detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the SQL Servers on machines resource type
Plan should be set to On.
76 | P a g e
Using PowerShell
Get-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'StorageAccounts'} |
Select-Object Name, PricingTier
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for SQL Servers on machines Select On under Plan.
6. Select Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
StorageAccounts",
"name": "StorageAccounts",
"type": "Microsoft.Security/pricings",
"properties": {
"SqlserverVirtualMachines": "Standard"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/defender-for-sql-usage
77 | P a g e
2. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-3-monitor-for-unauthorized-transfer-of-sensitive-data
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
78 | P a g e
2.5 Ensure that Azure Defender is set to On for Storage (Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for Storage, providing threat
intelligence, anomaly detection, and behavior analytics in the Azure Security Center.
Rationale:
Enabling Azure Defender for Storage allows for greater defense-in-depth, with threat
detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the Storage resource type Plan should be set to
On.
Using PowerShell
Get-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'StorageAccounts'} |
Select-Object Name, PricingTier
79 | P a g e
Ensure output for Name PricingTier is StorageAccounts Standard
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for Storage Select On under Plan.
6. Select Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
StorageAccounts",
"name": "StorageAccounts",
"type": "Microsoft.Security/pricings",
"properties": {
"pricingTier": "Standard"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
80 | P a g e
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-endpoint-security#es-1-use-endpoint-detection-and-response-edr
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
81 | P a g e
2.6 Ensure that Azure Defender is set to On for Kubernetes (Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for Kubernetes, providing threat
intelligence, anomaly detection, and behavior analytics in the Azure Security Center.
Rationale:
Enabling Azure Defender for Kubernetes allows for greater defense-in-depth, with threat
detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the Kubernetes resource type Plan should be set
to On.
Using PowerShell
Get-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'KubernetesService'} |
Select-Object Name, PricingTier
82 | P a g e
Ensure output for Name PricingTier is KubernetesService Standard
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for Kubernetes Select On under Plan.
6. Select Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
StorageAccounts",
"name": "KubernetesService",
"type": "Microsoft.Security/pricings",
"properties": {
"pricingTier": "Standard"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/list
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
3. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
83 | P a g e
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
84 | P a g e
2.7 Ensure that Azure Defender is set to On for Container Registries
(Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for Container Registries, providing
threat intelligence, anomaly detection, and behavior analytics in the Azure Security Center.
Rationale:
Enabling Azure Defender for Container Registries allows for greater defense-in-depth, with
threat detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the Container Registries resource type Plan
should be set to On.
85 | P a g e
Using PowerShell
Get-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'ContainerRegistry'} |
Select-Object Name, PricingTier
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for Container Registries Select On under Plan.
6. Select Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
StorageAccounts",
"name": "ContainerRegistry",
"type": "Microsoft.Security/pricings",
"properties": {
"pricingTier": "Standard"
}
}
Default Value:
86 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-endpoint-security#es-1-use-endpoint-detection-and-response-edr
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
87 | P a g e
2.8 Ensure that Azure Defender is set to On for Key Vault (Manual)
Profile Applicability:
Level 2
Description:
Turning on Azure Defender enables threat detection for Key Vault, providing threat
intelligence, anomaly detection, and behavior analytics in the Azure Security Center.
Rationale:
Enabling Azure Defender for Key Vault allows for greater defense-in-depth, with threat
detection provided by the Microsoft Security Response Center (MSRC).
Impact:
Turning on Azure Defender in Azure Security Center incurs an additional cost per resource.
Audit:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. Review the chosen pricing tier. For the Key Vault resource type Plan should be set
to On.
Using PowerShell
Get-AzAccount
Get-AzSecurityPricing | Where-Object {$_.Name -eq 'StorageAccounts'} |
Select-Object Name, PricingTier
88 | P a g e
Ensure output for Name PricingTier is KeyVaults Standard
Remediation:
1. Go to Security Center
2. Select Pricing & settings blade
3. Click on the subscription name
4. Select the Azure Defender plans blade
5. On the line in the table for Key Vault Select On under Plan.
6. Select Save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/pricings/
StorageAccounts",
"name": "KeyVaults",
"type": "Microsoft.Security/pricings",
"properties": {
"pricingTier": "Standard"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-
detection-capabilities
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/pricings/update
4. https://docs.microsoft.com/en-us/powershell/module/az.security/get-
azsecuritypricing
89 | P a g e
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-8-secure-user-access-to-legacy-applications
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
90 | P a g e
2.9 Ensure that Windows Defender ATP (WDATP) integration with
Security Center is selected (Manual)
Profile Applicability:
Level 2
Description:
This setting enables Windows Defender ATP (WDATP) integration with Security Center.
Rationale:
Impact:
WDATP works with Standard pricing tier Subscription.Choosing the Standard pricing tier
of Azure Security Center incurs an additional cost per resource.
Audit:
91 | P a g e
ttings?api-version=2019-01-01' | jq '.|.value[] | select(.name=="WDATP")'|jq
'.properties.enabled'
Remediation:
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/settings/
WDATP",
"kind": "DataExportSetting",
"type": "Microsoft.Security/settings",
"properties": {
"enabled": true
}
}
References:
1. https://docs.microsoft.com/en-in/azure/security-center/security-center-wdatp
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/settings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/settings/update
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-endpoint-security#es-1-use-endpoint-detection-and-response-edr
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-endpoint-security#es-2-use-centrally-managed-modern-anti-malware-software
92 | P a g e
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
93 | P a g e
2.10 Ensure that Microsoft Cloud App Security (MCAS) integration with
Security Center is selected (Manual)
Profile Applicability:
Level 2
Description:
This setting enables Microsoft Cloud App Security (MCAS) integration with Security Center.
Rationale:
Security Center offers an additional layer of protection by using Azure Resource Manager
events, which is considered to be the control plane for Azure. By analyzing the Azure
Resource Manager records, Security Center detects unusual or potentially harmful
operations in the Azure subscription environment. Several of the preceding analytics are
powered by Microsoft Cloud App Security. To benefit from these analytics, subscription
must have a Cloud App Security license.
Impact:
MCAS works with Standard pricing tier Subscription.Choosing the Standard pricing tier of
Azure Security Center incurs an additional cost per resource.
Audit:
94 | P a g e
https://management.azure.com/subscriptions/$0/providers/Microsoft.Security/se
ttings?api-version=2019-01-01' | jq '.|.value[] | select(.name=="MCAS")'|jq
'.properties.enabled'
Remediation:
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/settings/
MCAS",
"kind": "DataExportSetting",
"type": "Microsoft.Security/settings",
"properties": {
"enabled": true
}
}
Default Value:
With Cloud App Security license, these alerts are enabled by default.
References:
1. https://docs.microsoft.com/en-in/azure/security-center/security-center-alerts-
service-layer#azure-management-layer-azure-resource-manager-preview
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/settings/list
3. https://docs.microsoft.com/en-us/rest/api/securitycenter/settings/update
95 | P a g e
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-8-secure-user-access-to-legacy-applications
CIS Controls:
v7 8 Malware Defenses
Malware Defenses
96 | P a g e
2.11 Ensure that 'Automatic provisioning of monitoring agent' is set to
'On' (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
When Automatic provisioning of monitoring agent is turned on, Azure Security Center
provisions the Microsoft Monitoring Agent on all existing supported Azure virtual
machines and any new ones that are created. The Microsoft Monitoring Agent scans for
various security-related configurations and events such as system updates, OS
vulnerabilities, endpoint protection, and provides alerts.
Audit:
1. Go to Security Center
2. Click on Pricing & Settings
3. Click on a subscription
4. Click on Data Collection
5. Ensure that Automatic provisioning is set to On
Using PowerShell
Connect-AzAccount
Get-AzSecurityAutoProvisioningSetting
97 | P a g e
Ensure output for Id Name AutoProvision' is
/subscriptions//providers/Microsoft.Security/autoProvisioningSettings/default default
On`
Remediation:
1. Go to Security Center
2. Click on Pricing & Settings
3. Click on a subscription
4. Click on Data Collection
5. Set Automatic provisioning to On
6. Click save
Where input.json contains the Request body json data as mentioned below.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/autoProvi
sioningSettings/default",
"name": "default",
"type": "Microsoft.Security/autoProvisioningSettings",
"properties": {
"autoProvision": "On"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-data-
security
98 | P a g e
2. https://docs.microsoft.com/en-us/azure/security-center/security-center-enable-
data-collection
3. https://msdn.microsoft.com/en-us/library/mt704062.aspx
4. https://msdn.microsoft.com/en-us/library/mt704063.aspx
5. https://docs.microsoft.com/en-
us/rest/api/securitycenter/autoprovisioningsettings/list
6. https://docs.microsoft.com/en-
us/rest/api/securitycenter/autoprovisioningsettings/create
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-incident-response#ir-2-preparation--setup-incident-notification
Additional Information:
Excluding any of the entries in input.json may disable the specific setting by
default
Microsoft has recently changed APIs to get and Update Automatic Provisioning
Setting. This recommendation is updated accordingly.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
99 | P a g e
2.12 Ensure any of the ASC Default policy setting is not set to "Disabled"
(Manual)
Profile Applicability:
Level 1
Description:
None of the settings offered by ASC Default policy should be set to effect "Disabled".
Rationale:
A security policy defines the desired configuration of your workloads and helps ensure
compliance with company or regulatory security requirements. ASC Default policy is
associated with every subscription by default. ASC default policy assignment is set of
security recommendations based on best practices. Enabling recommendations in ASC
default policy ensures that Azure security center provides ability to monitor all of the
supported recommendations and allow automated action optionally for few of the
supported recommendations.
Audit:
The 'View effective Policy' button can be used to see all effects of policies even if they have
not been modified.
Using Azure Command Line Interface 2.0
Ensure the output of the below command does not contains any setting which is set to
Disabled or Empty
100 | P a g e
Note policies that have not been modified will not be listed in this output
Remediation:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-policies
2. https://docs.microsoft.com/en-us/azure/security-center/security-center-enable-
transparent-data-encryption
3. https://msdn.microsoft.com/en-us/library/mt704062.aspx
4. https://msdn.microsoft.com/en-us/library/mt704063.aspx
5. https://docs.microsoft.com/en-us/rest/api/resources/policyassignments/get
6. https://docs.microsoft.com/en-us/rest/api/resources/policyassignments/create
7. https://docs.microsoft.com/en-in/azure/security-center/tutorial-security-policy
8. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-incident-response#ir-2-preparation--setup-incident-notification
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
101 | P a g e
2.13 Ensure 'Additional email addresses' is configured with a security
contact email (Automated)
Profile Applicability:
Level 1
Description:
Security Center emails the subscription owners whenever a high-severity alert is triggered
for their subscription. You should provide a security contact email address as an additional
email address.
Rationale:
Azure Security Center emails the Subscription Owner to notify them about security alerts.
Adding your Security Contact's email address to the 'Additional email addresses' field
ensures that your organization's Security Team is included in these alerts. This ensures
that the proper people are aware of any potential compromise in order to mitigate the risk
in a timely fashion.
Audit:
1. Go to Security Center
2. Click on Pricing & settings
3. Click on the appropriate Management Group, Subscription, or Workspace
4. Click on Email notifications
5. Ensure that a valid security contact email address is listed in the Additional email
addresses field
Remediation:
102 | P a g e
From Azure Console
1. Go to Security Center
2. Click on Pricing & settings
3. Click on the appropriate Management Group, Subscription, or Workspace
4. Click on Email notifications
5. Enter a valid security contact email address (or multiple addresses separated by
commas) in the Additional email addresses field
6. Click Save
Where input.json contains the Request body json data as mentioned below. And replace
validEmailAddress with email ids csv for multiple.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/securityC
ontacts/default",
"name": "default",
"type": "Microsoft.Security/securityContacts",
"properties": {
"email": "<validEmailAddress>",
"alertNotifications": "On",
"alertsToAdmins": "On"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-provide-
security-contact-details
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/securitycontacts/list
3. https://docs.microsoft.com/en-
us/rest/api/securitycenter/securitycontacts/update
103 | P a g e
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-incident-response#ir-2-preparation--setup-incident-notification
Additional Information:
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
104 | P a g e
2.14 Ensure that 'Notify about alerts with the following severity' is set to
'High' (Automated)
Profile Applicability:
Level 1
Description:
Enables emailing security alerts to the subscription owner or other designated security
contact.
Rationale:
Enabling security alert emails ensures that security alert emails are received from
Microsoft. This ensures that the right people are aware of any potential security issues and
are able to mitigate the risk.
Audit:
Remediation:
1. Go to `Security Center
105 | P a g e
2. Click on Pricing & settings
3. Click on the appropriate Management Group, Subscription, or Workspace
4. Click on Email notifications
5. Under 'Notification types', check the check box next to Notify about alerts with
the following severity (or higher): and select High from the drop down menu
6. Click Save
Where input.json contains the Request body json data as mentioned below.
And replace validEmailAddress with email ids csv for multiple.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/securityC
ontacts/default1",
"name": "default1",
"type": "Microsoft.Security/securityContacts",
"properties": {
"email": "<validEmailAddress>",
"alertNotifications": "On",
"alertsToAdmins": "On"
}
}
Default Value:
By default, Send email notification for high severity alerts is not set.
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-provide-
security-contact-details
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/securitycontacts/list
3. https://docs.microsoft.com/en-
us/rest/api/securitycenter/securitycontacts/update
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-incident-response#ir-2-preparation--setup-incident-notification
106 | P a g e
Additional Information:
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
107 | P a g e
2.15 Ensure that 'All users with the following roles' is set to 'Owner'
(Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Enabling security alert emails to subscription owners ensures that they receive security
alert emails from Microsoft. This ensures that they are aware of any potential security
issues and can mitigate the risk in a timely fashion.
Audit:
1. Go to Security Center
2. Click on Pricing & settings
3. Click on the appropriate Management Group, Subscription, or Workspace
4. Click on Email notifications
5. Ensure that All users with the following roles is set to Owner
Remediation:
1. Go to Security Center
2. Click on Pricing & settings
3. Click on the appropriate Management Group, Subscription, or Workspace
4. Click on Email notifications
108 | P a g e
5. In the drop down of the All users with the following roles field select Owner
6. Click Save
Where input.json contains the Request body json data as mentioned below.
And replace validEmailAddress with email ids csv for multiple.
{
"id":
"/subscriptions/<Your_Subscription_Id>/providers/Microsoft.Security/securityC
ontacts/default1",
"name": "default1",
"type": "Microsoft.Security/securityContacts",
"properties": {
"email": "<validEmailAddress>",
"alertNotifications": "On",
"alertsToAdmins": "On"
}
}
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-provide-
security-contact-details
2. https://docs.microsoft.com/en-us/rest/api/securitycenter/securitycontacts/list
3. https://docs.microsoft.com/en-
us/rest/api/securitycenter/securitycontacts/update
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-incident-response#ir-2-preparation--setup-incident-notification
Additional Information:
-Excluding any of the entries in recommendations block in input.json disables the specific
setting by default
109 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
110 | P a g e
3 Storage Accounts
This section covers security recommendations to follow to set storage account policies on
an Azure Subscription. An Azure storage account provides a unique namespace to store and
access Azure Storage data objects.
111 | P a g e
3.1 Ensure that 'Secure transfer required' is set to 'Enabled' (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
The secure transfer option enhances the security of a storage account by only allowing
requests to the storage account by a secure connection. For example, when calling REST
APIs to access storage accounts, the connection must use HTTPS. Any requests using HTTP
will be rejected when 'secure transfer required' is enabled. When using the Azure files
service, connection without encryption will fail, including scenarios using SMB 2.1, SMB 3.0
without encryption, and some flavors of the Linux SMB client. Because Azure storage
doesn’t support HTTPS for custom domain names, this option is not applied when using a
custom domain name.
Audit:
1. Go to Storage Accounts
2. For each storage account, go to Configuration
3. Ensure that Secure transfer required is set to Enabled
Remediation:
1. Go to Storage Accounts
2. For each storage account, go to Configuration
3. Set Secure transfer required to Enabled
112 | P a g e
Using Azure Command Line Interface 2.0
Use the below command to enable Secure transfer required for a Storage Account
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/storage/blobs/security-
recommendations#encryption-in-transit
2. https://docs.microsoft.com/en-us/cli/azure/storage/account?view=azure-cli-
latest#az_storage_account_list
3. https://docs.microsoft.com/en-us/cli/azure/storage/account?view=azure-cli-
latest#az_storage_account_update
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-4-encrypt-sensitive-information-in-transit
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
113 | P a g e
3.2 Ensure that storage account access keys are periodically
regenerated (Manual)
Profile Applicability:
Level 1
Description:
Rationale:
When a storage account is created, Azure generates two 512-bit storage access keys, which
are used for authentication when the storage account is accessed. Rotating these keys
periodically ensures that any inadvertent access or exposure does not result in these keys
being compromised.
Impact:
Regenerating access keys can affect services in Azure as well as the organization's
applications that are dependent on the storage account. All clients that use the access key
to access the storage account must be updated to use the new key.
Audit:
1. Go to Storage Accounts
2. For each storage account, go to Activity log
3. Under Timespan drop-down, select Custom and choose Start time and End time
such that it ranges 90 days
4. Enter RegenerateKey in the Search text box
5. Click Apply
It should list out all RegenerateKey events. If no such event exists, then this is a finding.
Using Azure Command Line Interface 2.0
114 | P a g e
2. For every storage account make sure that key is regenerated in past 90 days.
Remediation:
Follow Microsoft Azure documentation for regenerating storage account access keys.
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/storage/common/storage-create-storage-
account#regenerate-storage-access-keys
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-1-protect-and-limit-highly-privileged-users
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-2-restrict-administrative-access-to-business-critical-
systems
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-2-manage-application-identities-securely-and-
automatically
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
115 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
116 | P a g e
3.3 Ensure Storage logging is enabled for Queue service for read, write,
and delete requests (Manual)
Profile Applicability:
Level 2
Description:
The Storage Queue service stores messages that may be read by any client who has access
to the storage account. A queue can contain an unlimited number of messages, each of
which can be up to 64KB in size using version 2011-08-18 or newer. Storage Logging
happens server-side and allows details for both successful and failed requests to be
recorded in the storage account. These logs allow users to see the details of read, write, and
delete operations against the queues. Storage Logging log entries contain the following
information about individual requests: Timing information such as start time, end-to-end
latency, and server latency, authentication details , concurrency information and the sizes
of the request and response messages.
Rationale:
Storage Analytics logs contain detailed information about successful and failed requests to
a storage service. This information can be used to monitor individual requests and to
diagnose issues with a storage service. Requests are logged on a best-effort basis.
Storage Analytics logging is not enabled by default for your storage account.
Audit:
1. Go to Storage Accounts.
2. Select the specific Storage Account.
3. Click the Diagnostics settings (classic) blade from Monitoring (classic)
section.
4. Ensure the Status is set to On, if set to Off.
5. Select Queue properties.
6. Ensure Read Write Delete options are selected under the Logging section.
117 | P a g e
az storage logging show --services q --account-name <storageAccountName>
Remediation:
1. Go to Storage Accounts.
2. Select the specific Storage Account.
3. Click the Diagnostics settings (classic) blade from Monitoring (classic)
section.
4. Set the Status to On, if set to Off.
5. Select Queue properties.
6. Select Read, Write and Delete options under the Logging section to enable Storage
Logging for Queue service.
References:
1. https://docs.microsoft.com/en-us/rest/api/storageservices/about-storage-
analytics-logging
2. https://docs.microsoft.com/en-us/cli/azure/storage/logging?view=azure-cli-latest
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
Additional Information:
By the nature and intent of having queues, practically we cannot generalize detailed audit
log requirement for every queue. This recommendation may be applicable to storage
account queue service where the security is paramount.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
118 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
119 | P a g e
3.4 Ensure that shared access signature tokens expire within an hour
(Manual)
Profile Applicability:
Level 1
Description:
Rationale:
A shared access signature (SAS) is a URI that grants restricted access rights to Azure
Storage resources. A shared access signature can be provided to clients who should not be
trusted with the storage account key but for whom it may be necessary to delegate access
to certain storage account resources. Providing a shared access signature URI to these
clients allows them access to a resource for a specified period of time. This time should be
set as low as possible and preferably no longer than an hour.
Audit:
Currently, SAS token expiration times cannot be audited. Until Microsoft makes token
expiration time a setting rather than a token creation parameter, this recommendation
would require a manual verification.
Remediation:
When generating shared access signature tokens, use start and end time such that it falls
within an hour.
From Azure Console
1. Go to Storage Accounts
2. For each storage account, go to Shared access signature
3. Set Start and expiry date/time within an hour
Default Value:
120 | P a g e
References:
1. https://docs.microsoft.com/en-us/rest/api/storageservices/delegating-access-
with-a-shared-access-signature
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
121 | P a g e
3.5 Ensure that 'Public access level' is set to Private for blob containers
(Automated)
Profile Applicability:
Level 1
Description:
Disable anonymous access to blob containers and disallow blob public access on storage
account.
Rationale:
Anonymous, public read access to a container and its blobs can be enabled in Azure Blob
storage. It grants read-only access to these resources without sharing the account key, and
without requiring a shared access signature. It is recommended not to provide anonymous
access to blob containers until, and unless, it is strongly desired. A shared access signature
token should be used for providing controlled and timed access to blob containers. If no
anonymous access is needed on the storage account, it’s recommended to set
allowBlobPublicAccess false.
Impact:
Audit:
1. Go to Storage Accounts
2. For each storage account, go to Containers under BLOB SERVICE
3. For each container, click Access policy
4. Ensure that Public access level is set to Private (no anonymous access)
5. For each storage account, go to Allow Blob public access` in Configuration
6. Ensure Disabled if no anonymous access is needed on the storage account
122 | P a g e
az storage account show --name <storage-account> --resource-group <resource-
group> --query allowBlobPublicAccess --output tsv
Remediation:
1. Go to Storage Accounts
2. For each storage account, go to Containers under BLOB SERVICE
3. For each container, click Access policy
4. Set Public access level to Private (no anonymous access)
5. For each storage account, go to Allow Blob public access in Configuration
6. Set Disabled if no anonymous access is needed on the storage account
Default Value:
By default, Public access level is set to Private (no anonymous access) for blob
containers. By default, AllowBlobPublicAccess is set to Null (allow in effect) for storage
account.
References:
1. https://docs.microsoft.com/en-us/azure/storage/blobs/storage-manage-access-to-
resources
2. https://docs.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-
prevent
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
123 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
124 | P a g e
3.6 Ensure default network access rule for Storage Accounts is set to
deny (Automated)
Profile Applicability:
Level 2
Description:
Restricting default network access helps to provide a new layer of security, since storage
accounts accept connections from clients on any network. To limit access to selected
networks, the default action must be changed.
Rationale:
Storage accounts should be configured to deny access to traffic from all networks
(including internet traffic). Access can be granted to traffic from specific Azure Virtual
networks, allowing a secure network boundary for specific applications to be built. Access
can also be granted to public internet IP address ranges, to enable connections from
specific internet or on-premises clients. When network rules are configured, only
applications from allowed networks can access a storage account. When calling from an
allowed network, applications continue to require proper authorization (a valid access key
or SAS token) to access the storage account.
Audit:
1. Go to Storage Accounts
2. For each storage account, Click on the settings menu called Firewalls and
virtual networks.
3. Ensure that Allow access from All networks is not selected.
Remediation:
1. Go to Storage Accounts
125 | P a g e
2. For each storage account, Click on the settings menu called Firewalls and virtual
networks.
3. Ensure that you have elected to allow access from Selected networks.
4. Add rules to allow traffic from specific network.
5. Click Save to apply your changes.
References:
1. https://docs.microsoft.com/en-us/azure/storage/common/storage-network-
security
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
126 | P a g e
3.7 Ensure 'Trusted Microsoft Services' is enabled for Storage Account
access (Manual)
Profile Applicability:
Level 2
Description:
Some Microsoft services that interact with storage accounts operate from networks that
can't be granted access through network rules. To help this type of service work as
intended, allow the set of trusted Microsoft services to bypass the network rules. These
services will then use strong authentication to access the storage account. If the Allow
trusted Microsoft services exception is enabled, the following services: Azure Backup,
Azure Site Recovery, Azure DevTest Labs, Azure Event Grid, Azure Event Hubs, Azure
Networking, Azure Monitor and Azure SQL Data Warehouse (when registered in the
subscription), are granted access to the storage account.
Rationale:
Turning on firewall rules for storage account will block access to incoming requests for
data, including from other Azure services. This includes using the Portal, writing logs, etc.
We can re-enable functionality. The customer can get access to services like Monitor,
Networking, Hubs, and Event Grid by enabling "Trusted Microsoft Services" through
exceptions. Also, Backup and Restore of Virtual Machines using unmanaged disks in storage
accounts with network rules applied is supported via creating an exception.
Audit:
1. Go to Storage Accounts
2. For each storage account, Click on the settings menu called Firewalls and virtual
networks.
3. Click on Selected networks.
4. Ensure that Allow trusted Microsoft services to access this storage
account is checked in Exceptions.
127 | P a g e
Remediation:
1. Go to Storage Accounts
2. For each storage account, Click on the settings menu called Firewalls and virtual
networks.
3. Ensure that you have elected to allow access from 'Selected networks'.
4. Enable check box for Allow trusted Microsoft services to access this
storage account.
5. Click Save to apply your changes.
References:
1. https://docs.microsoft.com/en-us/azure/storage/common/storage-network-
security
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
128 | P a g e
3.8 Ensure soft delete is enabled for Azure Storage (Automated)
Profile Applicability:
Level 1
Description:
The Azure Storage blobs contain data like ePHI, Financial, secret or personal. Erroneously
modified or deleted accidentally by an application or other storage account user cause data
loss or data unavailability.
Rationale:
There could be scenarios where users accidentally run delete commands on Azure Storage
blobs or blob snapshot or attacker/malicious user does it deliberately to cause disruption.
Deleting an Azure Storage blob leads to immediate data loss / non-accessible data.
Soft Delete
Enabling this configuration for azure storage ensures that even if blobs/data were
deleted from the storage account, Blobs/data objects remain recoverable for a
particular time which set in the "Retention policies" [Retention policies can be 7
days to 365 days].
Audit:
1. Go to Storage Account
2. For each Storage Account, navigate to Data protection
3. Ensure that soft delete is enabled
129 | P a g e
Remediation:
1. Go to Storage Account
2. For each Storage Account, navigate to Data Protection
3. Select set soft delete enabled and enter a number of days you want to retain soft
deleted data.
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-soft-delete
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
130 | P a g e
3.9 Ensure storage for critical data are encrypted with Customer
Managed Key (Automated)
Profile Applicability:
Level 2
Description:
Enable sensitive data encryption at rest using Customer Managed Keys rather than
Microsoft Managed keys
Rationale:
By default, data in the storage account is encrypted using Microsoft Managed Keys at rest.
All Azure Storage resources are encrypted, including blobs, disks, files, queues, and tables.
All object metadata is also encrypted. However, if you want to control and manage this
encryption key yourself, you can specify a customer-managed key, that key is used to
protect and control access to the key that encrypts your data. You can also choose to
automatically update the key version used for Azure Storage encryption whenever a new
version is available in the associated Key Vault.
Impact:
If the key expires by setting the 'activation date' and 'expiration date' of the key, the user
must rotate the key manually.
Using Customer Managed Keys may also incur additional man-hour requirements to create,
store, manage, and protect the keys as needed.
Audit:
1. Go to Storage Accounts`
2. For each storage account, go to Encryption
3. Ensure that Encryption type is set to Customer Managed Keys
Remediation:
1. Go to Storage Accounts
2. For each storage account, go to Encryption
131 | P a g e
3. Set Customer Managed Keys
4. Select the Encryption key and enter the appropriate setting value
5. Click Save
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/storage/common/storage-service-
encryption
2. https://docs.microsoft.com/en-us/azure/security/fundamentals/data-encryption-
best-practices#protect-data-at-rest
3. https://docs.microsoft.com/en-us/azure/storage/common/storage-service-
encryption#azure-storage-encryption-versus-disk-encryption
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-1-discovery,-classify-and-label-sensitive-data
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
132 | P a g e
3.10 Ensure Storage logging is enabled for Blob service for read, write,
and delete requests (Manual)
Profile Applicability:
Level 2
Description:
The Storage Blob service provides scalable, cost-efficient objective storage in the cloud.
Storage Logging happens server-side and allows details for both successful and failed
requests to be recorded in the storage account. These logs allow users to see the details of
read, write, and delete operations against the blobs. Storage Logging log entries contain the
following information about individual requests: Timing information such as start time,
end-to-end latency, and server latency, authentication details , concurrency information
and the sizes of the request and response messages.
Rationale:
Storage Analytics logs contain detailed information about successful and failed requests to
a storage service. This information can be used to monitor individual requests and to
diagnose issues with a storage service. Requests are logged on a best-effort basis.
Impact:
Enabling storage account blob service logging does have a cost implication.
Audit:
Go to Storage Accounts.
Select the specific Storage Account.
Click the Diagnostics settings (classic) blade from Monitoring (classic)
section.
Ensure the Status is set to On, if set to Off.
Select Blob properties.
Ensure Read, Write, and Delete options are selected under the Logging section.
133 | P a g e
Remediation:
Go to Storage Accounts.
Select the specific Storage Account.
Click the Diagnostics settings (classic) blade from Monitoring (classic)
section.
Set the Status to On, if set to Off.
Select Blob properties.
Select Read, Write and Delete options under the Loggingsection to enable Storage
Logging for Blob service.
Default Value:
By default, storage account blob service logging is disabled for read, write, an delete
operations
References:
1. https://docs.microsoft.com/en-us/rest/api/storageservices/about-storage-
analytics-logging
2. https://docs.microsoft.com/en-us/cli/azure/storage/logging?view=azure-cli-latest
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
Additional Information:
By the nature and intent of having blobs, practically we cannot generalize detailed audit log
requirement for every blob. This recommendation may be applicable to storage account
blob service where the security is paramount.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
134 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
135 | P a g e
3.11 Ensure Storage logging is enabled for Table service for read, write,
and delete requests (Manual)
Profile Applicability:
Level 2
Description:
The Storage Table storage is a service that stores structure NoSQL data in the cloud,
providing a key/attribute store with a schema less design. Storage Logging happens server-
side and allows details for both successful and failed requests to be recorded in the storage
account. These logs allow users to see the details of read, write, and delete operations
against the tables. Storage Logging log entries contain the following information about
individual requests: Timing information such as start time, end-to-end latency, and server
latency, authentication details , concurrency information and the sizes of the request and
response messages.
Rationale:
Storage Analytics logs contain detailed information about successful and failed requests to
a storage service. This information can be used to monitor individual requests and to
diagnose issues with a storage service. Requests are logged on a best-effort basis.
Impact:
Enabling storage account table service logging does have a cost implication.
Audit:
Go to Storage Accounts.
Select the specific Storage Account.
Click the Diagnostics settings (classic) blade from Monitoring (classic)
section.
Ensure the Status is set to On, if set to Off.
Select Table properties.
Ensure Read, Write, and Delete options are selected under the Logging section.
136 | P a g e
az storage logging show --services t --account-name <storageAccountName>
Remediation:
Go to Storage Accounts.
Select the specific Storage Account.
Click the Diagnostics settings (classic) blade from Monitoring (classic)
section.
Set the Status to On, if set to Off.
Select Table properties.
Select Read, Write and Delete options under the Logging section to enable Storage
Logging for Table service.
Default Value:
By default, storage account table service logging is disabled for read, write, an delete
operations
References:
1. https://docs.microsoft.com/en-us/rest/api/storageservices/about-storage-
analytics-logging
2. https://docs.microsoft.com/en-us/cli/azure/storage/logging?view=azure-cli-latest
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
Additional Information:
By the nature and intent of having tables, practically we cannot generalize detailed audit
log requirement for every table. This recommendation may be applicable to storage
account table service where the security is paramount.
137 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
138 | P a g e
4 Database Services
This section covers security recommendations to follow to set general database services
policies on an Azure Subscription. Subsections will address specific database types.
139 | P a g e
4.1 SQL Server - Auditing
Auditing for Azure SQL Servers and SQL Databases tracks database events and writes them
to an audit log Azure storage account, Log Analytics workspace or Event Hubs. Auditing
helps to maintain regulatory compliance, understand database activity, and gain insight
into discrepancies and anomalies that could indicate business concerns or suspected
security violations. Auditing enables and facilitates adherence to compliance standards,
although it doesn't guarantee compliance.
Default SQL Server Auditing profile set on a SQL server in inherited to all the SQL Databases
which are part of the SQL server.
140 | P a g e
4.1.1 Ensure that 'Auditing' is set to 'On' (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
The Azure platform allows a SQL server to be created as a service. Enabling auditing at the
server level ensures that all existing and newly created databases on the SQL server
instance are audited. Auditing policy applied on the SQL database does not override
auditing policy and settings applied on the particular SQL server where the database is
hosted.
Auditing tracks database events and writes them to an audit log in the Azure storage
account. It also helps to maintain regulatory compliance, understand database activity, and
gain insight into discrepancies and anomalies that could indicate business concerns or
suspected security violations.
Audit:
1. Go to SQL servers
2. For each server instance
3. Click on Auditing
4. Ensure that Auditing is set to On
Get-AzureRmSqlServer
141 | P a g e
Remediation:
1. Go to SQL servers
2. For each server instance
3. Click on Auditing
4. Set Auditing to On
Get-AzureRmSqlServer
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-enable-
auditing-on-sql-servers
2. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/get-
azurermsqlserverauditing?view=azurermps-5.2.0
3. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/set-
azurermsqlserverauditingpolicy?view=azurermps-5.2.0
4. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-auditing
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
Additional Information:
A server policy applies to all existing and newly created databases on the server.
If server blob auditing is enabled, it always applies to the database. The database
will be audited, regardless of the database auditing settings. Auditing type table is
already depricated leaving only type blob available.
Enabling blob auditing on the database, in addition to enabling it on the server, does
not override or change any of the settings of the server blob auditing. Both audits
will exist side by side. In other words, the database is audited twice in parallel; once
by the server policy and once by the database policy.
142 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
143 | P a g e
4.1.2 Ensure that 'Data encryption' is set to 'On' on a SQL Database
(Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Azure SQL Database transparent data encryption helps protect against the threat of
malicious activity by performing real-time encryption and decryption of the database,
associated backups, and transaction log files at rest without requiring changes to the
application.
Audit:
1. Go to SQL databases
2. For each DB instance
3. Click on Transparent data encryption
4. Ensure that Data encryption is set to On
Remediation:
1. Go to SQL databases
2. For each DB instance
3. Click on Transparent data encryption
4. Set Data encryption to On
144 | P a g e
az sql db tde set --resource-group <resourceGroup> --server <dbServerName> --
database <dbName> --status Enabled
Note:
TDE cannot be used to encrypt the logical master database in SQL Database. The
master database contains objects that are needed to perform the TDE operations on
the user databases.
Azure Portal does not show master databases per SQL server. However, CLI/API
responses will show master databases.
Default Value:
References:
1. https://docs.microsoft.com/en-us/sql/relational-
databases/security/encryption/transparent-data-encryption-with-azure-sql-
database
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-5-encrypt-sensitive-data-at-rest
Additional Information:
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
145 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
authentication mechanism not integrated into the operating system, in order to access
the information.
146 | P a g e
4.1.3 Ensure that 'Auditing' Retention is 'greater than 90 days'
(Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Audit Logs can be used to check for anomalies and give insight into suspected breaches or
misuse of information and access.
Audit:
1. Go to SQL servers
2. For each server instance
3. Click on Auditing
4. Select Storage Details
5. Ensure Retention (days) setting greater than 90 days
Get-AzureRmSqlServer
Remediation:
1. Go to SQL servers
2. For each server instance
3. Click on Auditing
147 | P a g e
4. Select Storage Details
5. Set Retention (days) setting greater than 90 days
6. Select OK
7. Select Save
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-auditing
2. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/get-
azurermsqlserverauditing?view=azurermps-5.2.0
3. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/set-
azurermsqlserverauditing?view=azurermps-5.2.0
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-6-configure-log-storage-retention
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
148 | P a g e
4.2 SQL Server - Azure Defender for SQL
Azure Defender for SQL provides a layer of security, which enables customers to detect and
respond to potential threats as they occur by providing security alerts on anomalous
activities. Users will receive an alert upon suspicious database activities, potential
vulnerabilities, and SQL injection attacks, as well as anomalous database access patterns.
SQL Server Threat Detection alerts provide details of suspicious activity and recommend
action on how to investigate and mitigate the threat.
Azure Defender for SQL may incur additional cost per SQL server.
149 | P a g e
4.2.1 Ensure that Advanced Threat Protection (ATP) on a SQL server is
set to 'Enabled' (Automated)
Profile Applicability:
Level 2
Description:
Rationale:
Azure Defender for SQL is a unified package for advanced SQL security capabilities. Azure
Defender is available for Azure SQL Database, Azure SQL Managed Instance, and Azure
Synapse Analytics. It includes functionality for discovering and classifying sensitive data,
surfacing and mitigating potential database vulnerabilities, and detecting anomalous
activities that could indicate a threat to your database. It provides a single go-to location for
enabling and managing these capabilities.
Impact:
Azure Defender for SQL is a paid feature and will incur additional cost for each SQL server.
Audit:
1. Go to SQL servers
2. For each server instance
3. Click on Azure Defender for SQL
4. Ensure that Azure Defender for SQL is set to On
Get-AzSqlServer
150 | P a g e
Remediation:
1. Go to SQL servers
2. For each server instance
3. Click on Azure Defender for SQL
4. Set Azure Defender for SQL to On
Note:
Enabling 'Azure Defender for SQL' from the Azure portal enables Threat Detection
Using Powershell command Set-AzSqlServerThreatDetectionPolicy enables
Azure Defender for SQL for a SQL server
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/azure-sql/database/azure-defender-for-
sql
2. https://docs.microsoft.com/cs-cz/powershell/module/azurerm.sql/get-
azurermsqlserverthreatdetectionpolicy?view=azurermps-5.2.0
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-3-monitor-for-unauthorized-transfer-of-sensitive-data
Additional Information:
The feature 'Azure Defender for SQL' can be enabled only on SQL server and the
same settings will be inherently applied to the SQL databases hosted on the SQL
server.
151 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
152 | P a g e
4.2.2 Ensure that Vulnerability Assessment (VA) is enabled on a SQL
server by setting a Storage Account (Automated)
Profile Applicability:
Level 2
Description:
Enable Vulnerability Assessment (VA) service scans for critical SQL servers and
corresponding SQL databases.
Rationale:
Enabling Azure Defender for SQL server does not enables Vulnerability Assessment
capability for individual SQL databases unless storage account is set to store the scanning
data and reports.
The Vulnerability Assessment service scans databases for known security vulnerabilities
and highlight deviations from best practices, such as misconfigurations, excessive
permissions, and unprotected sensitive data. Results of the scan include actionable steps to
resolve each issue and provide customized remediation scripts where applicable.
Additionally an assessment report can be customized by setting an acceptable baseline for
permission configurations, feature configurations, and database settings.
Impact:
Enabling the Azure Defender for SQL features will incur additional costs for each SQL
server.
Audit:
1. Go to SQL servers
2. Select a server instance
3. Click on Security Center
4. Ensure that Azure Defender for SQL is set to Enabled
5. Select Configure next to Enabled at subscription-level
6. In Section Vulnerability Assessment Settings, Ensure Storage Accounts is does
not read Configure required settings.
153 | P a g e
Using Azure PowerShell
Get the list of all SQL Servers
Get-AZSqlServer
ResourceGroupName : ResourceGroup01
ServerName : Server01
StorageAccountName : mystorage
ScanResultsContainerName : vulnerability-assessment
RecurringScansInterval : None
EmailSubscriptionAdmins : False
NotificationEmail : {}
Remediation:
1. Go to SQL servers
2. Select a server instance
3. Click on Security Center
4.
1. Select Configure next to Enabled at subscription-level
5. In Section Vulnerability Assessment Settings, Click Storage Account
6. Choose Storage Account (Existing or Create New). Click Ok
7. Click Save
154 | P a g e
Update-AzSqlServerVulnerabilityAssessmentSetting `
-ResourceGroupName "<resource group name>"`
-ServerName "<Server Name>"`
-StorageAccountName "<Storage Name from same subscription and
same Location" `
-ScanResultsContainerName "vulnerability-assessment" `
-RecurringScansInterval Weekly `
-EmailSubscriptionAdmins $true `
-NotificationEmail @("mail1@mail.com" , "mail2@mail.com")
Default Value:
By default Azure Defender for SQL is not enabled for a SQL server. Enabling Azure Defender
for SQL does not enable VA scanning by setting Storage Account automatically.
References:
1. https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-
assessment
2. https://docs.microsoft.com/en-
us/rest/api/sql/servervulnerabilityassessments/listbyserver
3. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Update-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
4. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Get-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-6-perform-software-vulnerability-
assessments
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
155 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
scan all systems on the network on a weekly or more frequent basis to identify all
potential vulnerabilities on the organization's systems.
156 | P a g e
4.2.3 Ensure that VA setting Periodic Recurring Scans is enabled on a
SQL server (Automated)
Profile Applicability:
Level 2
Description:
Enable Vulnerability Assessment (VA) Periodic recurring scans for critical SQL servers and
corresponding SQL databases.
Rationale:
VA setting 'Periodic recurring scans' schedules periodic (weekly) vulnerability scanning for
the SQL server and corresponding Databases. Periodic and regular vulnerability scanning
provides risk visibility based on updated known vulnerability signatures and best
practices.
Impact:
Enabling the Azure Defender for SQL feature will incur additional costs for each SQL
server.
Audit:
1. Go to SQL servers
2. Select a server instance
3. Click on Security Center
4. Ensure that Azure Defender for SQL is set to Enabled
5. In Section Vulnerability Assessment Settings, Ensure Storage Accounts is
configured.
6. In Section Vulnerability Assessment Settings, Ensure Periodic recurring
scans is set to On.
Get-AZSqlServer
157 | P a g e
Get-AzSqlServerVulnerabilityAssessmentSetting -ResourceGroupName <resource
group name> -ServerName <server name>
ResourceGroupName : ResourceGroup01
ServerName : Server01
StorageAccountName : mystorage
ScanResultsContainerName : vulnerability-assessment
RecurringScansInterval : weekly
EmailSubscriptionAdmins : False
NotificationEmail : {}
Remediation:
1. Go to SQL servers
2. For each server instance
3. Click on Security Center
4. In Section Vulnerability Assessment Settings, set Storage Account if not
already
5. Toggle 'Periodic recurring scans' to ON.
6. Click Save
Update-AzSqlServerVulnerabilityAssessmentSetting `
-ResourceGroupName "<resource group name>"`
-ServerName "<Server Name>"`
-StorageAccountName "<Storage Name from same subscription and
same Location" `
-ScanResultsContainerName "vulnerability-assessment" `
-RecurringScansInterval Weekly `
-EmailSubscriptionAdmins $true `
-NotificationEmail @("mail1@mail.com" , "mail2@mail.com")
158 | P a g e
Default Value:
Enabling Azure Defender for SQL enables 'Periodic recurring scans' by default but does
not configure the Storage account.
References:
1. https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-
assessment
2. https://docs.microsoft.com/en-
us/rest/api/sql/servervulnerabilityassessments/listbyserver
3. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Update-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
4. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Get-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-6-perform-software-vulnerability-
assessments
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
159 | P a g e
4.2.4 Ensure that VA setting Send scan reports to is configured for a SQL
server (Automated)
Profile Applicability:
Level 2
Description:
Configure 'Send scan reports to' with email ids of concerned data owners/stakeholders for
a critical SQL servers.
Rationale:
Vulnerability Assessment (VA) scan reports and alerts will be sent to email ids configured
at 'Send scan reports to'. This may help in reducing time required for identifying risks and
taking corrective measures.
Impact:
Enabling the Azure Defender for SQL features will incur additional costs for each SQL
server.
Audit:
1. Go to SQL servers
2. Select a server instance
3. Click on Security Center
4. Ensure that Azure Defender for SQL is set to Enabled
5. Select Configure next to Enabled at subscription-level
6. In Section Vulnerability Assessment Settings, Ensure Storage Accounts is
Configured.
7. In Section Vulnerability Assessment Settings, Ensure Send scan reports to is
not empty.
Get-AZSqlServer
160 | P a g e
Get-AzSqlServerVulnerabilityAssessmentSetting -ResourceGroupName <resource
group name> -ServerName <server name>
ResourceGroupName : ResourceGroup01
ServerName : Server01
StorageAccountName : mystorage
ScanResultsContainerName : vulnerability-assessment
RecurringScansInterval : weekly
EmailSubscriptionAdmins : False
NotificationEmail : {}
Remediation:
1. Go to SQL servers
2. Select a server instance
3. Click on Security Center
4. Ensure that Azure Defender for SQL is set to Enabled
5. Select Configure next to Enabled at subscription-level
6. In Section Vulnerability Assessment Settings, configure Storage Accounts if
not already
7. Configure email ids for concerned data owners/stakeholders at 'Send scan reports
to'
8. Click Save
Update-AzSqlServerVulnerabilityAssessmentSetting `
-ResourceGroupName "<resource group name>"`
-ServerName "<Server Name>"`
-StorageAccountName "<Storage Name from same subscription and
same Location" `
-ScanResultsContainerName "vulnerability-assessment" `
161 | P a g e
-RecurringScansInterval Weekly `
-EmailSubscriptionAdmins $true `
-NotificationEmail @("mail1@mail.com" , "mail2@mail.com")
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-
assessment
2. https://docs.microsoft.com/en-
us/rest/api/sql/servervulnerabilityassessments/listbyserver
3. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Update-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
4. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Get-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-6-perform-software-vulnerability-
assessments
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
162 | P a g e
4.2.5 Ensure that VA setting 'Also send email notifications to admins
and subscription owners' is set for a SQL server (Automated)
Profile Applicability:
Level 2
Description:
Enable Vulnerability Assessment (VA) setting 'Also send email notifications to admins and
subscription owners'.
Rationale:
VA scan reports and alerts will be sent to admins and subscription owners by enabling
setting 'Also send email notifications to admins and subscription owners'. This may help in
reducing time required for identifying risks and taking corrective measures.
Impact:
Enabling the Azure Defender for SQL features will incur additional costs for each SQL
server.
Audit:
1. Go to SQL servers
2. Select a server instance
3. Click on Security Center
4. Ensure that Azure Defender for SQL is set to Enabled
5. Select Configure next to Enabled at subscription-level
6. In Section Vulnerability Assessment Settings, Ensure Storage Accounts is
configured.
7. In Section Vulnerability Assessment Settings, Ensure Also send email
notifications to admins and subscription owners is checked/enabled.
Get-AZSqlServer
163 | P a g e
Get-AzSqlServerVulnerabilityAssessmentSetting -ResourceGroupName <resource
group name> -ServerName <server name>
ResourceGroupName : ResourceGroup01
ServerName : Server01
StorageAccountName : mystorage
ScanResultsContainerName : vulnerability-assessment
RecurringScansInterval : weekly
EmailSubscriptionAdmins : False
NotificationEmail : {}
Remediation:
1. Go to SQL servers
2. Select a server instance
3. Click on Security Center
4.
1. Select Configure next to Enabled at subscription-level
5. In Section Vulnerability Assessment Settings, configure Storage Accounts if
not already
6. Check/enable 'Also send email notifications to admins and subscription owners'
7. Click Save
To enable ADS-VA service and Set 'Also send email notifications to admins and subscription
owners'
Update-AzSqlServerVulnerabilityAssessmentSetting `
-ResourceGroupName "<resource group name>"`
-ServerName "<Server Name>"`
-StorageAccountName "<Storage Name from same subscription and
same Location" `
-ScanResultsContainerName "vulnerability-assessment" `
164 | P a g e
-RecurringScansInterval Weekly `
-EmailSubscriptionAdmins $true `
-NotificationEmail @("mail1@mail.com" , "mail2@mail.com")
Default Value:
By default, 'Also send email notifications to admins and subscription owners' is enabled.
References:
1. https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-
assessment
2. https://docs.microsoft.com/en-
us/rest/api/sql/servervulnerabilityassessments/listbyserver
3. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Update-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
4. https://docs.microsoft.com/en-in/powershell/module/Az.Sql/Get-
AzSqlServerVulnerabilityAssessmentSetting?view=azps-2.6.0
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-6-perform-software-vulnerability-
assessments
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
165 | P a g e
4.3 PostgreSQL Database Server
This section groups security best practices/recommendations for Azure PostgreSQL
Database Servers.
166 | P a g e
4.3.1 Ensure 'Enforce SSL connection' is set to 'ENABLED' for PostgreSQL
Database Server (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
SSL connectivity helps to provide a new layer of security, by connecting database server
to client applications using Secure Sockets Layer (SSL). Enforcing SSL connections between
database server and client applications helps protect against "man in the middle" attacks
by encrypting the data stream between the server and application.
Audit:
Remediation:
167 | P a g e
Using Azure Command Line Interface 2.0
Use the below command to enforce ssl connection for PostgreSQL Database.
References:
1. https://docs.microsoft.com/en-us/azure/postgresql/concepts-ssl-connection-
security
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-4-encrypt-sensitive-information-in-transit
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
168 | P a g e
4.3.2 Ensure 'Enforce SSL connection' is set to 'ENABLED' for MySQL
Database Server (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
SSL connectivity helps to provide a new layer of security, by connecting database server to
client applications using Secure Sockets Layer (SSL). Enforcing SSL connections between
database server and client applications helps protect against "man in the middle" attacks
by encrypting the data stream between the server and application.
Audit:
Remediation:
169 | P a g e
Using Azure Command Line Interface 2.0
Use the below command to set MYSQL Databases to Enforce SSL connection.
References:
1. https://docs.microsoft.com/en-us/azure/mysql/concepts-ssl-connection-security
2. https://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-4-encrypt-sensitive-information-in-transit
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
170 | P a g e
4.3.3 Ensure server parameter 'log_checkpoints' is set to 'ON' for
PostgreSQL Database Server (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Enabling log_checkpoints helps the PostgreSQL Database to Log each checkpoint in turn
generates query and error logs. However, access to transaction logs is not supported. Query
and error logs can be used to identify, troubleshoot, and repair configuration errors and
sub-optimal performance.
Audit:
Remediation:
171 | P a g e
Using Azure Command Line Interface 2.0
Use the below command to update log_checkpoints configuration.
References:
1. https://docs.microsoft.com/en-us/rest/api/postgresql/configurations/listbyserver
2. https://docs.microsoft.com/en-us/azure/postgresql/howto-configure-server-
parameters-using-portal
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
172 | P a g e
4.3.4 Ensure server parameter 'log_connections' is set to 'ON' for
PostgreSQL Database Server (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Audit:
Remediation:
173 | P a g e
Using Azure Command Line Interface 2.0
Use the below command to update log_connections configuration.
Default Value:
References:
1. https://docs.microsoft.com/en-us/rest/api/postgresql/configurations/listbyserver
2. https://docs.microsoft.com/en-us/azure/postgresql/howto-configure-server-
parameters-using-portal
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
174 | P a g e
4.3.5 Ensure server parameter 'log_disconnections' is set to 'ON' for
PostgreSQL Database Server (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Audit:
Remediation:
175 | P a g e
Using Azure Command Line Interface 2.0
Use the below command to update log_disconnections configuration.
References:
1. https://docs.microsoft.com/en-us/rest/api/postgresql/configurations/listbyserver
2. https://docs.microsoft.com/en-us/azure/postgresql/howto-configure-server-
parameters-using-portal
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
176 | P a g e
4.3.6 Ensure server parameter 'connection_throttling' is set to 'ON' for
PostgreSQL Database Server (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Audit:
Remediation:
177 | P a g e
5. Click ON and save.
References:
1. https://docs.microsoft.com/en-us/rest/api/postgresql/configurations/listbyserver
2. https://docs.microsoft.com/en-us/azure/postgresql/howto-configure-server-
parameters-using-portal
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
178 | P a g e
4.3.7 Ensure server parameter 'log_retention_days' is greater than 3
days for PostgreSQL Database Server (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Audit:
Remediation:
179 | P a g e
Using Azure Command Line Interface 2.0
Use the below command to update log_retention_days configuration.
References:
1. https://docs.microsoft.com/en-us/azure/postgresql/howto-configure-server-
parameters-using-portal
2. https://docs.microsoft.com/en-us/rest/api/postgresql/configurations/listbyserver
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-6-configure-log-storage-retention
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
180 | P a g e
4.3.8 Ensure 'Allow access to Azure services' for PostgreSQL Database
Server is disabled (Manual)
Profile Applicability:
Level 1
Description:
Rationale:
If access from Azure services is enabled, the server's firewall will accept connections from
all Azure resources, including resources not in your subscription. This is usually not a
desired configuration. Instead, setup firewall rules to allow access from specific network
ranges or VNET rules to allow access from specific virtual networks.
Audit:
Remediation:
181 | P a g e
6. Click Save to apply the changed rule.
References:
1. https://docs.microsoft.com/en-us/azure/postgresql/concepts-firewall-rules
2. https://docs.microsoft.com/en-us/azure/postgresql/howto-manage-firewall-using-
cli
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-4-protect-applications-and-services-from-external-
network-attacks
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
182 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
are able to communicate with other systems necessary to fulfill their specific
responsibilities.
183 | P a g e
4.4 Ensure that Azure Active Directory Admin is configured (Automated)
Profile Applicability:
Level 1
Description:
Use Azure Active Directory Authentication for authentication with SQL Database.
Rationale:
Audit:
1. Go to SQL servers
2. For each SQL server, click on Active Directory admin
3. Ensure that an AD account has been populated for field Active Directory admin
184 | P a g e
Using Azure PowerShell
Get the list of all SQL Servers
Get-AzureRmSqlServer
Remediation:
1. Go to SQL servers
2. For each SQL server, click on Active Directory admin
3. Click on Set admin
4. Select an admin
5. Click Save
Default Value:
Azure Active Directory Authentication for SQL Database/Server is not enabled by default
185 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-
authentication-configure
2. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-
authentication
3. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/get-
azurermsqlserveractivedirectoryadministrator?view=azurermps-5.2.0
4. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/set-
azurermsqlserveractivedirectoryadministrator?view=azurermps-5.2.0
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-1-standardize-azure-active-directory-as-the-central-
identity-and-authentication-system
Additional Information:
NOTE - Assigning an Administrator in Azure Active Directory (AAD) is just the first step.
When using AAD for central authentication there are many other groups and roles that
need to be configured base on the needs of your organization. The How-to Guides should be
sued to determine what roles should be assigned and what groups should be created to
manage permissions and access to resources.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
186 | P a g e
4.5 Ensure SQL server's TDE protector is encrypted with Customer-
managed key (Automated)
Profile Applicability:
Level 2
Description:
TDE with Customer-managed key support provides increased transparency and control
over the TDE Protector, increased security with an HSM-backed external service, and
promotion of separation of duties.
With TDE, data is encrypted at rest with a symmetric key (called the database encryption
key) stored in the database or data warehouse distribution. To protect this data encryption
key (DEK) in the past, only a certificate that the Azure SQL Service managed could be used.
Now, with Customer-managed key support for TDE, the DEK can be protected with an
asymmetric key that is stored in the Key Vault. Key Vault is a highly available and scalable
cloud-based key store which offers central key management, leverages FIPS 140-2 Level 2
validated hardware security modules (HSMs), and allows separation of management of
keys and data, for additional security.
Rationale:
Customer-managed key support for Transparent Data Encryption (TDE) allows user
control of TDE encryption keys and restricts who can access them and when. Azure Key
Vault, Azure’s cloud-based external key management system is the first key management
service where TDE has integrated support for Customer-managed keys. With Customer-
managed key support, the database encryption key is protected by an asymmetric key
stored in the Key Vault. The asymmetric key is set at the server level and inherited by all
databases under that server.
Impact:
187 | P a g e
When deploying Customer Managed Keys it is also prudent to ensure that you also deploy
an automated toolset for managing these keys (this should include discovery and key
rotation), and Keys should be stored in an HSM or hardware backed keystore E.G. Azure
Keyvault).
As far as toolsets go, check with your cryptographic key provider as they may well provide
one as an add on to their service.
Audit:
1. Go to SQL servers
2. For the desired server instance
3. Click On Transparent data encryption
4. Ensure that Use your own key is set to YES
5. Ensure Make selected key the default TDE protector is checked
Remediation:
188 | P a g e
Using Azure CLI:
Use the below command to encrypt SQL server's TDE protector with a Customer-managed
key
Default Value:
By Default, Microsoft managed TDE protector is enabled for a SQL server. By default option
'Use your own key' is set to 'ON'.
References:
1. https://docs.microsoft.com/en-us/sql/relational-
databases/security/encryption/transparent-data-encryption-byok-azure-sql
2. https://azure.microsoft.com/en-in/blog/preview-sql-transparent-data-encryption-
tde-with-bring-your-own-key-support/
3. https://winterdom.com/2017/09/07/azure-sql-tde-protector-keyvault
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-1-standardize-azure-active-directory-as-the-central-
identity-and-authentication-system
Additional Information:
This configuration is audited or can be done only on SQL server. The same
configuration will be in effect on SQL Databases hosted on SQL Server.
Ensuring TDE is protected by a Customer-managed key on SQL Server does not
ensures the encryption of SQL Databases. Transparent Data Encryption : Data
Encryption (ON/OFF) setting on individual SQL Database decides whether database
is encrypted or not.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
189 | P a g e
5 Logging and Monitoring
This section covers security recommendations to follow to set logging and monitoring
policies on an Azure Subscription.
190 | P a g e
5.1 Configuring Diagnostic Settings
The Azure Diagnostic Settings capture control/management activities performed on a
subscription. By default, the Azure Portal retains activity logs only for 90 days. The
Diagnostic Settings define the type of events that are stored or streamed and the outputs—
storage account and/or event hub. The Diagnostic Settings, if configured properly, can
ensure that all activity logs are retained for longer duration. This section has
recommendations for correctly configuring the Diagnostic Settings so that all activity logs
captured are retained for longer periods.
When configuring Diagnostic Settings you may choose to export in one of three ways in
which you need to ensure appropriate data retention. The options are Log Analytics, Event
Hub, and a Storage Account. It is important to ensure you are aware and have set retention
as your organization sees fit.
191 | P a g e
5.1.1 Ensure that a 'Diagnostics Setting' exists (Automated)
Profile Applicability:
Level 1
Description:
Enable Diagnostic settings for exporting activity logs. Diagnostic setting are available for
each individual resources within a subscription. Settings should be configured for all
appropriate resources for your environment.
Rationale:
A diagnostic setting controls how a diagnostic log is exported. By default, logs are retained
only for 90 days. Diagnostic settings should be defined so that logs can be exported and
stored for a longer duration in order to analyze security activities within an Azure
subscription.
Audit:
1. Go to Diagnostics settings
2. Ensure that a Diagnostic status is enabled on all appropriate resources.
Remediation:
Default Value:
References:
192 | P a g e
1. https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-
overview-activity-logs#export-the-activity-log-with-a-log-profile
2. https://docs.microsoft.com/en-us/cli/azure/monitor/log-profiles?view=azure-cli-
latest#az_monitor_log_profiles_create
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-5-centralize-security-log-management-and-analysis
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
193 | P a g e
5.1.2 Ensure Diagnostic Setting captures appropriate categories
(Automated)
Profile Applicability:
Level 1
Description:
The diagnostic setting should be configured to log the appropriate activities from the
control/management plane.
Rationale:
A diagnostic setting controls how the diagnostic log is exported. Capturing the diagnostic
setting categories for appropriate control/management plane activities allows proper
alerting.
Audit:
1. Go to Azure Monitor
2. Click Activity log
3. Click on Diagnostic settings
4. Click on Edit Settings for the diagnostic settings entry
5. Ensure that the following categories are checked: Administrative, Alert,
Policy, and Security
AZ PowerShell cmdlets
Ensure the categories Administrative, Alert, Policy, and Security are set to Enabled:True
Remediation:
1. Go to Azure Monitor
194 | P a g e
2. Click Activity log
3. Click on Diagnostic settings
4. Click on Edit Settings for the diagnostic settings entry
5. Ensure that the following categories are checked: Administrative, Alert,
Policy, and Security
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-
01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"settingName": {
"type": "String"
},
"workspaceId": {
"type": "String"
}
},
"resources": [
{
"type": "Microsoft.Insights/diagnosticSettings",
"apiVersion": "2017-05-01-preview",
"name": "[parameters('settingName')]",
"dependsOn": [],
"properties": {
"workspaceId": "[parameters('workspaceId')]",
"logs": [
{
"category": "Administrative",
"enabled": true
},
{
"category": "Alert",
"enabled": true
},
{
"category": "Autoscale",
"enabled": false
},
{
"category": "Policy",
"enabled": true
},
{
"category": "Recommendation",
"enabled": false
},
{
"category": "ResourceHealth",
"enabled": false
},
195 | P a g e
{
"category": "Security",
"enabled": true
},
{
"category": "ServiceHealth",
"enabled": false
}
]
}
}
]
}
Default Value:
When the diagnostic setting is created using Azure Portal, by default no categories are
selected.
References:
1. https://docs.microsoft.com/en-us/azure/azure-monitor/platform/diagnostic-
settings
2. https://docs.microsoft.com/en-us/azure/azure-monitor/samples/resource-
manager-diagnostic-settings
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
196 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
date, user, timestamp, source addresses, destination addresses, and other useful
elements.
197 | P a g e
5.1.3 Ensure the storage container storing the activity logs is not
publicly accessible (Automated)
Profile Applicability:
Level 1
Description:
The storage account container containing the activity log export should not be publicly
accessible.
Rationale:
Allowing public access to activity log content may aid an adversary in identifying
weaknesses in the affected account's use or configuration.
Impact:
Configuring container Access policy to private will remove access from the container for
everyone except owners of the storage account. Access policy needs to be set explicitly in
order to allow access to other desired users.
Audit:
1. Go to Activity log
2. Select Export
3. Select
Subscriptionhttps://workbench.cisecurity.org/sections/43928/recommendations
/115705/edit#
4. In section Storage Account, note the name of the Storage account
5. Close the Export Audit Logs blade. Close the Monitor - Activity Log blade.
6. In right column, Click service Storage Accounts to access Storage account blade
7. Click on the storage account name noted in step 4. This will open blade specific to
that storage account
8. In Section Blob Service click Containers. It will list all the containers in next blade
9. Look for a record with container named as insight-operational-logs. Click ...
from right most column to open Context menu
10. Click Access Policy from Context Menu and ensure Public Access Level is set to
Private (no anonymous access)
198 | P a g e
1. Get storage account id configured with log profile:
Remediation:
Default Value:
By default, public access is set to null (allowing only private access) for a container with
activity log export.
References:
1. https://docs.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-
configure
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
199 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
200 | P a g e
5.1.4 Ensure the storage account containing the container with activity
logs is encrypted with BYOK (Use Your Own Key) (Automated)
Profile Applicability:
Level 2
Description:
The storage account with the activity log export container is configured to use BYOK (Use
Your Own Key).
Rationale:
Configuring the storage account with the activity log export container to use BYOK (Use
Your Own Key) provides additional confidentiality controls on log data as a given user must
have read permission on the corresponding storage account and must be granted decrypt
permission by the CMK.
Audit:
1. Go to Activity log
2. Select Export
3. Select Subscription
4. In section Storage Account, note the name of the Storage account
5. Close the Export Audit Logs blade. Close the Monitor - Activity Log blade.
6. In right column, Click service Storage Accounts to access Storage account blade
7. Click on the storage account name noted in step 4. This will open blade specific to
that storage account
8. In Section SETTINGS click Encryption. It will show Storage service encryption
configuration pane.
9. Ensure Use your own key is checked and Key URI is set.
201 | P a g e
In command output ensure keySource is set to Microsoft.Keyvault and
keyVaultProperties is not set to null
Remediation:
1. In right column, Click service Storage Accounts to access Storage account blade
2. Click on the storage account name
3. In Section SETTINGS click Encryption. It will show Storage service encryption
configuration pane.
4. Check Use your own key which will expand Encryption Key Settings
5. Use option Enter key URI or Select from Key Vault to set up encryption with
your own key
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-5-encrypt-sensitive-data-at-rest
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
202 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
retention of audit logs for enterprise assets. Review and update documentation
annually, or when significant enterprise changes occur that could impact this Safeguard.
203 | P a g e
5.1.5 Ensure that logging for Azure KeyVault is 'Enabled' (Automated)
Profile Applicability:
Level 1
Description:
Enable AuditEvent logging for key vault instances to ensure interactions with key vaults
are logged and available.
Rationale:
Monitoring how and when key vaults are accessed, and by whom enables an audit trail of
interactions with confidential information, keys and certificates managed by Azure
Keyvault. Enabling logging for Key Vault saves information in an Azure storage account that
the user provides. This creates a new container named insights-logs-auditevent
automatically for the specified storage account, and this same storage account can be used
for collecting logs for multiple key vaults.
Audit:
1. Go to Key vaults
2. For each Key vault
3. Go to Diagnostic Logs
4. Click on Edit Settings
5. Ensure that Archive to a storage account is Enabled
6. Ensure that AuditEvent is checked and the retention days is set to 180 days or as
appropriate
az keyvault list
Ensure that storageAccountId is set as appropriate. Also, ensure that category and days
are set. One of the sample outputs is as below.
204 | P a g e
"logs": [
{
"category": "AuditEvent",
"enabled": true,
"retentionPolicy": {
"days": 180,
"enabled": true
}
}
]
Remediation:
Follow Microsoft Azure documentation and setup Azure Key Vault Logging.
Default Value:
By default, Diagnostic AuditEvent logging is not enabled for Key Vault instances.
References:
1. https://docs.microsoft.com/en-us/azure/key-vault/key-vault-logging
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
205 | P a g e
5.2 Monitoring using Activity Log Alerts
This section covers security recommendations to follow in order to set alerting and
monitoring for critical activities on an Azure subscription.
206 | P a g e
5.2.1 Ensure that Activity Log Alert exists for Create Policy Assignment
(Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Create Policy Assignment event.
Rationale:
Monitoring for create policy assignment events gives insight into changes done in "azure
policy - assignments" and can reduce the time it takes to detect unsolicited changes.
Audit:
207 | P a g e
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.authorization/policyassignments/write",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Policy Assignment under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription resource from the entries populated under Resource
9. Verify Selection preview shows All Policy assignment (policyAssignments) and your
selected subscription name
10. Click Done
11. Under Condition click Add Condition
12. Select Create policy assignment signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
208 | P a g e
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Administrative",
"field": "category"
},
{
"containsAny": null,
"equals": "Microsoft.Authorization/policyAssignments/write",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
Default Value:
209 | P a g e
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
210 | P a g e
5.2.2 Ensure that Activity Log Alert exists for Delete Policy Assignment
(Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Delete Policy Assignment event.
Rationale:
Monitoring for delete policy assignment events gives insight into changes done in "azure
policy - assignments" and can reduce the time it takes to detect unsolicited changes.
Audit:
211 | P a g e
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.authorization/policyassignments/delete",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Policy Assignment under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription from the entries populated under Resource
9. Verify Selection preview shows All Policy assignment (policyAssignments) and your
selected subscription name
10. Click Done
11. Under Condition click Add Condition
12. Select Delete policy assignment signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
212 | P a g e
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Administrative",
"field": "category"
},
{
"containsAny": null,
"equals": "Microsoft.Authorization/policyAssignments/delete",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
213 | P a g e
$ComplianceName = 'Delete Policy Assignment'
$Signal = 'Microsoft.Authorization/policyAssignments/delete'
$Category = 'Administrative'
$ResourceGroupName = 'MyResourceGroup'
$actiongroup = (Get-AzActionGroup -Name corenotifications -ResourceGroupName
$ResourceGroupName)
$ActionGroupId = (New-Object
Microsoft.Azure.Management.Monitor.Models.ActivityLogAlertActionGroup
$ActionGroup.Id)
$Subscription = (Get-AzContext).Subscription
$location = 'Global'
$scope = "/subscriptions/$($Subscription.Id)"
$alertName = "$($Subscription.Name) - $($ComplianceName)"
$conditions = @(
New-AzActivityLogAlertCondition -Field 'category' -Equal $Category
New-AzActivityLogAlertCondition -Field 'operationName' -Equal $Signal
)
Set-AzActivityLogAlert -Location $location -Name $alertName -
ResourceGroupName $ResourceGroupName -Scope $scope -Action $ActionGroupId -
Condition $conditions
Default Value:
References:
1. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
2. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
5. https://azure.microsoft.com/en-us/services/blueprints/
Additional Information:
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
214 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
215 | P a g e
5.2.3 Ensure that Activity Log Alert exists for Create or Update Network
Security Group (Automated)
Profile Applicability:
Level 1
Description:
Create an Activity Log Alert for the "Create" or "Update Network Security Group" event.
Rationale:
Monitoring for "Create" or "Update Network Security Group" events gives insight into
network access changes and may reduce the time it takes to detect suspicious activity.
Audit:
216 | P a g e
Condition Matches:
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.network/networksecuritygroups/write",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Network Security Groups under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription resource from the entries populated under Resource
9. Verify Selection preview shows All Network Security Groups and your selected
subscription name
10. Click Done
11. Under Condition click Add Condition
12. Select Create or Update Network Security Group signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
217 | P a g e
https://management.azure.com/subscriptions/$0/resourceGroups/<Resource_Group_
To
Create_Alert_In>/providers/microsoft.insights/activityLogAlerts/<Unique_Alert
_Name>?api-version=2017-04-01 -d@"input.json"'
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Administrative",
"field": "category"
},
{
"containsAny": null,
"equals": "Microsoft.Network/networkSecurityGroups/write",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
218 | P a g e
Default Value:
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
219 | P a g e
5.2.4 Ensure that Activity Log Alert exists for Delete Network Security
Group (Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Delete Network Security Group event.
Rationale:
Monitoring for "Delete Network Security Group" events gives insight into network access
changes and may reduce the time it takes to detect suspicious activity.
Audit:
220 | P a g e
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.network/networksecuritygroups/delete",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Network Security Groups under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription resource from the entries populated under Resource
9. Click Done
10. Verify Selection preview shows Network Security Groups and your selected
subscription name
11. Under Condition click Add Condition
12. Select Delete Network Security Group signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
221 | P a g e
Create_Alert_In>/providers/microsoft.insights/activityLogAlerts/<Unique_Alert
_Name>?api-version=2017-04-01 -d@"input.json"'
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Administrative",
"field": "category"
},
{
"containsAny": null,
"equals": "Microsoft.Network/networkSecurityGroups/delete",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
222 | P a g e
Default Value:
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
223 | P a g e
5.2.5 Ensure that Activity Log Alert exists for Create or Update Network
Security Group Rule (Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Create or Update Network Security Group Rule event.
Rationale:
Monitoring for Create or Update Network Security Group Rule events gives insight into
network access changes and may reduce the time it takes to detect suspicious activity.
Audit:
224 | P a g e
Condition Matches:
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.network/networksecuritygroups/securityrules/write",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Network Security Group Rules under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription resource from the entries populated under Resource
9. Click Done
10. Verify Selection preview shows Network Security Group Rules and your selected
subscription name
11. Under Condition click Add Condition
12. Select Create or Update Network Security Group Rule signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
225 | P a g e
https://management.azure.com/subscriptions/$0/resourceGroups/<Resource_Group_
To
Create_Alert_In>/providers/microsoft.insights/activityLogAlerts/<Unique_Alert
_Name>?api-version=2017-04-01 -d@"input.json"'
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Administrative",
"field": "category"
},
{
"containsAny": null,
"equals":
"Microsoft.Network/networkSecurityGroups/securityRules/write",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
226 | P a g e
Default Value:
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
227 | P a g e
5.2.6 Ensure that activity log alert exists for the Delete Network Security
Group Rule (Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Delete Network Security Group Rule event.
Rationale:
Monitoring for Delete Network Security Group Rule events gives insight into network
access changes and may reduce the time it takes to detect suspicious activity.
Audit:
228 | P a g e
Condition Matches:
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.network/networksecuritygroups/securityrules/delete",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Network Security Group Rules under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription resource from the entries populated under Resource
9. Click Done
10. Verify Selection preview shows Network Security Group Rules and your selected
subscription name
11. Under Condition click Add Condition
12. Select Delete Network Security Group Rule signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
229 | P a g e
https://management.azure.com/subscriptions/$0/resourceGroups/<Resource_Group_
To
Create_Alert_In>/providers/microsoft.insights/activityLogAlerts/<Unique_Alert
_Name>?api-version=2017-04-01 -d@"input.json"'
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Administrative",
"field": "category"
},
{
"containsAny": null,
"equals":
"Microsoft.Network/networkSecurityGroups/securityRules/delete",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
230 | P a g e
Default Value:
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
231 | P a g e
5.2.7 Ensure that Activity Log Alert exists for Create or Update Security
Solution (Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Create or Update Security Solution event.
Rationale:
Monitoring for Create or Update Security Solution events gives insight into changes to the
active security solutions and may reduce the time it takes to detect suspicious activity.
Audit:
232 | P a g e
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.security/securitysolutions/write",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Security Solutions under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription resource from the entries populated under Resource
9. Click Done
10. Verify Selection preview shows Security Solutions and your selected subscription
name
11. Under Condition click Add Condition
12. Select Create or Update Security Solutions signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
233 | P a g e
Create_Alert_In>/providers/microsoft.insights/activityLogAlerts/<Unique_Alert
_Name>?api-version=2017-04-01 -d@"input.json"'
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Security",
"field": "category"
},
{
"containsAny": null,
"equals": "Microsoft.Security/securitySolutions/write",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
234 | P a g e
Default Value:
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
235 | P a g e
5.2.8 Ensure that Activity Log Alert exists for Delete Security Solution
(Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Delete Security Solution event.
Rationale:
Monitoring for Delete Security Solution events gives insight into changes to the active
security solutions and may reduce the time it takes to detect suspicious activity.
Audit:
236 | P a g e
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.security/securitysolutions/delete",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select Security Solutions under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription resource from the entries populated under Resource
9. Click Done
10. Verify Selection preview shows Security Solutions and your selected subscription
name
11. Under Condition click Add Condition
12. Select Delete Security Solutions signal
13. Click Done
14. Under Action group, select Add action groups and complete creation process or
select appropriate action group
15. Under Alert rule details, enter Alert rule name and Description
16. Select appropriate resource group to save the alert to
17. Check Enable alert rule upon creation checkbox
18. Click Create alert rule
237 | P a g e
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Security",
"field": "category"
},
{
"containsAny": null,
"equals": "Microsoft.Security/securitySolutions/delete",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
Default Value:
238 | P a g e
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
239 | P a g e
5.2.9 Ensure that Activity Log Alert exists for Create or Update or Delete
SQL Server Firewall Rule (Automated)
Profile Applicability:
Level 1
Description:
Create an activity log alert for the Create or Update or Delete SQL Server Firewall Rule
event.
Rationale:
Monitoring for Create or Update or Delete SQL Server Firewall Rule events gives insight
into network access changes and may reduce the time it takes to detect suspicious activity.
Audit:
240 | P a g e
Enabled set to True
Condition Matches:
{
"location": "Global",
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"condition": {
"field": "operationName",
"equals": "microsoft.sql/servers/firewallrules/write",
"containsAny": null
},
"enabled": true
}
Remediation:
1. Go to Monitor
2. Select Alerts
3. Click On New Alert Rule
4. Under Scope, click Select resource
5. Select the appropriate subscription under Filter by subscription
6. Select SQL servers under Filter by resource type
7. Select All for Filter by location
8. Click on the subscription from the entries populated under Resource
9. Verify Selection preview shows SQL servers and your selected subscription name
10. Under Condition click Add Condition
11. Select All Administrative operations signal
12. Click Done
13. Under Action group, select Add action groups and complete creation process or
select appropriate action group
14. Under Alert rule details, enter Alert rule name and Description
15. Select appropriate resource group to save the alert to
16. Check Enable alert rule upon creation checkbox
17. Click Create alert rule
241 | P a g e
To
Create_Alert_In>/providers/microsoft.insights/activityLogAlerts/<Unique_Alert
_Name>?api-version=2017-04-01 -d@"input.json"'
Where input.json contains the Request body JSON data as mentioned below.
{
"location": "Global",
"tags": {},
"properties": {
"scopes": [
"/subscriptions/<Subscription_ID>"
],
"enabled": true,
"condition": {
"allOf": [
{
"containsAny": null,
"equals": "Administrative",
"field": "category"
},
{
"containsAny": null,
"equals": "Microsoft.Sql/servers/firewallRules/write",
"field": "operationName"
}
]
},
"actions": {
"actionGroups": [
{
"actionGroupId":
"/subscriptions/<Subscription_ID>/resourceGroups/<Resource_Group_For_Alert_Gr
oup>/providers/microsoft.insights/actionGroups/<Alert_Group>",
"webhookProperties": null
}
]
},
}
}
<Resource_Group_To Create_Alert_In>
<Unique_Alert_Name>
<Subscription_ID> in scopes
<Subscription_ID> in actionGroupId
<Resource_Group_For_Alert_Group> in actionGroupId
<Alert_Group> in actionGroupId
242 | P a g e
Default Value:
References:
1. https://azure.microsoft.com/en-us/updates/classic-alerting-monitoring-retirement
2. https://docs.microsoft.com/en-in/azure/azure-monitor/platform/alerts-activity-
log
3. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/createorupdate
4. https://docs.microsoft.com/en-
in/rest/api/monitor/activitylogalerts/listbysubscriptionid
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-4-enable-logging-for-azure-resources
Additional Information:
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
243 | P a g e
5.3 Ensure that Diagnostic Logs are enabled for all services which
support it. (Automated)
Profile Applicability:
Level 1
Description:
Diagnostic Logs capture activity to the data access plane while the Activity log is a
subscription-level log for the control plane. Resource-level diagnostic logs provide insight
into operations that were performed within that resource itself, for example, getting a
secret from a Key Vault. Currently, 32 Azure resources support Diagnostic Logging (See the
references section for a complete list), including Network Security Groups, Load Balancers,
Key Vault, AD, Logic Apps and CosmosDB. The content of these logs varies by resource type.
For example, Windows event system logs are a category of diagnostics logs for VMs, and
blob, table, and queue logs are categories of diagnostics logs for storage accounts.
A number of back-end services were not configured to log and store Diagnostic Logs for
certain activities or for a sufficient length. It is crucial that logging systems are correctly
configured to log all relevant activities and retain those logs for a sufficient length of time.
By default, Diagnostic Logs are not enabled. Given that the mean time to detection in an
enterprise is 240 days, a minimum retention period of two years is recommended.
Note: The CIS Benchmark covers some specific Diagnostic Logs separately.
3.3 - Ensure Storage logging is enabled for Queue service for read, write,
and delete requests
6.4 Ensure that Network Security Group Flow Log retention period is
'greater than 90 days'
Rationale:
A lack of Diagnostic Logs reduces the visibility into the data plane and therefore an
organization's ability to detect reconnaissance, authorization attempts or other malicious
activity. Unlike Activity Logs, Diagnostic Logs are not enabled by default. Specifically,
without Diagnostic Logs it would be impossible to tell which entities had accessed a data
store that which was breached. In addition, alerts for failed attempts to access APIs for Web
Services or Databases are only possible when Diagnostic Logging is enabled.
244 | P a g e
Impact:
Audit:
1. Go to the resource
2. Click on Diagnostic settings
3. In the blade that appears, click "Add diagnostic setting"
4. Configure the diagnostic settings
5. Click on Save
Remediation:
Azure Subscriptions should log every access and operation for all resources.
Logs should be sent to Storage and a Log Analytics Workspace or equivalent third-party
system.
Logs should be kept in readily accessible storage for a minimum of one year, and then
moved to inexpensive cold storage for a duration of time as necessary. If retention policies
are set but storing logs in a Storage Account is disabled (for example, if only Event Hubs or
Log Analytics options are selected), the retention policies have no effect.
Enable all logging at first, and then be more aggressive moving data to cold storage if the
volume of data
245 | P a g e
becomes a cost concern.
From Azure Console
The specific steps for configuring resources within the Azure console vary depending on
resource, but typically the steps are:
1. Go to the resource
2. Click on Diagnostic settings
3. In the blade that appears, click "Add diagnostic setting"
4. Configure the diagnostic settings
5. Click on Save
Enable logging for all resources which support Diagnostic Logs to ensure interactions
within the resource are logged and available. The skeleton command for creating
logs and metrics with unlimited retention on a
generic resource are shown below.
Default Value:
Disabled
246 | P a g e
References:
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
247 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
mobile device, in order to identify potentially malicious activity and assist incident
handlers with identifying potentially compromised systems.
248 | P a g e
6 Networking
This section covers security recommendations to follow in order to set networking policies
on an Azure subscription.
249 | P a g e
6.1 Ensure that RDP access is restricted from the internet (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
The potential security problem with using RDP over the Internet is that attackers can use
various brute force techniques to gain access to Azure Virtual Machines. Once the attackers
gain access, they can use a virtual machine as a launch point for compromising other
machines on an Azure Virtual Network or even attack networked devices outside of Azure.
Audit:
"access" : "Allow"
"destinationPortRange" : "3389" or "*" or "[port range containing 3389]"
"direction" : "Inbound"
"protocol" : "TCP"
"sourceAddressPrefix" : "*" or "0.0.0.0" or "<nw>/0" or "/0" or "internet" or
"any"
Remediation:
Disable direct RDP access to your Azure Virtual Machines from the Internet. After direct
RDP access from the Internet is disabled, you have other options you can use to access
these virtual machines for remote management:
250 | P a g e
Point-to-site VPN
Site-to-site VPN
ExpressRoute
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security/azure-security-network-
security-best-practices#disable-rdpssh-access-to-azure-virtual-machines
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
251 | P a g e
6.2 Ensure that SSH access is restricted from the internet (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
The potential security problem with using SSH over the Internet is that attackers can use
various brute force techniques to gain access to Azure Virtual Machines. Once the attackers
gain access, they can use a virtual machine as a launch point for compromising other
machines on the Azure Virtual Network or even attack networked devices outside of Azure.
Audit:
1. Open the Networking blade for the specific Virtual machine in Azure portal
2. Verify that the INBOUND PORT RULES does not have a rule for SSH such as
o port = 22,
o protocol = TCP,
o Source = Any OR Internet
"access" : "Allow"
"destinationPortRange" : "22" or "*" or "[port range containing 22]"
"direction" : "Inbound"
"protocol" : "TCP"
"sourceAddressPrefix" : "*" or "0.0.0.0" or "<nw>/0" or "/0" or "internet" or
"any"
Remediation:
Disable direct SSH access to your Azure Virtual Machines from the Internet. After direct
SSH access from the Internet is disabled, you have other options you can use to access these
virtual machines for remote management:
252 | P a g e
Point-to-site VPN
Site-to-site VPN
ExpressRoute
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security/azure-security-network-
security-best-practices#disable-rdpssh-access-to-azure-virtual-machines
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
253 | P a g e
6.3 Ensure no SQL Databases allow ingress 0.0.0.0/0 (ANY IP)
(Automated)
Profile Applicability:
Level 1
Description:
Ensure that no SQL Databases allow ingress from 0.0.0.0/0 (ANY IP).
Rationale:
SQL Server includes a firewall to block access to unauthorized connections. More granular
IP addresses can be defined by referencing the range of addresses available from specific
datacenters.
By default, for a SQL server, a Firewall exists with StartIp of 0.0.0.0 and EndIP of 0.0.0.0
allowing access to all the Azure services.
Additionally, a custom rule can be set up with StartIp of 0.0.0.0 and EndIP of
255.255.255.255 allowing access from ANY IP over the Internet.
In order to reduce the potential attack surface for a SQL server, firewall rules should be
defined with more granular IP addresses by referencing the range of addresses available
from specific datacenters.
Impact:
Impact: Disabling Allow access to Azure Services will break all connections to SQL
server and Hosted Databases unless custom IP specific rules are not added in Firewall
Policy.
Audit:
1. Go to SQL servers
2. For each SQL server
3. Click on Firewall / Virtual Networks
4. Ensure that Allow access to Azure services to set to OFF
5. Ensure that no firewall rule exists with
Start IP of 0.0.0.0
254 | P a g e
or other combinations which allows access to wider public IP ranges
Get-AzureRmSqlServer
Ensure that StartIpAddress is not set to 0.0.0.0 or other combinations which allows
access to wider public IP ranges including Windows Azure IP ranges.
Remediation:
1. Go to SQL servers
2. For each SQL server
3. Click on Firewall / Virtual Networks
4. Set Allow access to Azure services to `OFF'
5. Set firewall rules to limit access to only authorized connections
Default Value:
By default, setting Allow access to Azure Services is set to ON allowing access to all
Windows Azure IP ranges.
255 | P a g e
References:
1. https://docs.microsoft.com/en-us/sql/database-engine/configure-
windows/configure-a-windows-firewall-for-database-engine-access?view=sql-
server-2017
2. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/get-
azurermsqlserverfirewallrule?view=azurermps-5.2.0
3. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/set-
azurermsqlserverfirewallrule?view=azurermps-5.2.0
4. https://docs.microsoft.com/en-us/powershell/module/azurerm.sql/remove-
azurermsqlserverfirewallrule?view=azurermps-5.2.0
5. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-
configure
6. https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-
procedures/sp-set-database-firewall-rule-azure-sql-database?view=azuresqldb-
current
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
Additional Information:
Firewall rules configured on individual SQL Database using Transact-sql overrides the
rules set on SQL server. Azure does not provides any Powershell, API, CLI, Portal option to
check database level firewall rules and so far Transact-SQL is the only way to check for the
same. For comprehensive control over egress traffic on SQL Databases, Firewall rules
should be checked using SQL client.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
v7 12 Boundary Defense
Boundary Defense
256 | P a g e
6.4 Ensure that Network Security Group Flow Log retention period is
'greater than 90 days' (Automated)
Profile Applicability:
Level 2
Description:
Network Security Group Flow Logs should be enabled and the retention period is set to
greater than or equal to 90 days.
Rationale:
Flow logs enable capturing information about IP traffic flowing in and out of network
security groups. Logs can be used to check for anomalies and give insight into suspected
breaches.
Audit:
1. Go to Network Watcher
2. Select NSG flow logs blade in the Logs section
3. Select each Network Security Group from the list
4. Ensure Status is set to On
5. Ensure Retention (days) setting greater than 90 days
Ensure that enabled is set to true and days is set to greater then or equal to 90.
Remediation:
1. Go to Network Watcher
2. Select NSG flow logs blade in the Logs section
3. Select each Network Security Group from the list
4. Ensure Status is set to On
5. Ensure Retention (days) setting greater than 90 days
6. Select your storage account in the Storage account field
257 | P a g e
7. Select Save
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-nsg-
flow-logging-overview
2. https://docs.microsoft.com/en-us/cli/azure/network/watcher/flow-
log?view=azure-cli-latest
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-6-configure-log-storage-retention
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
258 | P a g e
6.5 Ensure that Network Watcher is 'Enabled' (Manual)
Profile Applicability:
Level 1
Description:
Rationale:
Network diagnostic and visualization tools available with Network Watcher help users
understand, diagnose, and gain insights to the network in Azure.
Audit:
1. Go to Network Watcher
2. Ensure that the STATUS is set to Enabled
az account list-locations
This will list all regions that exist in the subscription. Compare this list to the previous one
to Ensure that for all regions, provisioningState is set to Succeeded.
Remediation:
Default Value:
Network Watcher is automatically enabled. When you create or update a virtual network in
your subscription, Network Watcher will be enabled automatically in your Virtual
Network's region. There is no impact to your resources or associated charge for
automatically enabling Network Watcher.
259 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-
monitoring-overview
2. https://docs.azure.cn/zh-cn/cli/network/watcher?view=azure-cli-
latest#az_network_watcher_list
3. https://docs.azure.cn/zh-cn/cli/network/watcher?view=azure-cli-
latest#az_network_watcher_configure
4. https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-
create
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-logging-threat-detection#lt-3-enable-logging-for-azure-network-activities
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
260 | P a g e
6.6 Ensure that UDP Services are restricted from the Internet
(Automated)
Profile Applicability:
Level 1
Description:
Rationale:
The potential security problem with broadly exposing UDP services over the Internet is
that attackers can use DDoS amplification techniques to reflect spoofed UDP traffic from
Azure Virtual Machines. The most common types of these attacks use exposed DNS, NTP,
SSDP, SNMP, CLDAP and other UDP-based services as amplification source for disrupting
services of other machines on the Azure Virtual Network or even attack networked devices
outside of Azure.
Audit:
1. Open the Networking blade for the specific Virtual machine in Azure portal
2. Verify that the INBOUND PORT RULES does not have a rule for UDP such as
protocol = UDP,
Source = Any OR Internet
"access" : "Allow"
"destinationPortRange" : "*" or "[port range containing 53, 123, 161, 389,
1900, or other configured UDP-based services]"
"direction" : "Inbound"
"protocol" : "UDP"
"sourceAddressPrefix" : "*" or "0.0.0.0" or "<nw>/0" or "/0" or "internet" or
"any"
261 | P a g e
Remediation:
Disable direct UDP access to your Azure Virtual Machines from the Internet. After direct
UDP access from the Internet is disabled, you have other options you can use to access UDP
based services running on these virtual machines:
Point-to-site VPN
Site-to-site VPN
ExpressRoute
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security/fundamentals/network-best-
practices#secure-your-critical-azure-service-resources-to-only-your-virtual-
networks
2. https://docs.microsoft.com/en-us/azure/security/fundamentals/ddos-best-
practices
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
262 | P a g e
7 Virtual Machines
This section covers security recommendations to follow in order to set virtual machine
policies on an Azure subscription.
263 | P a g e
7.1 Ensure Virtual Machines are utilizing Managed Disks (Manual)
Profile Applicability:
Level 1
Description:
Migrate BLOB based VHD's to Managed Disks on Virtual Machines to exploit the default
features of this configuration. The features include
Rationale:
For ARM deployed Virtual Machines, Azure Adviser will at some point recommend moving
VHD's to managed disks both from a security and cost management perspective.
Impact:
There is no operational impact of migrating to managed disks other than the benefits
mentioned above.
NOTE When converting to managed disks VMs will be powered off and back on.
Audit:
Using Powershell
264 | P a g e
Get-AzVM | ForEach-Object {"Name: " + $_.Name;"ManagedDisk Id: " +
$_.StorageProfile.OsDisk.ManagedDisk.Id;""}
Example output:
Name: vm1
ManagedDisk Id: /disk1/id
Name: vm2
ManagedDisk Id: /disk2/id
If the 'ManagedDisk Id' field is empty the os disk for that vm is not managed.
Remediation:
References:
1. https://docs.microsoft.com/en-us/azure/virtual-machines/windows/convert-
unmanaged-to-managed-disks
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-1-define-asset-management-and-data-protection-
strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
265 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
requirements, based on sensitivity and retention standards for the enterprise. Review
and update documentation annually, or when significant enterprise changes occur that
could impact this Safeguard.
v7 13 Data Protection
Data Protection
266 | P a g e
7.2 Ensure that 'OS and Data' disks are encrypted with CMK
(Automated)
Profile Applicability:
Level 2
Description:
Ensure that OS disks (boot volumes) and data disks (non-boot volumes) are encrypted with
CMK.
Rationale:
Encrypting the IaaS VM's OS disk (boot volume), Data disks (non-boot volume) ensures
that the entire content is fully unrecoverable without a key and thus protects the volume
from unwarranted reads. CMK is superior encryption although requires additional
planning.
Impact:
NOTE: You must have your key vault setup to utilize this.
Audit:
1. Go to Virtual machines
2. For each virtual machine, go to Settings
3. Click on Disks
4. Ensure that the OS disk and Data disks have encryption set to CMK.
Using PowerShell
$ResourceGroupName="yourResourceGroupName"
$DiskName="yourDiskName"
267 | P a g e
Remediation:
1. Go to Virtual machines
2. For each virtual machine, go to Settings
3. Click on Disks
4. Click the X to detach the disk from the VM
5. Now search for Disks and locate the unattached disk
6. Click the disk then select Encryption
7. Change your encryption type, then select your encryption set
8. Click Save
9. Go back to the VM and re-attach the disk
Using PowerShell
$KVRGname = 'MyKeyVaultResourceGroup';
$VMRGName = 'MyVirtualMachineResourceGroup';
$vmName = 'MySecureVM';
$KeyVaultName = 'MySecureVault';
$KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName
$KVRGname;
$diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
$KeyVaultResourceId = $KeyVault.ResourceId;
NOTE: During encryption it is likely that a reboot will be required, it may take up to 15
minutes to complete the process.
NOTE 2: This may differ for Linux Machines as you may need to set the -skipVmBackup
parameter
Default Value:
References:
1. https://docs.microsoft.com/azure/security/fundamentals/azure-disk-encryption-
vms-vmss
2. https://docs.microsoft.com/en-us/azure/security-center/security-center-disk-
encryption?toc=%2fazure%2fsecurity%2ftoc.json
268 | P a g e
3. https://docs.microsoft.com/azure/security/fundamentals/data-encryption-best-
practices#protect-data-at-resthttps://docs.microsoft.com/azure/virtual-
machines/windows/disk-encryption-portal-quickstart
4. https://docs.microsoft.com/en-us/rest/api/compute/disks/delete
5. https://docs.microsoft.com/en-
us/rest/api/compute/disks/update#encryptionsettings
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-5-encrypt-sensitive-data-at-rest
7. https://docs.microsoft.com/en-us/azure/virtual-machines/windows/disks-enable-
customer-managed-keys-powershell
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
269 | P a g e
7.3 Ensure that 'Unattached disks' are encrypted with CMK (Automated)
Profile Applicability:
Level 2
Description:
Ensure that unattached disks in a subscription are encrypted with a Customer Managed
Key (CMK).
Rationale:
Managed disks are encrypted by default with Platform-managed keys. Using Customer-
managed keys may provide an additional level of security or meet an organization's
regulatory requirements. Encrypting managed disks ensures that its entire content is fully
unrecoverable without a key and thus protects the volume from unwarranted reads. Even if
the disk is not attached to any of the VMs, there is always a risk where a compromised user
account with administrative access to VM service can mount/attach these data disks which
may lead to sensitive information disclosure and tampering.
Impact:
Encryption is available only on Standard tier VMs. This might cost you more.
Utilizing and maintaining Customer-managed keys will require additional work to created,
protect, and rotate keys.
Audit:
1. Go to Disks
2. Click on Add Filter
3. In the filter field select Disk state
4. In the Value field select Unattached
5. Click Apply
6. for each disk listed ensure that Encryption type in the encryption blade is
`Encryption at-rest with a customer-managed key'
270 | P a g e
az disk list --query '[? diskstate == `Unattached`].{encryptionSettings:
encryptionSettings, name: name}' -o json
Sample Output:
[
{
"encryptionSettings": null,
"name": "<Disk1>"
},
{
"encryptionSettings": null,
"name": "<Disk2>"
}
]
Remediation:
If data stored in the disk is no longer useful, refer to Azure documentation to delete
unattached data disks at:
-https://docs.microsoft.com/en-us/rest/api/compute/disks/delete
-https://docs.microsoft.com/en-us/cli/azure/disk?view=azure-cli-latest#az-
disk-delete
If data stored in the disk is important, To encrypt the disk refer azure documentation at:
-https://docs.microsoft.com/en-us/azure/virtual-machines/disks-enable-
customer-managed-keys-portal
-https://docs.microsoft.com/en-
us/rest/api/compute/disks/update#encryptionsettings
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security/fundamentals/azure-disk-
encryption-vms-vmss
2. https://docs.microsoft.com/en-us/azure/security-center/security-center-disk-
encryption?toc=%2fazure%2fsecurity%2ftoc.json
3. https://docs.microsoft.com/en-us/rest/api/compute/disks/delete
4. https://docs.microsoft.com/en-us/cli/azure/disk?view=azure-cli-latest#az-disk-
delete
5. https://docs.microsoft.com/en-
us/rest/api/compute/disks/update#encryptionsettings
6. https://docs.microsoft.com/en-us/cli/azure/disk?view=azure-cli-latest#az-disk-
update
271 | P a g e
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-5-encrypt-sensitive-data-at-rest
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
272 | P a g e
7.4 Ensure that only approved extensions are installed (Manual)
Profile Applicability:
Level 1
Description:
Rationale:
Azure virtual machine extensions are small applications that provide post-deployment
configuration and automation tasks on Azure virtual machines. These extensions run with
administrative privileges and could potentially access anything on a virtual machine. The
Azure Portal and community provide several such extensions. Each organization should
carefully evaluate these extensions and ensure that only those that are approved for use
are actually implemented.
Audit:
1. Go to Virtual machines
2. For each virtual machine, go to Settings
3. Click on Extensions
4. Ensure that the listed extensions are approved for use.
Remediation:
1. Go to Virtual machines
2. For each virtual machine, go to Settings
3. Click on Extensions
4. If there are unapproved extensions, uninstall them.
273 | P a g e
From Azure Command Line Interface 2.0
From the audit command identify the unapproved extensions, and use the below CLI
command to remove an unapproved extension attached to VM.
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/virtual-machines/windows/extensions-
features
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-endpoint-security
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
274 | P a g e
7.5 Ensure that the latest OS Patches for all Virtual Machines are
applied (Manual)
Profile Applicability:
Level 1
Description:
Ensure that the latest OS patches for all virtual machines are applied.
Rationale:
The Azure Security Center retrieves a list of available security and critical updates from
Windows Update or Windows Server Update Services (WSUS), depending on which service
is configured on a Windows VM. The security center also checks for the latest updates in
Linux systems. If a VM is missing a system update, the security center will recommend
system updates be applied.
Audit:
Alternatively, you can employ your own patch assessment and management tool to
periodically assess, report and install the required security patches for your OS.
Please note that at this point of time, there is no API/CLI mechanism available to
programmatically conduct security assessment for this recommendation.
Remediation:
Follow Microsoft Azure documentation to apply security patches from the security center.
Alternatively, you can employ your own patch assessment and management tool to
periodically assess, report and install the required security patches for your OS.
275 | P a g e
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-7-rapidly-and-automatically-remediate-
software-vulnerabilities
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
276 | P a g e
7.6 Ensure that the endpoint protection for all Virtual Machines is
installed (Manual)
Profile Applicability:
Level 1
Description:
Rationale:
Installing endpoint protection systems (like Antimalware for Azure) provides for real-time
protection capability that helps identify and remove viruses, spyware, and other malicious
software, with configurable alerts when known malicious or unwanted software attempts
to install itself or run on Azure systems.
Impact:
Audit:
It should list below or any other endpoint extensions as one of the installed extensions.
Alternatively, you can employ your own endpoint protection tool for your OS.
Remediation:
Follow Microsoft Azure documentation to install endpoint protection from the security
center. Alternatively, you can employ your own endpoint protection tool for your OS.
277 | P a g e
References:
1. https://docs.microsoft.com/en-us/azure/security-center/security-center-install-
endpoint-protection
2. https://docs.microsoft.com/en-us/azure/security/azure-security-antimalware
3. https://docs.microsoft.com/en-us/cli/azure/vm/extension?view=azure-cli-
latest#az_vm_extension_list
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-endpoint-security#es-1-use-endpoint-detection-and-response-edr
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
278 | P a g e
7.7 Ensure that VHD's are encrypted (Manual)
Profile Applicability:
Level 2
Description:
VHD (Virtual Hard Disks) are stored in BLOB storage and are the old style disks that were
attached to Virtual Machines, and the BLOB VHD was then leased to the VM. By Default
storage accounts are not encrypted, and Azure Defender(Security Centre) would then
recommend that the OS disks should be encrypted. Storage accounts can be encrypted as a
whole using PMK or CMK and this should be turned on for storage accounts containing
VHD's.
Rationale:
With the changes that have been made that recommend using managed disks that are
encrypted by default, we need to also have a recommendation that "legacy" disk that may
for a number of reasons need to be left as VHD's should also be encrypted to protect the
data content.
Impact:
Depending on how the encryption is implemented will change the size of the impact, if
provider managed keys(PMK) are utilised the impact is relatively low, but processes need
to be put in place to regularly rotate the keys. If Customer managed keys(CMK) are utilised
a key management process needs to be implemented to store and manage key rotation and
thus the impact is medium to high depending on user maturity with key management.
Audit:
Remediation:
279 | P a g e
If you wish to use an azure managed key (the default), you can save at this point and
encryption will be applied to the account.
If you select customer managed key it will ask for the location of the key (The default is an
Azure Keyvault) and the key name.
Once these are captured, save the configuration and the account will be encrypted using the
provided key.
Using Azure Command Line Interface:
Create the Keyvault
Default Value:
References:
1. CLI: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/disk-
encryption-cli-quickstart
2. Powershell: https://docs.microsoft.com/en-us/azure/virtual-
machines/windows/disk-encryption-powershell-quickstart
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-5-encrypt-sensitive-data-at-rest
280 | P a g e
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
v7 13 Data Protection
Data Protection
281 | P a g e
8 Other Security Considerations
This section covers security recommendations to follow in order to set general security and
operational controls on an Azure Subscription.
282 | P a g e
8.1 Ensure that the expiration date is set on all keys (Automated)
Profile Applicability:
Level 1
Description:
Ensure that all keys in Azure Key Vault have an expiration time set.
Rationale:
Azure Key Vault enables users to store and use cryptographic keys within the Microsoft
Azure environment. The exp (expiration time) attribute identifies the expiration time on or
after which the key MUST NOT be used for a cryptographic operation. By default, keys
never expire. It is thus recommended that keys be rotated in the key vault and set an
explicit expiration time for all keys. This ensures that the keys cannot be used beyond their
assigned lifetimes.
Impact:
Keys cannot be used beyond their assigned expiration times respectively. Keys need to be
rotated periodically wherever they are used.
Audit:
1. Go to Key vaults
2. For each Key vault, click on Keys.
3. Under the Settings section, Make sure Enabled? is set to Yes
4. Then ensure that each key in the vault has EXPIRATION DATE set as appropriate
Remediation:
283 | P a g e
1. Go to Key vaults
2. For each Key vault, click on Keys.
3. Under the Settings section, Make sure Enabled? is set to Yes
4. Set an appropriate EXPIRATION DATE on all keys.
Note:
In order to access expiration time on all keys in Azure Key Vault using Microsoft API
requires "List" Key permission.
To provide required access follow below steps,
1. Go to Key vaults
2. For each Key vault, click on Access Policy.
3. Add access policy with Key permission as List
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis
2. https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-
certificates#key-vault-keys
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-1-define-asset-management-and-data-protection-
strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
284 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
v7 13 Data Protection
Data Protection
285 | P a g e
8.2 Ensure that the expiration date is set on all Secrets (Automated)
Profile Applicability:
Level 1
Description:
Ensure that all Secrets in the Azure Key Vault have an expiration time set.
Rationale:
The Azure Key Vault enables users to store and keep secrets within the Microsoft Azure
environment. Secrets in the Azure Key Vault are octet sequences with a maximum size of
25k bytes each. The exp (expiration time) attribute identifies the expiration time on or
after which the secret MUST NOT be used. By default, secrets never expire. It is thus
recommended to rotate secrets in the key vault and set an explicit expiration time for all
secrets. This ensures that the secrets cannot be used beyond their assigned lifetimes.
Impact:
Secrets cannot be used beyond their assigned expiry times respectively. Secrets need to be
rotated periodically wherever they are used.
Audit:
1. Go to Key vaults
2. For each Key vault, click on Secrets.
3. Under the Settings section, Make sure Enabled? is set to Yes
4. Ensure that each secret in the vault has EXPIRATION DATE set as appropriate
Remediation:
1. Go to Key vaults
286 | P a g e
2. For each Key vault, click on Secrets.
3. Under the Settings section, Make sure Enabled? is set to Yes
4. Set an appropriate EXPIRATION DATE on all secrets.
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis
2. https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-
certificates#key-vault-secrets
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-4-set-up-emergency-access-in-azure-ad
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
5. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-8-choose-approval-process-for-microsoft-support
6. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-2-define-enterprise-segmentation-strategy
7. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
287 | P a g e
8.3 Ensure that Resource Locks are set for mission critical Azure
resources (Manual)
Profile Applicability:
Level 2
Description:
Resource Manager Locks provide a way for administrators to lock down Azure resources to
prevent deletion of, or modifications to, a resource. These locks sit outside of the Role
Based Access Controls (RBAC) hierarchy and, when applied, will place restrictions on the
resource for all users. These locks are very useful when there is an important resource in a
subscription that users should not be able to delete or change. Locks can help prevent
accidental and malicious changes or deletion.
Rationale:
CanNotDelete means authorized users can still read and modify a resource, but they
can't delete the resource.
ReadOnly means authorized users can read a resource, but they can't delete or
update the resource. Applying this lock is similar to restricting all authorized users
to the permissions granted by the Reader role.
Audit:
288 | P a g e
Remediation:
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-
lock-resources
2. https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-
manager-subscription-governance#azure-resource-locks
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
289 | P a g e
8.4 Ensure the key vault is recoverable (Automated)
Profile Applicability:
Level 1
Description:
The key vault contains object keys, secrets and certificates. Accidental unavailability of a
key vault can cause immediate data loss or loss of security functions (authentication,
validation, verification, non-repudiation, etc.) supported by the key vault objects.
It is recommended the key vault be made recoverable by enabling the "Do Not Purge" and
"Soft Delete" functions. This is in order to prevent loss of encrypted data including storage
accounts, SQL databases, and/or dependent services provided by key vault objects (Keys,
Secrets, Certificates) etc., as may happen in the case of accidental deletion by a user or from
disruptive activity by a malicious user.
Rationale:
There could be scenarios where users accidently run delete/purge commands on key vault
or attacker/malicious user does it deliberately to cause disruption. Deleting or purging a
key vault leads to immediate data loss as keys encrypting data and secrets/certificates
allowing access/services will become non-accessible. There are 2 key vault properties that
plays role in permanent unavailability of a key vault.
1. enableSoftDelete:
Setting this parameter to true for a key vault ensures that even if key vault is deleted, Key
vault itself or its objects remain recoverable for next 90days. In this span of 90 days either
key vault/objects can be recovered or purged (permanent deletion). If no action is taken,
after 90 days key vault and its objects will be purged.
2. enablePurgeProtection:
enableSoftDelete only ensures that key vault is not deleted permanently and will be
recoverable for 90 days from date of deletion. However, there are chances that the key
vault and/or its objects are accidentally purged and hence will not be recoverable. Setting
enablePurgeProtection to "true" ensures that the key vault and its objects cannot be
purged.
Enabling both the parameters on key vaults ensures that key vaults and their objects
cannot be deleted/purged permanently.
290 | P a g e
Impact:
Once purge-protection and soft-delete is enabled for a key vault, the action is irreversible.
Audit:
Remediation:
To enable "Do Not Purge" and "Soft Delete" for a Key Vault:
From Azure Portal
Azure Portal does not have provision to update the respective configurations
Using Azure CLI 2.0
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/key-vault/key-vault-soft-delete-cli
2. https://blogs.technet.microsoft.com/kv/2017/05/10/azure-key-vault-recovery-
options/
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-8-define-backup-and-recovery-strategy
291 | P a g e
Additional Information:
When a key is used for SQL server TDE or Encrypting Storage Account, for corresponding
key vault both the features "Do Not Purge" and "Soft Delete" are enabled by default by
Azure Backend.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
292 | P a g e
8.5 Enable role-based access control (RBAC) within Azure Kubernetes
Services (Automated)
Profile Applicability:
Level 1
Description:
Rationale:
Azure Kubernetes Services has the capability to integrate Azure Active Directory users and
groups into Kubernetes RBAC controls within the AKS Kubernetes API Server. This should
be utilized to enable granular access to Kubernetes resources within the AKS clusters
supporting RBAC controls not just of the overarching AKS instance but also the individual
resources managed within Kubernetes.
Impact:
Audit:
1. Go to Kubernetes Services
2. For each Kubernetes Services instance, click on Automation Script.
3. Ensure that each variable "enableRBAC" is set to true.
Remediation:
WARNING: This setting cannot be changed after AKS deployment, cluster will require
recreation.
293 | P a g e
Default Value:
References:
1. https://docs.microsoft.com/en-us/azure/aks/aad-
integrationhttps://kubernetes.io/docs/reference/access-authn-
authz/rbac/https://docs.microsoft.com/en-us/cli/azure/aks?view=azure-cli-
latest#az-aks-list
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-7-follow-just-enough-administration-least-privilege-
principle
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
294 | P a g e
9 AppService
This section covers security recommendations for Azure AppService.
295 | P a g e
9.1 Ensure App Service Authentication is set on Azure App Service
(Automated)
Profile Applicability:
Level 2
Description:
Azure App Service Authentication is a feature that can prevent anonymous HTTP requests
from reaching the API app, or authenticate those that have tokens before they reach the API
app. If an anonymous request is received from a browser, App Service will redirect to a
logon page. To handle the logon process, a choice from a set of identity providers can be
made, or a custom authentication mechanism can be implemented.
Rationale:
By Enabling App Service Authentication, every incoming HTTP request passes through it
before being handled by the application code. It also handles authentication of users with
the specified provider(Azure Active Directory, Facebook, Google, Microsoft Account, and
Twitter), validation, storing and refreshing of tokens, managing the authenticated sessions
and injecting identity information into request headers.
Impact:
This is only required for App Services which require authentication. Enabling on site like a
marketing or support website will prevent unauthenticated access which would be
undesirable.
Adding Authentication requirement will increase cost of App Service and require additional
security components to facilitate the authentication.
Audit:
296 | P a g e
Using Command line:
To check App Service Authentication status for an existing app, run the following
command,
The output should return true if App Service authentication is set to On.
Remediation:
Note
In order to access App Service Authentication settings for Web app using Microsoft API
requires Website Contributor permission at subscription level. A custom role can be
created in place of website contributor to provide more specific permission and maintain
the principle of least privileged access.
Default Value:
By default, App Service Authentication is disabled when a new app is created using the
command-line tool or Azure Portal console.
References:
1. https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-
overview
2. https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-
roles#website-contributor
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-privileged-access#pa-5-automate-entitlement-management
297 | P a g e
4. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-governance-strategy#gs-6-define-identity-and-privileged-access-strategy
Additional Information:
You're not required to use App Service for authentication and authorization. Many web
frameworks are bundled with security features, and you can use them if you like. If you
need more flexibility than App Service provides, you can also write your own utilities.
Secure authentication and authorization require deep understanding of security, including
federation, encryption, JSON web tokens (JWT) management, grant types, and so on.
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
298 | P a g e
9.2 Ensure web app redirects all HTTP traffic to HTTPS in Azure App
Service (Automated)
Profile Applicability:
Level 1
Description:
Azure Web Apps allows sites to run under both HTTP and HTTPS by default. Web apps can
be accessed by anyone using non-secure HTTP links by default. Non-secure HTTP requests
can be restricted and all HTTP requests redirected to the secure HTTPS port. It is
recommended to enforce HTTPS-only traffic.
Rationale:
Enabling HTTPS-only traffic will redirect all non-secure HTTP request to HTTPS ports.
HTTPS uses the SSL/TLS protocol to provide a secure connection, which is both encrypted
and authenticated. So it is important to support HTTPS for the security benefits.
Impact:
When it is enabled, every incoming HTTP requests are redirected to the HTTPS port. It
means an extra level of security will be added to the HTTP requests made to the app.
Audit:
The output should return true if HTTPS-only traffic value is set to On.
299 | P a g e
Remediation:
Default Value:
By default, HTTPS-only feature will be disabled when a new app is created using the
command-line tool or Azure Portal console.
References:
1. https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-
custom-ssl#enforce-https
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-4-encrypt-sensitive-information-in-transit
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
300 | P a g e
9.3 Ensure web app is using the latest version of TLS encryption
(Automated)
Profile Applicability:
Level 1
Description:
The TLS(Transport Layer Security) protocol secures transmission of data over the internet
using standard encryption technology. Encryption should be set with the latest version of
TLS. App service allows TLS 1.2 by default, which is the recommended TLS level by
industry standards, such as PCI DSS.
Rationale:
App service currently allows the web app to set TLS versions 1.0, 1.1 and 1.2. It is highly
recommended to use the latest TLS 1.2 version for web app secure connections.
Audit:
The output should return 1.2 if TLS Version is set to 1.2 (Which is latest now).
Remediation:
301 | P a g e
4. Under Setting section, Click on SSL settings
5. Set Minimum TLS Version to 1.2 under Protocol Settings section
Default Value:
By default, TLS Version feature will be set to 1.2 when a new app is created using the
command-line tool or Azure Portal console.
References:
1. https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-
custom-ssl#enforce-tls-versions
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-4-encrypt-sensitive-information-in-transit
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-network-security#ns-1-implement-security-for-internal-traffic
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
302 | P a g e
9.4 Ensure the web app has 'Client Certificates (Incoming client
certificates)' set to 'On' (Automated)
Profile Applicability:
Level 2
Description:
Client certificates allow for the app to request a certificate for incoming requests. Only
clients that have a valid certificate will be able to reach the app.
Rationale:
Impact:
Utilizing and maintaining client certificates will require additional work to obtain and
managed replacement and key rotation.
Audit:
The output should return true if Incoming client certificates value is set to On.
303 | P a g e
Remediation:
Default Value:
By default, incoming client certificates will be disabled when a new app is created using the
command-line tool or Azure Portal console.
References:
1. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-data-protection#dp-4-encrypt-sensitive-information-in-transit
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
304 | P a g e
9.5 Ensure that Register with Azure Active Directory is enabled on App
Service (Automated)
Profile Applicability:
Level 1
Description:
Managed service identity in App Service makes the app more secure by eliminating secrets
from the app, such as credentials in the connection strings. When registering with Azure
Active Directory in the app service, the app will connect to other Azure services securely
without the need of username and passwords.
Rationale:
App Service provides a highly scalable, self-patching web hosting service in Azure. It also
provides a managed identity for apps, which is a turn-key solution for securing access to
Azure SQL Database and other Azure services.
Audit:
305 | P a g e
Remediation:
References:
1. https://docs.microsoft.com/en-gb/azure/app-service/app-service-web-tutorial-
connect-msi
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-1-standardize-azure-active-directory-as-the-central-
identity-and-authentication-system
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
306 | P a g e
9.6 Ensure that 'PHP version' is the latest, if used to run the web app
(Manual)
Profile Applicability:
Level 1
Description:
Periodically newer versions are released for PHP software either due to security flaws or to
include additional functionality. Using the latest PHP version for web apps is recommended
in order to take advantage of security fixes, if any, and/or additional functionalities of the
newer version.
Rationale:
Newer versions may contain security enhancements and additional functionality. Using the
latest software version is recommended in order to take advantage of enhancements and
new capabilities. With each software installation, organizations need to determine if a
given update meets their requirements and also verify the compatibility and support
provided for any additional software against the update revision that is selected.
Audit:
NOTE: No action is required If PHP version is set to Off as PHP is not used by your web
app.
Using Azure Command Line Interface
To check PHP version for an existing app, run the following command,
307 | P a g e
Remediation:
NOTE: No action is required If PHP version is set to Off as PHP is not used by your web
app.
Using Azure Command Line Interface
To see the list of supported runtimes:
To set latest PHP version for an existing app, run the following command:
Default Value:
By default, PHP 5.6 version will be used when creating a new app using the command-line
tool or the Azure Portal console.
References:
1. https://docs.microsoft.com/en-us/azure/app-service/web-sites-
configure#general-settings
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-7-rapidly-and-automatically-remediate-
software-vulnerabilities
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-3-establish-secure-configurations-for-
compute-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
308 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
software inventory for enterprise assets. If software is unsupported, yet necessary for
the fulfillment of the enterprise’s mission, document an exception detailing mitigating
controls and residual risk acceptance. For any unsupported software without an
exception documentation, designate as unauthorized. Review the software list to verify
software support at least monthly, or more frequently.
309 | P a g e
9.7 Ensure that 'Python version' is the latest, if used to run the web app
(Manual)
Profile Applicability:
Level 1
Description:
Periodically, newer versions are released for Python software either due to security flaws
or to include additional functionality. Using the latest Python version for web apps is
recommended in order to take advantage of security fixes, if any, and/or additional
functionalities of the newer version.
Rationale:
Newer versions may contain security enhancements and additional functionality. Using the
latest software version is recommended in order to take advantage of enhancements and
new capabilities. With each software installation, organizations need to determine if a
given update meets their requirements and also verify the compatibility and support
provided for any additional software against the update revision that is selected.
Audit:
Using Console:
NOTE: No action is required, If Python version is set to Off as Python is not used by your
web app.
Using Command line:
To check Python version for an existing app, run the following command,
310 | P a g e
Remediation:
Using Console:
NOTE: No action is required, If Python version is set to Off as Python is not used by your
web app.
Using Command Line:
To see the list of supported runtimes:
To set latest Python version for an existing app, run the following command:
References:
1. https://docs.microsoft.com/en-us/azure/app-service/web-sites-
configure#general-settings
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-7-rapidly-and-automatically-remediate-
software-vulnerabilities
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-3-establish-secure-configurations-for-
compute-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
311 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
312 | P a g e
9.8 Ensure that 'Java version' is the latest, if used to run the web app
(Manual)
Profile Applicability:
Level 1
Description:
Periodically, newer versions are released for Java software either due to security flaws or
to include additional functionality. Using the latest Java version for web apps is
recommended in order to take advantage of security fixes, if any, and/or new
functionalities of the newer version.
Rationale:
Newer versions may contain security enhancements and additional functionality. Using the
latest software version is recommended in order to take advantage of enhancements and
new capabilities. With each software installation, organizations need to determine if a
given update meets their requirements and also verify the compatibility and support
provided for any additional software against the update revision that is selected.
Audit:
NOTE: No action is required If Java version is set to Off as Java is not used by your web
app.
Using Azure Command Line Interface
To check Java version for an existing app, run the following command,
NOTE: No action is required If Java version is set to Off as Java is not used by your web
app.
Using Azure Command Line Interface
To see the list of supported runtimes:
To set latest Java version for an existing app, run the following command:
References:
1. https://docs.microsoft.com/en-us/azure/app-service/web-sites-
configure#general-settings
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-7-rapidly-and-automatically-remediate-
software-vulnerabilities
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-3-establish-secure-configurations-for-
compute-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
314 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
315 | P a g e
9.9 Ensure that 'HTTP Version' is the latest, if used to run the web app
(Manual)
Profile Applicability:
Level 1
Description:
Periodically, newer versions are released for HTTP either due to security flaws or to
include additional functionality. Using the latest HTTP version for web apps to take
advantage of security fixes, if any, and/or new functionalities of the newer version.
Rationale:
Newer versions may contain security enhancements and additional functionality. Using the
latest version is recommended in order to take advantage of enhancements and new
capabilities. With each software installation, organizations need to determine if a given
update meets their requirements and also verify the compatibility and support provided
for any additional software against the update revision that is selected.
HTTP 2.0 has additional performance improvements on the head-of-line blocking problem
of old HTTP version, header compression, and prioritization of requests. HTTP 2.0 no
longer supports HTTP 1.1's chunked transfer encoding mechanism, as it provides its own,
more efficient, mechanisms for data streaming.
Audit:
NOTE: Most modern browsers support HTTP 2.0 protocol over TLS only, while non-
encrypted traffic continues to use HTTP 1.1. To ensure that client browsers connect to your
app with HTTP/2, either buy an App Service Certificate for your app's custom domain or
bind a third party certificate.
Using Azure Command Line Interface
To check HTTP 2.0 version status for an existing app, run the following command,
316 | P a g e
az webapp config show --resource-group <RESOURCE_GROUP_NAME> --name
<APP_NAME> --query http20Enabled
The output should return true if HTTPS 2.0 traffic value is set to On.
Remediation:
NOTE: Most modern browsers support HTTP 2.0 protocol over TLS only, while non-
encrypted traffic continues to use HTTP 1.1. To ensure that client browsers connect to your
app with HTTP/2, either buy an App Service Certificate for your app's custom domain or
bind a third party certificate.
Using Azure Command Line Interface
To set HTTP 2.0 version for an existing app, run the following command:
References:
1. https://docs.microsoft.com/en-us/azure/app-service/web-sites-
configure#general-settings
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-7-rapidly-and-automatically-remediate-
software-vulnerabilities
3. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-posture-vulnerability-management#pv-3-establish-secure-configurations-for-
compute-resources
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
317 | P a g e
Controls
Control IG 1 IG 2 IG 3
Version
318 | P a g e
9.10 Ensure FTP deployments are disabled (Automated)
Profile Applicability:
Level 1
Description:
By default, Azure Functions, Web and API Services can be deployed over FTP. If FTP is
required for an essential deployment workflow, FTPS should be required for FTP login for
all App Service Apps and Functions.
Rationale:
Azure FTP deployment endpoints are public. An attacker listening to traffic on a wifi
network used by a remote employee or a corporate network could see login traffic in clear-
text which would then grant them full control of the code base of the app or service. This
finding is more severe if User Credentials for deployment are set at the subscription level
rather than using the default Application Credentials which are unique per App.
Impact:
Any deployment workflows that rely on FTP or FTPs rather than the WebDeploy or HTTPs
endpoints may be affected.
Audit:
319 | P a g e
7. Under Platform Settings, FTP state should not be All allowed
az webapp list
Remediation:
Default Value:
Enabled
References:
Controls
Control IG 1 IG 2 IG 3
Version
321 | P a g e
9.11 Ensure Azure Keyvaults are used to store secrets (Manual)
Profile Applicability:
Level 2
Description:
Encryption keys ,Certificate thumbprints and Managed Identity Credentials can be coded
into the APP service, this renders them visible as part of the configuration, to maintain
security of these keys it is better to store in an Azure Keyvault and reference them from the
Keyvault.
Rationale:
App secrets control access to the application and thus need to be secured externally to the
app configuration, storing the secrets externally and referencing them in the configuration
also enables key rotation without having to redeploy the app service.
Impact:
Impact is primarily during the initial setup of the application or redeploying an old app to
include this functionality. This will require configuration effort to setup the keyvault and
then to configure the app service to use the keyvault.
Audit:
Remediation:
322 | P a g e
Using Azure Powershell
`New-AzKeyvault -name MyKV -ResourceGroupName myResourceGroup -Location
myLocation
Set up the App Service to use the keyvault
Sample JSON Template for App Service Configuration
{
//...
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageAccountName')]",
//...
},
{
"type": "Microsoft.Insights/components",
"name": "[variables('appInsightsName')]",
//...
},
{
"type": "Microsoft.Web/sites",
"name": "[variables('functionAppName')]",
"identity": {
"type": "SystemAssigned"
},
//...
"resources": [
{
"type": "config",
"name": "appsettings",
//...
"dependsOn": [
"[resourceId('Microsoft.Web/sites',
variables('functionAppName'))]",
"[resourceId('Microsoft.KeyVault/vaults/',
variables('keyVaultName'))]",
"[resourceId('Microsoft.KeyVault/vaults/secrets',
variables('keyVaultName'), variables('storageConnectionStringName'))]",
"[resourceId('Microsoft.KeyVault/vaults/secrets',
variables('keyVaultName'), variables('appInsightsKeyName'))]"
],
"properties": {
"AzureWebJobsStorage":
"[concat('@Microsoft.KeyVault(SecretUri=',
reference(variables('storageConnectionStringResourceId')).secretUriWithVersio
n, ')')]",
"WEBSITE_CONTENTAZUREFILECONNECTIONSTRING":
"[concat('@Microsoft.KeyVault(SecretUri=',
reference(variables('storageConnectionStringResourceId')).secretUriWithVersio
n, ')')]",
"APPINSIGHTS_INSTRUMENTATIONKEY":
"[concat('@Microsoft.KeyVault(SecretUri=',
reference(variables('appInsightsKeyResourceId')).secretUriWithVersion,
')')]",
323 | P a g e
"WEBSITE_ENABLE_SYNC_UPDATE_SITE": "true"
//...
}
},
{
"type": "sourcecontrols",
"name": "web",
//...
"dependsOn": [
"[resourceId('Microsoft.Web/sites',
variables('functionAppName'))]",
"[resourceId('Microsoft.Web/sites/config',
variables('functionAppName'), 'appsettings')]"
],
}
]
},
{
"type": "Microsoft.KeyVault/vaults",
"name": "[variables('keyVaultName')]",
//...
"dependsOn": [
"[resourceId('Microsoft.Web/sites',
variables('functionAppName'))]"
],
"properties": {
//...
"accessPolicies": [
{
"tenantId":
"[reference(concat('Microsoft.Web/sites/', variables('functionAppName'),
'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-
PREVIEW').tenantId]",
"objectId":
"[reference(concat('Microsoft.Web/sites/', variables('functionAppName'),
'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-
PREVIEW').principalId]",
"permissions": {
"secrets": [ "get" ]
}
}
]
},
"resources": [
{
"type": "secrets",
"name": "[variables('storageConnectionStringName')]",
//...
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults/',
variables('keyVaultName'))]",
"[resourceId('Microsoft.Storage/storageAccounts',
variables('storageAccountName'))]"
],
"properties": {
"value":
"[concat('DefaultEndpointsProtocol=https;AccountName=',
324 | P a g e
variables('storageAccountName'), ';AccountKey=',
listKeys(variables('storageAccountResourceId'),'2015-05-01-preview').key1)]"
}
},
{
"type": "secrets",
"name": "[variables('appInsightsKeyName')]",
//...
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults/',
variables('keyVaultName'))]",
"[resourceId('Microsoft.Insights/components',
variables('appInsightsName'))]"
],
"properties": {
"value":
"[reference(resourceId('microsoft.insights/components/',
variables('appInsightsName')), '2015-05-01').InstrumentationKey]"
}
}
]
}
]
}
References:
1. https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-
references
2. https://docs.microsoft.com/en-us/azure/security/benchmarks/security-controls-
v2-identity-management#im-2-manage-application-identities-securely-and-
automatically
CIS Controls:
Controls
Control IG 1 IG 2 IG 3
Version
v7 13 Data Protection
Data Protection
325 | P a g e
Appendix: Recommendation Summary
Table
Control Set
Correctly
Yes No
1 Identity and Access Management
1.1 Ensure that multi-factor authentication is enabled for all
privileged users (Manual)
1.2 Ensure that multi-factor authentication is enabled for all
non-privileged users (Manual)
1.3 Ensure guest users are reviewed on a monthly basis
(Automated)
1.4 Ensure that 'Allow users to remember multi-factor
authentication on devices they trust' is 'Disabled' (Manual)
1.5 Ensure that 'Number of methods required to reset' is set to
'2' (Manual)
1.6 Ensure that 'Number of days before users are asked to re-
confirm their authentication information' is not set to "0"
(Manual)
1.7 Ensure that 'Notify users on password resets?' is set to 'Yes'
(Manual)
1.8 Ensure that 'Notify all admins when other admins reset
their password?' is set to 'Yes' (Manual)
1.9 Ensure that 'Users can consent to apps accessing company
data on their behalf' is set to 'No' (Manual)
1.10 Ensure that 'Users can add gallery apps to their Access
Panel' is set to 'No' (Manual)
1.11 Ensure that 'Users can register applications' is set to 'No'
(Manual)
1.12 Ensure that 'Guest user permissions are limited' is set to
'Yes' (Manual)
1.13 Ensure that 'Members can invite' is set to 'No' (Manual)
1.14 Ensure that 'Guests can invite' is set to 'No' (Manual)
1.15 Ensure that 'Restrict access to Azure AD administration
portal' is set to 'Yes' (Manual)
1.16 Ensure that 'Restrict user ability to access groups features in
the Access Pane' is set to 'No' (Manual)
1.17 Ensure that 'Users can create security groups in Azure
Portals' is set to 'No' (Manual)
326 | P a g e
1.18 Ensure that 'Owners can manage group membership
requests in the Access Panel' is set to 'No' (Manual)
1.19 Ensure that 'Users can create Microsoft 365 groups in Azure
Portals' is set to 'No' (Manual)
1.20 Ensure that 'Require Multi-Factor Auth to join devices' is set
to 'Yes' (Manual)
1.21 Ensure that no custom subscription owner roles are created
(Automated)
1.22 Ensure Security Defaults is enabled on Azure Active
Directory (Automated)
1.23 Ensure Custom Role is assigned for Administering Resource
Locks (Manual)
2 Security Center
2.1 Ensure that Azure Defender is set to On for Servers
(Manual)
2.2 Ensure that Azure Defender is set to On for App Service
(Manual)
2.3 Ensure that Azure Defender is set to On for Azure SQL
database servers (Manual)
2.4 Ensure that Azure Defender is set to On for SQL servers on
machines (Manual)
2.5 Ensure that Azure Defender is set to On for Storage
(Manual)
2.6 Ensure that Azure Defender is set to On for Kubernetes
(Manual)
2.7 Ensure that Azure Defender is set to On for Container
Registries (Manual)
2.8 Ensure that Azure Defender is set to On for Key Vault
(Manual)
2.9 Ensure that Windows Defender ATP (WDATP) integration
with Security Center is selected (Manual)
2.10 Ensure that Microsoft Cloud App Security (MCAS)
integration with Security Center is selected (Manual)
2.11 Ensure that 'Automatic provisioning of monitoring agent' is
set to 'On' (Automated)
2.12 Ensure any of the ASC Default policy setting is not set to
"Disabled" (Manual)
2.13 Ensure 'Additional email addresses' is configured with a
security contact email (Automated)
2.14 Ensure that 'Notify about alerts with the following severity'
is set to 'High' (Automated)
2.15 Ensure that 'All users with the following roles' is set to
'Owner' (Automated)
3 Storage Accounts
327 | P a g e
3.1 Ensure that 'Secure transfer required' is set to 'Enabled'
(Automated)
3.2 Ensure that storage account access keys are periodically
regenerated (Manual)
3.3 Ensure Storage logging is enabled for Queue service for
read, write, and delete requests (Manual)
3.4 Ensure that shared access signature tokens expire within an
hour (Manual)
3.5 Ensure that 'Public access level' is set to Private for blob
containers (Automated)
3.6 Ensure default network access rule for Storage Accounts is
set to deny (Automated)
3.7 Ensure 'Trusted Microsoft Services' is enabled for Storage
Account access (Manual)
3.8 Ensure soft delete is enabled for Azure Storage (Automated)
3.9 Ensure storage for critical data are encrypted with
Customer Managed Key (Automated)
3.10 Ensure Storage logging is enabled for Blob service for read,
write, and delete requests (Manual)
3.11 Ensure Storage logging is enabled for Table service for read,
write, and delete requests (Manual)
4 Database Services
4.1 SQL Server - Auditing
4.1.1 Ensure that 'Auditing' is set to 'On' (Automated)
4.1.2 Ensure that 'Data encryption' is set to 'On' on a SQL
Database (Automated)
4.1.3 Ensure that 'Auditing' Retention is 'greater than 90 days'
(Automated)
4.2 SQL Server - Azure Defender for SQL
4.2.1 Ensure that Advanced Threat Protection (ATP) on a SQL
server is set to 'Enabled' (Automated)
4.2.2 Ensure that Vulnerability Assessment (VA) is enabled on a
SQL server by setting a Storage Account (Automated)
4.2.3 Ensure that VA setting Periodic Recurring Scans is enabled
on a SQL server (Automated)
4.2.4 Ensure that VA setting Send scan reports to is configured for
a SQL server (Automated)
4.2.5 Ensure that VA setting 'Also send email notifications to
admins and subscription owners' is set for a SQL server
(Automated)
4.3 PostgreSQL Database Server
4.3.1 Ensure 'Enforce SSL connection' is set to 'ENABLED' for
PostgreSQL Database Server (Automated)
328 | P a g e
4.3.2 Ensure 'Enforce SSL connection' is set to 'ENABLED' for
MySQL Database Server (Automated)
4.3.3 Ensure server parameter 'log_checkpoints' is set to 'ON' for
PostgreSQL Database Server (Automated)
4.3.4 Ensure server parameter 'log_connections' is set to 'ON' for
PostgreSQL Database Server (Automated)
4.3.5 Ensure server parameter 'log_disconnections' is set to 'ON'
for PostgreSQL Database Server (Automated)
4.3.6 Ensure server parameter 'connection_throttling' is set to
'ON' for PostgreSQL Database Server (Automated)
4.3.7 Ensure server parameter 'log_retention_days' is greater
than 3 days for PostgreSQL Database Server (Automated)
4.3.8 Ensure 'Allow access to Azure services' for PostgreSQL
Database Server is disabled (Manual)
4.4 Ensure that Azure Active Directory Admin is configured
(Automated)
4.5 Ensure SQL server's TDE protector is encrypted with
Customer-managed key (Automated)
5 Logging and Monitoring
5.1 Configuring Diagnostic Settings
5.1.1 Ensure that a 'Diagnostics Setting' exists (Automated)
5.1.2 Ensure Diagnostic Setting captures appropriate categories
(Automated)
5.1.3 Ensure the storage container storing the activity logs is not
publicly accessible (Automated)
5.1.4 Ensure the storage account containing the container with
activity logs is encrypted with BYOK (Use Your Own Key)
(Automated)
5.1.5 Ensure that logging for Azure KeyVault is 'Enabled'
(Automated)
5.2 Monitoring using Activity Log Alerts
5.2.1 Ensure that Activity Log Alert exists for Create Policy
Assignment (Automated)
5.2.2 Ensure that Activity Log Alert exists for Delete Policy
Assignment (Automated)
5.2.3 Ensure that Activity Log Alert exists for Create or Update
Network Security Group (Automated)
5.2.4 Ensure that Activity Log Alert exists for Delete Network
Security Group (Automated)
5.2.5 Ensure that Activity Log Alert exists for Create or Update
Network Security Group Rule (Automated)
5.2.6 Ensure that activity log alert exists for the Delete Network
Security Group Rule (Automated)
329 | P a g e
5.2.7 Ensure that Activity Log Alert exists for Create or Update
Security Solution (Automated)
5.2.8 Ensure that Activity Log Alert exists for Delete Security
Solution (Automated)
5.2.9 Ensure that Activity Log Alert exists for Create or Update or
Delete SQL Server Firewall Rule (Automated)
5.3 Ensure that Diagnostic Logs are enabled for all services
which support it. (Automated)
6 Networking
6.1 Ensure that RDP access is restricted from the internet
(Automated)
6.2 Ensure that SSH access is restricted from the internet
(Automated)
6.3 Ensure no SQL Databases allow ingress 0.0.0.0/0 (ANY IP)
(Automated)
6.4 Ensure that Network Security Group Flow Log retention
period is 'greater than 90 days' (Automated)
6.5 Ensure that Network Watcher is 'Enabled' (Manual)
6.6 Ensure that UDP Services are restricted from the Internet
(Automated)
7 Virtual Machines
7.1 Ensure Virtual Machines are utilizing Managed Disks
(Manual)
7.2 Ensure that 'OS and Data' disks are encrypted with CMK
(Automated)
7.3 Ensure that 'Unattached disks' are encrypted with CMK
(Automated)
7.4 Ensure that only approved extensions are installed
(Manual)
7.5 Ensure that the latest OS Patches for all Virtual Machines are
applied (Manual)
7.6 Ensure that the endpoint protection for all Virtual Machines
is installed (Manual)
7.7 Ensure that VHD's are encrypted (Manual)
8 Other Security Considerations
8.1 Ensure that the expiration date is set on all keys
(Automated)
8.2 Ensure that the expiration date is set on all Secrets
(Automated)
8.3 Ensure that Resource Locks are set for mission critical
Azure resources (Manual)
8.4 Ensure the key vault is recoverable (Automated)
8.5 Enable role-based access control (RBAC) within Azure
Kubernetes Services (Automated)
330 | P a g e
9 AppService
9.1 Ensure App Service Authentication is set on Azure App
Service (Automated)
9.2 Ensure web app redirects all HTTP traffic to HTTPS in Azure
App Service (Automated)
9.3 Ensure web app is using the latest version of TLS encryption
(Automated)
9.4 Ensure the web app has 'Client Certificates (Incoming client
certificates)' set to 'On' (Automated)
9.5 Ensure that Register with Azure Active Directory is enabled
on App Service (Automated)
9.6 Ensure that 'PHP version' is the latest, if used to run the web
app (Manual)
9.7 Ensure that 'Python version' is the latest, if used to run the
web app (Manual)
9.8 Ensure that 'Java version' is the latest, if used to run the web
app (Manual)
9.9 Ensure that 'HTTP Version' is the latest, if used to run the
web app (Manual)
9.10 Ensure FTP deployments are disabled (Automated)
9.11 Ensure Azure Keyvaults are used to store secrets (Manual)
331 | P a g e
Appendix: Change History
Date Version Changes for this version
Oct 27, 2020 1.3.0 Update - Ensure App Service Authentication is set on Azure App
Service - additional permissions required to automate this
policy/rule (Ticket 8229)
Nov 12, 2020 1.3.0 DELETE - Ensure that '.Net Framework' version is the latest, if used
as a part of the web app - Console location not up to date (Ticket
11599)
Nov 12, 2020 1.3.0 UPDATE - Ensure that multi-factor authentication is enabled for all
privileged users - some instances of userPrincipalName misspelled
as userPrincipleName (Ticket 11687)
Dec 11, 2020 1.3.0 UPDATE - Ensure storage for critical data are encrypted with
Customer Managed Key - update wording in Rational and impact
(Ticket 11903)
Dec 11, 2020 1.3.0 UPDATE - Ensure that 'Public access level' is set to Private for blob
containers - add steps for storage account settings (Ticket 11902)
Dec 11, 2020 1.3.0 ADD - Ensure Azure Keyvaults are used to store secrets (Ticket
8982)
Dec 11, 2020 1.3.0 UPDATE - Ensure Diagnostic Setting captures appropriate
categories - does not work with the new Diagnostic Setting (Ticket
11627)
Dec 11, 2020 1.3.0 ADD - Ensure VHDs are encrypted (Ticket 11609)
Jan 12, 2021 1.3.0 ADD - Ensure that Activity Log Alert exists for Delete Policy
Assignment (Ticket 7707)
332 | P a g e
Jan 12, 2021 1.3.0 UPDATE - Ensure Security Defaults is enabled on Azure Active
Directory - setting conflicts with the CIS Office (Microsoft) 365
Benchmark (Ticket 11935)
Jan 13, 2021 1.3.0 UPDATE - Ensure guest users are reviewed on a monthly basis -
Create Dynamic Group for Guest Users and add Access Review
(Ticket 11728)
Jan 15, 2021 1.3.0 ADD - 2 Recommendations in Security Center Section - 2 currently
available Azure Defender bundles are missing (Ticket 11638)
Jan 15, 2021 1.3.0 UPDATE - Ensure that 'OS and Data' disks are encrypted with CMK
- Powershell for changing disk encryption (Ticket 11596)
Jan 15, 2021 1.3.0 UPDATE - Ensure that Azure Active Directory Admin is configured
- Concern that this is an overly simplistic recommendation (Ticket
8852)
Jan 15, 2021 1.3.0 UPATE - Ensure App Service Authentication is set on Azure App
Service - App Service authentication should be level 2 not level 1
(Ticket 12063)
Jan 15, 2021 1.3.0 UPDATE - Ensure the web app has 'Client Certificates (Incoming
client certificates)' set to 'On' - Change from level 1 to level 2
(Ticket 12064)
Jan 18, 2021 1.3.0 UPDATE - Multiple recommendations - Updated reference URLs
mapping recommendations to the Azure Security Benchmark
Jan 28, 2021 1.3.0 DELETE - Ensure server parameter 'log_duration' is set to 'ON' for
PostgreSQL Database Server - No clear security value (Ticket
12090)
Jan 28, 2021 1.3.0 UPDATE - Ensure that a 'Diagnostics Setting' exists - Intent of
recommendation is unclear (Ticket 12092)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Delete Policy
Assignment - Minor inconsistencies in remediation procedure
(Ticket 12089)
333 | P a g e
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Create Policy
Assignment - Minor inconsistencies in remediation procedure
(Ticket 12088)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Create or Update
Network Security Group - Remediation procedure is incorrect
(Ticket 12081)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Delete Network
Security Group - Remediation procedure is incorrect (Ticket
12082)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Create or Update
Network Security Group Rule - Remediation procedure is incorrect
(Ticket 12083)
Jan 28, 2021 1.3.0 UPDATE - Ensure that activity log alert exists for the Delete
Network Security Group Rule - Remediation procedure is incorrect
(Ticket 12084)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Create or Update
Security Solution - Remediation procedure is incorrect (Ticket
12085)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Delete Security
Solution - Remediation procedure is incorrect (Ticket 12086)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Activity Log Alert exists for Create or Update
or Delete SQL Server Firewall Rule - Remediation procedure is
incorrect (Ticket 12087)
Jan 28, 2021 1.3.0 UPDATE - Ensure that Advanced Data Security (ADS) and
Advanced Threat Protection (ATP) on a SQL server is set to 'On' -
ADS and ATP changed to Azure Defender for SQL (Ticket 12124)
Jan 28, 2021 1.3.0 UPDATE - SQL Server - Advanced Data Security (ADS) - ADS is now
Azure Defender (Ticket 12112)
Jan 28, 2021 1.3.0 DELETE - Multiple in SQL Server - Advanced Data Security (ADS)
section (Ticket 12125)
334 | P a g e
Jan 28, 2021 1.3.0 UPDATE - Multiple in 4.2 SQL Server - Advanced Data Security
(ADS) section (Ticket 12126)
Aug 22, 2019 1.2.0 DELETE- Ensure that Azure Active Directory Admin is configured -
Duplicate (Ticket 8018)
Sep 8, 2019 1.2.0 Added Azure Command Line Interface 2.0 commands (Ticket
7994)
May 18, 2020 1.2.0 UPDATE - Ensure that 'HTTP Version' is the latest, if used to run
the web app - Typo in Audit procedure (Ticket 8628)
May 18, 2020 1.2.0 UPDATE - Ensure web app redirects all HTTP traffic to HTTPS in
Azure App Service - Incorrect Remediation Procedure (Ticket
8942)
May 18, 2020 1.2.0 Update - Ensure web app redirects all HTTP traffic to HTTPS in
Azure App Service - Typo in Audit Procedure (Ticket 8943)
May 18, 2020 1.2.0 UPDATE - Ensure App Service Authentication is set on Azure App
Service - remediation CLI correction (Ticket 8957)
Jun 2, 2020 1.2.0 UPDATE - Ensure that multi-factor authentication is enabled for all
privileged users - Add reference (Ticket 10368)
Jun 2, 2020 1.2.0 UPDATE - Ensure that multi-factor authentication is enabled for all
non-privileged users - Add reference (Ticket 10369)
Jun 2, 2020 1.2.0 UPDATE - Ensure that there are no guest users - Add reference
guest user delete (Ticket 10370)
Jun 2, 2020 1.2.0 UPDATE - Ensure that 'Number of methods required to reset' is set
to '2' - Add reference (Ticket 10374)
Jun 12, 2020 1.2.0 UPDATE - Ensure that 'Guest user permissions are limited' is set to
'Yes' - add reference (Ticket 10395)
Jun 12, 2020 1.2.0 UPDATE - Ensure that 'Number of days before users are asked to
re-confirm their authentication information' is not set to "0" - add
reference (Ticket 10375)
Jun 12, 2020 1.2.0 UPDATE - Ensure that 'Notify users on password resets?' is set to
'Yes' - Add reference (Ticket 10376)
335 | P a g e
Jun 12, 2020 1.2.0 UPDATE - Ensure that 'Notify all admins when other admins reset
their password?' is set to 'Yes' - Add reference (Ticket 10377)
Jun 12, 2020 1.2.0 UPDATE - Ensure that 'Users can consent to apps accessing
company data on their behalf' is set to 'No' - add reference (Ticket
10382)
Jun 12, 2020 1.2.0 UPDATE - Ensure that 'Users can register applications' is set to 'No'
- add reference (Ticket 10394)
Jun 12, 2020 1.2.0 UPDATE - Ensure that 'Secure transfer required' is set to 'Enabled'
- add reference (Ticket 10272)
Aug 21, 2020 1.2.0 UPDATE - Ensure that multi-factor authentication is enabled for all
privileged users - Change in AAD Settings Location for Users and
Groups (Ticket 11196)
Aug 21, 2020 1.2.0 UPDATE - Multiple - Audit and remediation instructions have
changed 1.12, 1.13, 1.14 (Ticket 10504)
Aug 24, 2020 1.2.0 UPDATE - Mutiple - Add step in audit and remediation for change
in GUI (Ticket 11288)
Aug 24, 2020 1.2.0 UPDATE - Ensure that 'Require Multi-Factor Auth to join devices' is
set to 'Yes' - GUI changes for Audit and remediation (Ticket 11292)
Aug 24, 2020 1.2.0 UPDATE - Ensure that 'Automatic provisioning of monitoring
agent' is set to 'On' - Remediation procedures has moved location
(Ticket 11197)
Aug 24, 2020 1.2.0 UPDATE - Ensure Storage logging is enabled for Queue service for
read, write, and delete requests - Modify reference (Ticket 10275)
Aug 24, 2020 1.2.0 UPDATE - Ensure Storage logging is enabled for Queue service for
read, write, and delete requests - Modify Audit Procedure and
Remediation Procedure wording (Ticket 10277)
Aug 24, 2020 1.2.0 UPDATE - Ensure that ADS - 'Advanced Threat Protection types'
(ATP) is set to 'All' - Edit reference (Ticket 10304)
Aug 24, 2020 1.2.0 UPDATE - Ensure that 'Restrict user ability to access groups
features in the Access Panel' is set to 'No' - Change Audit,
Remeditation Procedure (Ticket 10397)
336 | P a g e
Aug 24, 2020 1.2.0 UPDATE - Ensure that 'Users can create security groups' is set to
'No' - Edit Audit Procedure, Remedation Procedure (Ticket 10398)
Aug 26, 2020 1.2.0 UPDATE - Ensure 'Enforce SSL connection' is set to 'ENABLED' for
PostgreSQL Database Server - invalid reference (Ticket 10330)
Aug 26, 2020 1.2.0 UPDATE - Ensure 'Enforce SSL connection' is set to 'ENABLED' for
MySQL Database Server - Add reference (Ticket 10331)
Aug 26, 2020 1.2.0 UPDATE - Ensure server parameter 'log_checkpoints' is set to 'ON'
for PostgreSQL Database Server - Add referenced (Ticket 10332)
Aug 26, 2020 1.2.0 UPDATE - Ensure server parameter 'log_connections' is set to 'ON'
for PostgreSQL Database Server - Add reference (Ticket 10333)
Aug 26, 2020 1.2.0 UPDATE - Ensure server parameter 'log_disconnections' is set to
'ON' for PostgreSQL Database Server - Add reference (Ticket
10334)
Aug 26, 2020 1.2.0 UPDATE - Ensure server parameter 'log_duration' is set to 'ON' for
PostgreSQL Database Server - Add reference (Ticket 10335)
Aug 26, 2020 1.2.0 UPDATE - Ensure server parameter 'connection_throttling' is set
to 'ON' for PostgreSQL Database Server - Add reference (Ticket
10337)
Aug 26, 2020 1.2.0 UPDATE - Ensure server parameter 'log_retention_days' is greater
than 3 days for PostgreSQL Database Server - Add reference
(Ticket 10339)
Aug 26, 2020 1.2.0 UPDATE - Ensure that 'OS disk' are encrypted - Edit reference
(Ticket 10264)
Aug 26, 2020 1.2.0 UPDATE - Ensure that 'OS disk' are encrypted - Add Remediation
Procedures (Ticket 10265)
Aug 26, 2020 1.2.0 UPDATE - Ensure that 'Data disks' are encrypted - Edit reference
(Ticket 10266)
Aug 26, 2020 1.2.0 UPDATE - Ensure that 'Data disks' are encrypted - Add
Remediation Procedures (Ticket 10267)
337 | P a g e
Aug 26, 2020 1.2.0 UPDATE - Ensure that 'Unattached disks' are encrypted - Edit
reference (Ticket 10269)
Aug 27, 2020 1.2.0 DELETE - Ensure that 'Enable "All Users" group' is set to 'Yes' -
Request to delete recommendation (Ticket 10401)
Sep 10, 2020 1.2.0 ADD - MULTIPLE - SQL Advanced Data Security related controls
(Ticket 9081)
Sep 22, 2020 1.2.0 ADD - Ensure soft delete is enabled for Azure Storage (Ticket
11450)
Sep 22, 2020 1.2.0 DELETE - Ensure that 'AuditActionGroups' in 'auditing' policy for a
SQL server is set properly (Ticket 11229)
Sep 22, 2020 1.2.0 UPDATE - Ensure that ADS - ATP 'Email service and co-
administrators' is 'Enabled' - Modify term (Ticket 10310)
Sep 22, 2020 1.2.0 UPDATE - Ensure SQL server's TDE protector is encrypted with
BYOK (Use your own key) - Change the expression 'Use Your own
key' (Ticket 10341)
Sep 22, 2020 1.2.0 ADD - Ensure that Diagnostic Logs are enabled for all services
which support it. (Ticket 11453)
Sep 24, 2020 1.2.0 UPDATE - Ensure that the expiration date is set on all keys -
additional permissions required to automate this policy/rule
(Ticket 8228)
Sep 24, 2020 1.2.0 Add Remediation - Ensure that UDP Services are restricted from
the Internet (Ticket 10271)
Oct 7, 2020 1.2.0 UPDATE - Ensure that there are no guest users - Azure Command
Line Interface 2.0 doesn't work as expected. (Ticket 11376)
Oct 7, 2020 1.2.0 UPDATE - Ensure that shared access signature tokens expire
within an hour - Remediation Procedure 3.4 Ensure that shared
access signature tokens expire within an hour (Ticket 10278)
Oct 7, 2020 1.2.0 UPDATE - Ensure that storage account access keys are periodically
regenerated - add reference (Ticket 10273)
338 | P a g e
Oct 7, 2020 1.2.0 UPDATE - Ensure that storage account access keys are periodically
regenerated - Add Remediation Procedure (Ticket 10274)
Oct 13, 2020 1.2.0 Update - Ensure that storage account access keys are periodically
regenerated - change az cli command in audit procedure (Ticket
7995)
Oct 13, 2020 1.2.0 UPDATE - Ensure guest users are reviewed on a monthly basis -
added PowerShell Check in audit (Ticket 11475)
Oct 13, 2020 1.2.0 DELETE - Ensure that security contact 'Phone number' is set
(Ticket 11228)
Oct 13, 2020 1.2.0 UPDATE - Ensure that 'Users can create Microsoft 365 groups in
Azure Portals' is set to 'No' - Replace 'Office 365' with 'Microsoft
365' and update references. (Ticket 11363)
Oct 13, 2020 1.2.0 DELETE - Ensure that 'Users who can manage Office 365 groups' is
set to 'None' (Ticket 10400)
Oct 13, 2020 1.2.0 ADD - Ensure FTP deployments are disabled (Ticket 10503)
Oct 13, 2020 1.2.0 UPDATE - Ensure that no custom subscription owner roles are
created - PowerShell Check (Ticket 11479)
Oct 14, 2020 1.2.0 Add - Ensure any of the ASC Default policy setting is not set to
"Disabled" - Consolidate recommendations (Ticket 8791)
Oct 14, 2020 1.2.0 new not scored recommendations : Threat Detection Integration
(Ticket 9047)
Oct 15, 2020 1.2.0 ADD - Ensure Security Defaults is enabled on Azure Active
Directory (Ticket 11293)
Oct 15, 2020 1.2.0 ADD - Ensure storage for critical data are encrypted with Customer
Managed Key (Ticket 10279)
Oct 15, 2020 1.2.0 UPDATE - Ensure that 'Users who can manage security groups' is
set to 'None' - Change to wording (Owners can manage group
membership requests in the Access Panel) (Ticket 10399)
339 | P a g e
Oct 15, 2020 1.2.0 UPDATE - Ensure that there are no guest users - Ensure that all
Guest users are reviewed regularly rather than say they are not
permitted (Ticket 10897)
Oct 15, 2020 1.2.0 ADD - subsections in Database Services section - Creating
Subsections for better separation and ease for the end user (Ticket
9091)
Oct 15, 2020 1.2.0 DELETE - Ensure that shared access signature tokens are allowed
only over https - This appears to be mitigated by 3.1. (Ticket 8711)
Oct 15, 2020 1.2.0 UPDATE - Ensure that Network Watcher is 'Enabled' - Info
outdated in the recommendation. (Ticket 11559)
Oct 15, 2020 1.2.0 UPDATE - Ensure that Network Watcher is 'Enabled' - CLI Audit
command does not list disabled regions. (Ticket 10906)
Oct 15, 2020 1.2.0 DELETE - Ensure that Activity Log Alert exists for Update Security
Policy (Ticket 7706)
Oct 19, 2020 1.2.0 UPDATE - Ensure that standard pricing tier enabled for Virtual
Machines - Add PowerShell Check (Ticket 11480)
Oct 19, 2020 1.2.0 UPDATE - Ensure that standard pricing tier enabled for PaaS SQL
servers - Add PowerShell Check (Ticket 11481)
Oct 19, 2020 1.2.0 UPDATE - Ensure that standard pricing tier enabled for App
Service - Add PowerShell Check (Ticket 11482)
Oct 19, 2020 1.2.0 UPDATE - Ensure that standard pricing tier enabled for Storage
Accounts - Add PowerShell Check (Ticket 11483)
Oct 19, 2020 1.2.0 UDATE - Ensure that 'Automatic provisioning of monitoring agent'
is set to 'On' - Add PowerShell Check (Ticket 11484)
Oct 19, 2020 1.2.0 UPDATE - Ensure any of the ASC Default policy setting is not set to
"Disabled" - Audit procedure for section 2.8 produces misleading
results (Ticket 9196)
Oct 20, 2020 1.2.0 UPDATE - Ensure that Advanced Data Security (ADS) and
Advanced Threat Protection (ATP) on a SQL server is set to 'On' -
Edit reference (Ticket 10303)
340 | P a g e
Oct 21, 2020 1.2.0 UPDATE - Ensure that 'Users can consent to apps accessing
company data on their behalf' is set to 'No' - add PowerShell check
(Ticket 11477)
Oct 21, 2020 1.2.0 UPDATE - Ensure that 'Users can register applications' is set to
'No' - Add PowerShell Check (Ticket 11478)
Oct 21, 2020 1.2.0 ADD - Ensure 'Allow access to Azure services' for PostgreSQL
Database Server is disabled (Ticket 11451)
Oct 22, 2020 1.2.0 UPDATE - Ensure that Activity Log Alert exists for Delete Security
Solution - fix the category of the metric rule for delete Security
Solution (Ticket 11510)
Oct 22, 2020 1.2.0 UPDATE - Ensure that Activity Log Alert exists for Create or Update
Security Solution - fix the category of the metric rule for Create or
Update Security Solution (Ticket 11511)
Oct 22, 2020 1.2.0 UPDATE - Ensure that 'Security contact emails' is set - Setting
location change and renamed within Azure Portal (Ticket 11561)
Oct 22, 2020 1.2.0 UPDATE - Ensure that 'Send email notification for high severity
alerts' is set to 'On' - Settings location and naming convention
change in Azure Portal (Ticket 11562)
Oct 22, 2020 1.2.0 UPDATE - Ensure that 'Send email also to subscription owners' is
set to 'On' - setting location and name change in Azure Portal
(Ticket 11563)
Oct 22, 2020 1.2.0 ADD - Ensure Storage logging is enabled for Blob service for read,
write, and delete requests (Ticket 11564)
Oct 22, 2020 1.2.0 ADD - Ensure Storage logging is enabled for Table service for read,
write, and delete requests (Ticket 11565)
Oct 22, 2020 1.2.0 UPDATE - Multiple recommendations in section 5.2 - add UI
remediation steps (Ticket 11554)
Oct 22, 2020 1.2.0 REMOVE - Log activity for all regions - This may no longer be valid
if log settings is going away (Ticket 11583)
Oct 22, 2020 1.2.0 REMOVE - activity log to 365 days - No equivalent to this under
Diagnostics settings (Ticket 11582)
341 | P a g e
Oct 22, 2020 1.2.0 Add UI steps to configuring Storage Profile (Ticket 8225)
Oct 22, 2020 1.2.0 ADD - Ensure Virtual Machines are utilizing Managed Disks (Ticket
11568)
Oct 22, 2020 1.2.0 UPDATE - Log profile recommendations should include
recommendations for exporting to event hub (Ticket 9524)
Oct 22, 2020 1.2.0 UPDATE - Log profiles are being replaced with diagnostic settings
for activity logs (Ticket 9523)
Oct 22, 2020 1.2.0 UPDATE - Ensure the web app has 'Client Certificates (Incoming
client certificates)' set to 'On' - Console option location not up to
date (Ticket 11598)
Oct 22, 2020 1.2.0 UPDATE - Ensure that 'PHP version' is the latest, if used to run the
web app - Console location not up to date (Ticket 11600)
Oct 22, 2020 1.2.0 UPDATE - Ensure that 'HTTP Version' is the latest, if used to run
the web app - Console location not up to date (Ticket 11601)
Oct 22, 2020 1.2.0 ADD - Ensure that 'OS and Data' disks are encrypted (replace OS
and Data individual recommendations) (Ticket 11595)
Oct 23, 2020 1.2.0 UPDATE - Ensure that 'Unattached disks' are encrypted - Azure CIS
7.1-7.3 Guideline needs to be revisited in all aspects (Ticket
11342)
Oct 26, 2020 1.2.0 UPDATE - Ensure that Azure Defender is set to On for Virtual
Machines - Virtual Machines changed to Servers (Ticket 11617)
Oct 26, 2020 1.2.0 ADD - recommendations for Azure Defender for all resource types
(Ticket 8866)
Oct 27, 2020 1.2.0 UPDATE - Multiple Security Center Resource Recommendations -
Azure Security Center standard tier is now called 'Azure Defender'
(Ticket 11537)
Oct 31, 2020 1.2.0 ADD - Ensure Custom Role is assigned for Administering Resource
Locks - Recommend creating an RBAC role to administer Resource
locks (Ticket 8790)
342 | P a g e
2/15/2019 1.1.0 DELETE - 3.2 and 3.6 - Ensure that 'Storage... - Rules are 6185
no longer valid or do not require
2/15/2019 1.1.0 UPDATE - 2.17 Ensure that security contact - Not digitally 6224
signed warning
2/15/2019 1.1.0 UPDATE - 5.1.2 Ensure that Activity Log... - Retention 6559
Days set to 0 to allow indefinite retention
2/15/2019 1.1.0 UPDATE - 2.14 - Security Policy option name 'SQL 6560
auditing & Threat detection' is longer valid
2/15/2019 1.1.0 UPDATE - Ensure audit profile captures all the activities - 6705
Remediation CLI change
2/15/2019 1.1.0 UPDATE - Ensure log profile captures activity...- audit and 6706
remediation steps
2/15/2019 1.1.0 UPDATE - 8.4 Keyvault is recoverable - audit and 6737
remediation CLI update
2/15/2019 1.1.0 DELETE - Section 4.2 - Redundancy of Controls when 6778
intent has already addressed in 4.1
2/15/2019 1.1.0 ADD - SQL Servers (4.1): Ensure that Audit Action Group 6779
in auditing policy for a server is set properly
2/15/2019 1.1.0 UPDATE - Section 4: All recommendations change Azure 6781
Portal/Console Audit and Remediation Steps except 4.1.9
and 4.1.10
2/15/2019 1.1.0 UPDATE - 4.1.2 thru 4.1.7 - Changes required in Level 6789
and/or Scoring
2/15/2019 1.1.0 UPDATE - 4.1.1 Ensure that 'Auditing' is set to 'On' (SQL 6790
Server) - Description and notes updated
2/15/2019 1.1.0 UPDATE - 4.2.6 `TDE' on Database - Clarified wording and 6795
implementation process
2/15/2019 1.1.0 UPDATE - 4.1.6 `Email Service and co-Administrators' - 6796
Update Default value
2/15/2019 1.1.0 DELETE - 7.1 Ensure that VM agent is installed 6802
2/15/2019 1.1.0 UPDATE - 6.3 SQL server Firewall Policy - does 0.0.0.0 6803
means public access or Azure IP range
2/15/2019 1.1.0 UPDATE - 6.3 SQL server Firewall Policy can be 6804
overridden by DB Firewall policy
2/15/2019 1.1.0 UPDATE - 2.12 - JIT Network Access - Not a free service - 6810
Making it Level 2 to be aligned with 2.1 Pricing tier
`Standard`
343 | P a g e
2/15/2019 1.1.0 UPDATE - 2.13 Adaptive Application Controls - Making it 6811
Level 2 to be aligned with 2.1 Pricing tier `Standard`
2/15/2019 1.1.0 DELETE - 3.6 Ensure that 'Storage service encryption' is 6812
set to Enabled for File Service
2/15/2019 1.1.0 UPDATE - 4.8 Threat Detection Retention - Add case 0 : 6813
Indefinite Retention
2/15/2019 1.1.0 UPDATE - Ensure that Activity Log Alert exists for Create 6850
or Update or Delete...-title/rationale/description changed
2/15/2019 1.1.0 DELETE - Ensure that Activity Log Alert exists for Delete 6851
SQL Server...5.2.9
2/15/2019 1.1.0 ADD - Ensure that 'Unattached disks' are encrypted 6871
2/15/2019 1.1.0 UPDATE - Azure Security Center: Audit and Remediation 6874
console procedure changed
2/15/2019 1.1.0 UPDATE - Ensure that the expiration date is set on all 6920
keys - Audit & Remediation Update
2/15/2019 1.1.0 UPDATE - Ensure that the expiration date is set on all 6921
Secrets - Audit & Remediation Update
2/15/2019 1.1.0 ADD - Propose 'Ensure 'Trusted Microsoft Services' is 7079
enabled for Storage Account access'
2/15/2019 1.1.0 UPDATE- Ensure that 'Auditing' Retention is 'greater than 7245
90 days' - Audit & Remediation Steps Update
2/15/2019 1.1.0 ADD - Section for App Services Recommendations 7401
2/15/2019 1.1.0 UPDATE - Ensure that 'Members can invite' is set to 'No' - 7407
wording fix for Rationale
2/15/2019 1.1.0 UPDATE - Section 2 - Azure Security Center changes to 7479
audit and remediation in all recommendations
2/15/2019 1.1.0 UPDATE - SQL Service - Rename Section to Database 7559
Services
2/15/2019 1.1.0 ADD - Ensure 'Enforce SSL connection' is set to 7566
'ENABLED' for PostgreSQL Database
2/15/2019 1.1.0 ADD - Ensure 'Enforce SSL connection' is set to 7567
'ENABLED' for MySQL Database Server
2/15/2019 1.1.0 ADD - Ensure server parameter 'log_checkpoints' is set to 7572
'ON' for PostgreSQL Database Server
2/15/2019 1.1.0 ADD - Ensure server parameter 'log_connections' is set to 7573
'ON' for Azure Database for PostgreSQL server
2/15/2019 1.1.0 ADD - Ensure server parameter 'log_disconnections' is set 7575
to 'ON' for PostgreSQL Database Server
344 | P a g e
2/15/2019 1.1.0 ADD - Ensure server parameter 'log_duration' is set to 7576
'ON' for PostgreSQL Database Server
2/15/2019 1.1.0 ADD - Ensure server parameter 'connection_throttling' is 7578
set to 'ON' for PostgreSQL Database Server
2/15/2019 1.1.0 ADD - Ensure server parameter 'log_retention_days' is 7579
greater than 3 days for PostgreSQL Database Server
2/15/2019 1.1.0 UPDATE - Section 1 - Multiple recommendations changed 7673
to Not Scored
2/15/2019 1.1.0 UPDATE - 3.5 Ensure that shared access signature tokens 7687
are allowed only - scoring change
2/15/2019 1.1.0 UPDATE - section 9 multiple recommendations - Scoring 7688
status changed to Not Scored
2/15/2019 1.1.0 Update - mapping of V7 Critical Controls on all 7703
recommendations
2/15/2019 1.1.0 UPDATE - Section 2 recommendations - Audit and 7741
Remediation Portal Steps (Edit setting -> Edit settings)
2/15/2019 1.1.0 UPDATE - Ensure that 'Send email notification for high 7742
severity alerts' is - Update Title, Audit, Remediation steps
2/15/2019 1.1.0 UPDATE - Ensure server parameter 7878
'connection_throttling' is set to 'ON'... - updated rational
2/15/2019 1.1.0 UPDATE - Monitoring using Activity Log Alerts - audit CLI 7880
: Remove GET GET
2/15/2019 1.1.0 UPDATE - Section 5.2 - Update all Audit CLIs to filter out 7932
only desired alert rule
2/15/2019 1.1.0 UPDATE - Section 4 multiple recommendations - changed 7954
to Advanced Data Security
2/15/2019 1.1.0 UPDATE - Ensure ASC Default policy setting "Monitor 7993
System Updates" - Minor Correction in Audit Procedure
2/20/2018 1.0.0 Initial Release
345 | P a g e