{
  "id": "CB-M365-POWER-021",
  "standard": "m365",
  "version": "main",
  "url": "https://baselines.cirsec.org/b/m365/CB-M365-POWER-021",
  "json": "https://baselines.cirsec.org/b/m365/CB-M365-POWER-021.json",
  "yaml": "https://baselines.cirsec.org/b/m365/CB-M365-POWER-021.yml",
  "profiles_effective": [
    "baseline",
    "hardened"
  ],
  "license": "Text CC BY 4.0, code Apache-2.0",
  "attribution": "CIRSEC Baselines, https://baselines.cirsec.org",
  "control": {
    "id": "CB-M365-POWER-021",
    "title": "Restrict service principals from creating Fabric workspaces, connections and deployment pipelines",
    "finding": {
      "title": "Any service principal can create Fabric workspaces, connections and deployment pipelines",
      "description": "Service principals can call Fabric APIs that no item permission protects and create new workspaces, data connections or pipelines."
    },
    "status": "active",
    "profiles": [
      "baseline"
    ],
    "risk": {
      "severity": "medium"
    },
    "assessment": "manual",
    "tags": [
      "fabric",
      "service-principals",
      "api",
      "workspaces",
      "workload-identities"
    ],
    "applicability": {
      "requires": [
        "Power BI / Microsoft Fabric"
      ]
    },
    "description": "The Fabric tenant setting **Service principals can create workspaces, connections, and\ndeployment pipelines** (Developer settings) is **Disabled**, or **Enabled** only for specific\nsecurity groups containing the service principals of approved automation (for example a CI/CD\npipeline).\n",
    "rationale": "The Create Workspace, Create Connection and Create Deployment Pipeline APIs are not protected by\na Fabric permission model: once the tenant setting allows a service principal, it can create these\nobjects freely. A compromised application secret can then be used to create workspaces outside\ngovernance or connections that reach external data stores with stored credentials. Limiting the\nsetting to a reviewed automation group closes that path.\n",
    "impact": "Automation whose service principal is outside the allowed groups can no longer create workspaces,\nconnections or deployment pipelines. Microsoft disables this setting by default for new tenants;\ncheck existing CI/CD and provisioning scripts before restricting it in older tenants.\n",
    "setting": {
      "location": "Fabric admin portal > Tenant settings > Developer settings > Service principals can create workspaces, connections, and deployment pipelines",
      "default_value": "Disabled (new tenants)",
      "recommended_value": "Disabled, or Enabled for specific security groups"
    },
    "audit": {
      "manual": "1. Sign in to Microsoft Fabric (https://app.fabric.microsoft.com) as a Fabric Administrator.\n2. Open **Settings** > **Admin portal** > **Tenant settings** > **Developer settings** and\n   expand **Service principals can create workspaces, connections, and deployment pipelines**.\n3. Check that it is **Disabled**, or **Enabled** for **Specific security groups** only.\n4. Alternative, read only: in `GET https://api.fabric.microsoft.com/v1/admin/tenantsettings`,\n   read the entry `ServicePrincipalAccessGlobalAPIs`.\n5. Fail if the setting is enabled for the entire organization.\n"
    },
    "remediation": {
      "manual": "1. In **Tenant settings** > **Developer settings** > **Service principals can create\n   workspaces, connections, and deployment pipelines**, select **Disabled**, or **Enabled** with\n   **Specific security groups**. Select **Apply**. Role: Fabric Administrator.\n2. API equivalent: `POST\n   https://api.fabric.microsoft.com/v1/admin/tenantsettings/ServicePrincipalAccessGlobalAPIs/update`\n   with the target state.\n",
      "rollback": "Set the setting back to its previous scope.\n"
    },
    "references": [
      {
        "title": "Developer admin settings",
        "url": "https://learn.microsoft.com/fabric/admin/service-admin-portal-developer",
        "publisher": "Microsoft",
        "kind": "vendor-doc",
        "accessed": "2026-10-24"
      }
    ],
    "mappings": [
      {
        "framework": "nist-800-53r5",
        "framework_version": "5.1.1",
        "id": "AC-6(5)",
        "relation": "related"
      },
      {
        "framework": "nist-800-53r5",
        "framework_version": "5.1.1",
        "id": "CM-7",
        "relation": "related"
      }
    ],
    "threats": [
      {
        "framework": "mitre-attack",
        "id": "T1059.009"
      }
    ],
    "related_controls": [
      {
        "id": "CB-M365-POWER-019",
        "type": "related"
      },
      {
        "id": "CB-M365-APPS-001",
        "type": "related"
      }
    ],
    "authors": [
      {
        "name": "Alice",
        "github": "Sn0wAlice"
      }
    ],
    "introduced_in": "0.1.0",
    "created": "2026-10-24",
    "updated": "2026-10-24"
  }
}