Connect an on-premises server to Azure Arc and enforce a centralized continuous security baseline
A organisation runs a hybrid estate: Azure cloud resources alongside on-premises servers. The on-prem servers are managed entirely by hand. Engineers SSH into each machine to check configurations, apply patches, and review security settings.
Security audits kept failing. The servers did not follow a standard security configuration, and nothing detected when a setting drifted away from the expected baseline.
What was happening
Current state
| Area | Today |
|---|---|
| Server environment | On-prem Linux/Windows |
| Management | Manual SSH into each server |
| Security audits | Manual, infrequent, no central visibility |
| Monitoring | Basic uptime checks only, with no metrics or alerting |
| Compliance tracking | Spreadsheets, prone to human error |
Business impact
| Impact | Description |
|---|---|
| Failed audits | Regulatory compliance audits failing, creating a risk of fines |
| Security risk | Weak password and SSH settings leave servers exposed |
| Wasted engineer time | Hours spent checking configurations by hand every audit cycle |
| No visibility | Leadership has no reliable view of the security posture |
| Slow response | Configuration drift goes unnoticed for weeks or months |
The core question
How do we define, enforce, continuously audit, and monitor a security baseline on on-premises Linux servers from one place, without migrating them to the cloud and without buying a new configuration management platform?
Manual audits cannot keep up with a hybrid estate. A server can be compliant on Monday and drift by Wednesday, and a spreadsheet will not notice. This use case replaces point-in-time checks with continuous, centralised evaluation.
Root cause analysis
| Root cause | Effect | How this solution fixes it |
|---|---|---|
| No central management tool | Each server was a silo, so settings diverged | Azure Arc gives a single control plane in the Azure portal |
| Manual configuration checks | People forget, skip steps, and make errors | Azure Policy evaluates every machine on a schedule |
| No defined baseline | Nobody had written down what "correct" looks like | The Azure compute security baseline for Linux defines the standard |
| No drift detection | Changes went unnoticed for weeks | Machine Configuration re-evaluates periodically and flags non-compliance |
| No audit trail | No evidence to show auditors | Policy compliance history and Log Analytics provide queryable evidence |
Options considered
| Option | Pros | Why not chosen |
|---|---|---|
| A. Stay manual | No cost, no new tools | Error-prone, no real-time detection, does not scale, weak audit evidence |
| B. Ansible / Chef / Puppet | Mature, powerful enforcement | New skills to learn and operate, no built-in compliance dashboard, separate from the team's existing Azure tooling |
| C. Migrate servers to Azure VMs | Fully Azure-native | High migration cost, business disruption, and some servers cannot move |
| D. Azure Arc + Policy + Monitor | No migration, works with existing servers, uses the existing Azure subscription, compliance dashboard out of the box | Selected |
Use this pattern when servers must stay where they are but you want them governed as though they were in Azure.
Use this approach when
Typical triggers example
When this is not the right fit
| Tool | Purpose | Check |
|---|---|---|
| Azure CLI 2.50+ | Create resources and query status | az version |
| connectedmachine CLI extension | Inspect Arc machine extensions | az extension add --name connectedmachine |
| SSH client | Connect to the Linux server | ssh -V |
| scp | Copy the onboarding script | Included with OpenSSH |
Register these once per subscription:
az provider register --namespace Microsoft.HybridCompute
az provider register --namespace Microsoft.GuestConfiguration
az provider register --namespace Microsoft.HybridConnectivity
az provider register --namespace Microsoft.AzureArcData
az provider register --namespace Microsoft.Insights
az provider register --namespace Microsoft.OperationalInsightsThe step by step build and conclusion are part of a ByteLabs bundle. Enrol once to unlock every gated section in it for 3 months.
Browse ByteLabsThe step by step build and conclusion are part of a ByteLabs bundle. Enrol once to unlock every gated section in it for 3 months.
Browse ByteLabs