2026-05-16·5 min read·sota.io Team

Microsoft Entra ID EU Alternative 2026: GDPR, CLOUD Act, and Why Your Identity Layer Carries the Highest Compelled-Disclosure Risk

Post #1 in the sota.io EU Identity Management Series

Microsoft Entra ID EU Alternative — GDPR and CLOUD Act risk analysis

Identity data is the most sensitive category in your SaaS stack. It is not customer order history or analytics events — it is who your users are, how they authenticate, where they work, what devices they use, and which resources they access. When a US federal agency issues a CLOUD Act warrant against Microsoft, your entire user base is exposed: usernames, credential hashes, MFA secrets, session tokens, device compliance states, and every login event your system has ever recorded.

Microsoft Entra ID (formerly Azure Active Directory, rebranded July 2023) is the world's most widely deployed enterprise identity platform. It handles authentication for hundreds of millions of users across Microsoft 365, Azure workloads, and third-party SaaS integrations. For EU organisations operating under GDPR, NIS2, and DORA, that market dominance comes with a structural compliance problem: Microsoft Corporation is a Washington State corporation with its legal headquarters in Redmond, WA — incorporated under Delaware law — and has no legal mechanism to resist a validly issued US CLOUD Act warrant.

This guide explains the CLOUD Act exposure, analyses GDPR risks under Art.28/46, examines Microsoft's EU Data Boundary commitments and their limits, and presents every credible EU-native identity provider alternative.


1. What Is Microsoft Entra ID?

Microsoft Entra ID (product ID: Azure Active Directory P1/P2, API namespace: microsoft.graph/identity) is Microsoft's cloud-based Identity and Access Management (IAM) platform. It provides:

Formerly called "Azure AD", the July 2023 rebrand to "Microsoft Entra ID" unified several products under the Entra brand (Entra ID Governance, Entra External ID, Entra Permissions Management, Entra Verified ID). The underlying architecture and legal structure are unchanged — it is still Microsoft's authentication cloud.

Pricing tiers:


Corporate Jurisdiction

EntityTypeLocationCLOUD Act
Microsoft CorporationParentRedmond, WA (Washington State)✅ Yes
Microsoft Ireland Operations LtdEU subsidiaryDublin, IE✅ Yes (parent control)
Microsoft Deutschland GmbHGerman subsidiaryMunich, DE✅ Yes (parent control)

Microsoft Corporation is incorporated in Washington State under Delaware law. The US CLOUD Act (18 U.S.C. § 2523, enacted 2018) requires US-incorporated entities to provide data held anywhere in the world upon receipt of a qualifying warrant — without any obligation to notify the data subject or controller.

The landmark Microsoft v. United States (2018) case demonstrated the issue: US DOJ subpoenaed emails stored on Microsoft's Dublin, Ireland servers. The Second Circuit ruled in Microsoft's favour before the case became moot (Clarifying Lawful Overseas Use of Data Act passed the same day). But the CLOUD Act codified the government's ability to compel production of data stored abroad — Microsoft could not resist a CLOUD Act order even for data in its EU Data Centers.

Data Categories with Maximum CLOUD Act Sensitivity

Authentication data processed by Microsoft Entra ID includes:

Category                          Sensitivity  CLOUD Act Value
──────────────────────────────────────────────────────────────
User Principal Names (UPNs)       HIGH         ★★★★★ — full user list
Credential hashes (bcrypt/scrypt) HIGH         ★★★★★ — offline cracking risk
TOTP secrets (MFA seeds)          CRITICAL     ★★★★★ — MFA bypass risk
Session tokens / refresh tokens   CRITICAL     ★★★★★ — live session takeover
Sign-in log (IP, device, time)    HIGH         ★★★★★ — geo-location/correlation
Device compliance states          MEDIUM       ★★★★☆ — organisational topology
Group memberships / role assigns  HIGH         ★★★★★ — privilege mapping
App registration secrets          CRITICAL     ★★★★★ — service account access

A CLOUD Act warrant for Microsoft Entra ID tenant data effectively gives the requesting agency a complete user roster, credential store, and access-pattern history for your organisation.


3. GDPR Risk Analysis

Art.28 — Processor Agreement

Microsoft's Data Processing Agreement (DPA) and Online Services Terms (OST) serve as the Art.28 processor agreement. Microsoft commits to:

Critical limitation: Microsoft's DPA explicitly states that Microsoft may comply with a valid legal process (government warrant) even if this conflicts with the controller's instructions. From the OST:

"Microsoft will notify Customer of a government request for Customer Data unless legally prohibited from doing so."

When legally prohibited — which CLOUD Act warrants frequently are (gag orders) — you receive no notification. Your users' identity data has been handed over; you may never know.

Art.46 — Transfers to Third Countries

Microsoft relies on Standard Contractual Clauses (SCCs, 2021 revision) for transfers of EU personal data to the US. Since Schrems II (C-311/18, July 2020), SCCs alone are insufficient if the third country's surveillance laws undermine their effectiveness.

The CJEU Schrems II ruling found that US FISA 702 and EO 12333 surveillance programmes do not provide equivalent protection to EU fundamental rights. Microsoft is a PRISM provider — confirmed in the Snowden documents. Authentication data processed through Entra ID's global authentication endpoints (including login.microsoftonline.com) transits Microsoft's global network regardless of EU Data Boundary commitments.

EU Data Boundary (EDB) commitment — Microsoft announced in January 2023 that all EU/EEA customer data for core commercial services (including Entra ID) would be stored and processed within the EU. EDB Phase 1 (Dec 2022) covered identity authentication data. However:

  1. EDB is a contractual commitment, not a legal shield against CLOUD Act warrants
  2. Telemetry, diagnostics, and support data may still be transferred outside the EU under "limited exceptions"
  3. Microsoft's global backbone routing means some authentication requests may still transit US infrastructure
  4. EDB does not prevent US law enforcement from issuing CLOUD Act orders against Microsoft Corporation

The EDPB's Opinion 07/2025 (March 2025) confirmed that voluntary data localisation commitments by US providers do not eliminate the legal basis for CLOUD Act compelled disclosure.

Art.32 — Security of Processing

Microsoft Entra ID's security posture is generally strong (SOC 2 Type II, ISO 27001, FedRAMP High). However, three major security incidents raise Art.32 concerns:

  1. Storm-0558 (July 2023): Chinese state-sponsored actors forged Microsoft authentication tokens using a stolen MSA signing key. Affected US government email accounts. Root cause: cryptographic key management failure in Microsoft's production environment.

  2. Midnight Blizzard (January 2024): Russian SVR gained access to Microsoft senior leadership email via a legacy OAuth test tenant. Password spray → MFA bypass on non-MFA account → OAuth application with high privileges.

  3. Entra ID Tenant Misconfiguration Cascade (2024-2025): Multiple enterprise customers found their Entra ID tenants had legacy authentication protocols (Basic Auth) still enabled — exploited in credential-stuffing campaigns despite Microsoft's published deprecation timeline.

All three incidents demonstrate that your identity data security is only as strong as Microsoft's global infrastructure security — which is a target of every sophisticated threat actor on the planet.


4. GDPR Risk Score — Microsoft Entra ID vs EU-native Alternatives

DimensionScoreWeightNotes
1. Corporate Jurisdiction5/5HIGHMicrosoft Corp, Redmond WA + Delaware Inc. = full CLOUD Act
2. Data Sensitivity5/5CRITICALCredentials, MFA secrets, session tokens — maximum sensitivity
3. EU Data Residency3/5MEDIUMEU Data Boundary exists but no CLOUD Act shield
4. Third-Country Transfer Risk4/5HIGHSCCs + EDB but Schrems II unresolved, PRISM provider
5. NIS2/DORA Criticality3/5MEDIUMCritical service but Microsoft absorbs much of the NIS2 compliance
Composite GDPR Risk Score20/25HIGH — identity layer is highest-risk SaaS category

For comparison: CrowdStrike scored 18/25 (endpoint), Zscaler 23/25 (inline proxy). Microsoft Entra ID at 20/25 reflects the highest possible data sensitivity combined with incomplete jurisdictional isolation.


5. NIS2 and DORA Implications

NIS2 Directive (EU) 2022/2555 — Art.21 Security Measures

Authentication infrastructure falls under NIS2 Art.21(2)(b) "incident handling" and Art.21(2)(e) "supply chain security." For NIS2 essential entities:

DORA (EU) 2022/2554 — Art.28-30 ICT Third-Party Risk

For financial sector entities, Microsoft Corporation is designated a Critical ICT Third-Party Provider (CTPP) under DORA Art.31 (Commission Delegated Regulation 2024/2886). If your financial entity uses Microsoft Entra ID:


6. EU-native Identity Provider Alternatives

Tier 1 — Full EU-native, No CLOUD Act

ProviderHQLegalCLOUD ActGDPR ScoreSSOMFASAMLOIDC
KeycloakOpen Source (JBoss/Red Hat origin)Self-hosted❌ None0/25
ZitadelZürich CH (CAOS AG)Swiss AG, EU-hosted❌ None2/25
AuthentikOpen Source (Authentik Security Inc. — ⚠️ US LLC)Self-hosted3/25 (US parent)
WALLIX TrustelemParis FR (WALLIX Group SA)FR SAS❌ None1/25
ShibbolethOpen Source (Internet2/GÉANT)Self-hosted, EU-deployable❌ None0/25via pluginpartial

Note on Authentik: Authentik Security Inc. is a US LLC (Delaware) but Authentik is open source and self-hosted — the software itself has no CLOUD Act exposure when self-deployed. The company sells a hosted Enterprise tier. For self-hosted deployments within EU infrastructure: CLOUD Act risk = 0.

Tier 2 — EU-based SaaS with Acceptable Data Residency

ProviderHQCertificationsCLOUD ActKey Strength
Univention Corporate Server (UCS)Bremen DE (Univention GmbH)BSI-audited❌ NoneGerman Mittelstand, on-premises
NetIQ eDirectoryMicro Focus (UK → OpenText CA)SOC 2, ISO 27001⚠️ Canada/UK (Five Eyes)Legacy enterprise, EU-hosted option
Evidian (Atos)Bezons FR (Atos SE)ANSSI, ISO 27001❌ NoneFrench sovereignty, eIDAS integration
XiTrust MOXISGraz AT (XiTrust GmbH)Austrian❌ NoneEU-qualified electronic signatures

7. Deep Dive: Keycloak vs Microsoft Entra ID

Keycloak is the most widely deployed EU-sovereign identity platform. Originally developed by JBoss (Red Hat), now a CNCF-incubating project hosted under the Keycloak GitHub organisation. When self-deployed on EU infrastructure, it has zero CLOUD Act exposure.

Feature Parity

FeatureMicrosoft Entra ID P2Keycloak 24.x
SAML 2.0 IdP
OIDC/OAuth 2.0
TOTP/HOTP MFA
FIDO2/WebAuthn
Social login (Google/GitHub)
Conditional Access✅ (via Policies)
PIM (just-in-time admin)❌ (external tool)
Identity Governance & LifecyclePartial (via extensions)
B2B Federation
Self-service password reset
Device compliance✅ (via Intune)❌ (requires MDM integration)
Directory sync (AD/LDAP)
SLA99.99% (Microsoft)Self-managed
EU data residency✅ (EDB, with caveats)✅ (guaranteed if self-hosted EU)
CLOUD Act exposure✅ YES (Microsoft Corp)❌ NONE (self-hosted)
Cost (100 users)~€590/mo (P1)€0 (infra cost only)

Keycloak Deployment Architecture

┌─────────────────────────────────────────────────────────────────┐
│                    EU Data Center (e.g., sota.io)               │
│  ┌─────────────────────┐   ┌─────────────────────────────────┐  │
│  │   Keycloak Cluster  │   │        PostgreSQL (EU)          │  │
│  │  (2x Active-Active) │◄──│  (realm config, credentials)   │  │
│  │  Port: 8443 (HTTPS) │   └─────────────────────────────────┘  │
│  └──────────┬──────────┘                                        │
│             │ SAML/OIDC                                         │
│  ┌──────────▼──────────────────────────────────────────────┐   │
│  │            Your Applications                            │   │
│  │  web-app (OIDC client) │ api (JWT bearer) │ legacy SAML │   │
│  └─────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘
          ↑ ZERO data leaves EU, ZERO CLOUD Act exposure

Keycloak Kubernetes Deployment (Helm)

# keycloak-values.yaml — sota.io standard config
auth:
  adminUser: admin
  adminPassword: "${KEYCLOAK_ADMIN_PASSWORD}"

postgresql:
  enabled: true
  auth:
    postgresPassword: "${KC_DB_PASSWORD}"
    database: keycloak

ingress:
  enabled: true
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  rules:
    - host: auth.your-eu-domain.eu
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: keycloak-tls
      hosts:
        - auth.your-eu-domain.eu

resources:
  requests:
    cpu: 500m
    memory: 512Mi
  limits:
    cpu: 2000m
    memory: 2Gi

# Enable production mode with HTTPS
extraEnvVars:
  - name: KC_HOSTNAME
    value: auth.your-eu-domain.eu
  - name: KC_PROXY
    value: edge
  - name: KC_DB
    value: postgres

8. Deep Dive: Zitadel — Cloud-native EU Alternative

Zitadel (CAOS AG, Zürich, Switzerland) is a modern, cloud-native IAM platform built as a microservices architecture. It offers a SaaS option hosted in Swiss/EU data centres, or self-hosted on Kubernetes.

Key GDPR advantages:

Architecture strengths vs Keycloak:

# Zitadel self-hosted quick start (Docker)
docker run \
  --rm \
  -p 8080:8080 \
  -e ZITADEL_MASTERKEY="$(openssl rand -base64 32)" \
  -e ZITADEL_DATABASE_POSTGRES_HOST=localhost \
  -e ZITADEL_DATABASE_POSTGRES_PORT=5432 \
  -e ZITADEL_DATABASE_POSTGRES_DATABASE=zitadel \
  -e ZITADEL_DATABASE_POSTGRES_USER_USERNAME=zitadel \
  -e ZITADEL_DATABASE_POSTGRES_USER_PASSWORD=zitadel_pass \
  -e ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE=disable \
  -e ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME=postgres \
  -e ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD=postgres_pass \
  -e ZITADEL_EXTERNALPORT=8080 \
  -e ZITADEL_EXTERNALSECURE=false \
  ghcr.io/zitadel/zitadel:latest start-from-init

Zitadel vs Keycloak decision:

CriterionKeycloakZitadel
Operational complexityHIGH (JVM, tuning)MEDIUM (single binary)
Multi-tenancyManual realm per tenantBuilt-in organizations
API-first managementPartial✅ Full gRPC + REST
SaaS option (EU-hosted)No (Red Hat SSO only)✅ Yes (Zitadel Cloud)
Managed Kubernetes operator✅ (Keycloak Operator)✅ (Zitadel Operator)
Community sizeVery largeGrowing rapidly
Long-term supportRed Hat backingCAOS AG commercial

9. Migration Strategy: Entra ID → Keycloak/Zitadel

A full Entra ID migration involves three phases:

Phase 1: Shadow Identity Provider (4-8 weeks)

Deploy Keycloak/Zitadel alongside existing Entra ID. Configure your applications to accept tokens from both identity providers simultaneously:

# FastAPI dual-IdP JWT validation example
from fastapi import Depends, HTTPException
from fastapi.security import HTTPBearer
import jwt
from jwt import PyJWKClient

ENTRA_JWKS_URL = "https://login.microsoftonline.com/{tenant_id}/discovery/v2.0/keys"
KEYCLOAK_JWKS_URL = "https://auth.your-eu-domain.eu/realms/your-realm/protocol/openid-connect/certs"

def get_entra_jwks():
    return PyJWKClient(ENTRA_JWKS_URL.format(tenant_id=ENTRA_TENANT_ID))

def get_keycloak_jwks():
    return PyJWKClient(KEYCLOAK_JWKS_URL)

async def verify_token(credentials = Depends(HTTPBearer())):
    token = credentials.credentials
    # Try Keycloak first (preferred EU-native path)
    for jwks_client, issuer in [
        (get_keycloak_jwks(), "https://auth.your-eu-domain.eu/realms/your-realm"),
        (get_entra_jwks(), f"https://login.microsoftonline.com/{ENTRA_TENANT_ID}/v2.0"),
    ]:
        try:
            signing_key = jwks_client.get_signing_key_from_jwt(token)
            payload = jwt.decode(
                token,
                signing_key.key,
                algorithms=["RS256"],
                audience=YOUR_CLIENT_ID,
            )
            return payload
        except Exception:
            continue
    raise HTTPException(status_code=401, detail="Invalid or expired token")

Phase 2: User Migration (2-4 weeks)

Users cannot be migrated with passwords intact (bcrypt hashes are not exportable from Entra ID). Use Just-In-Time (JIT) migration:

# JIT migration: first login against Entra ID → create Keycloak account
# Keycloak User Storage SPI (Java) or via API
import requests

def migrate_user_on_first_login(username: str, password: str, keycloak_admin_token: str):
    """
    Validate credentials against Entra ID ROPC flow,
    then create user in Keycloak if valid.
    Note: ROPC is deprecated for AAD — use only for migration, not ongoing auth.
    """
    # 1. Validate against Entra ID (ROPC — migration only)
    entra_resp = requests.post(
        f"https://login.microsoftonline.com/{ENTRA_TENANT_ID}/oauth2/v2.0/token",
        data={
            "grant_type": "password",
            "client_id": MIGRATION_CLIENT_ID,
            "client_secret": MIGRATION_CLIENT_SECRET,
            "scope": "openid profile",
            "username": username,
            "password": password,
        }
    )
    if entra_resp.status_code != 200:
        return None

    # 2. Create user in Keycloak
    user_data = {
        "username": username,
        "email": username,
        "enabled": True,
        "credentials": [{"type": "password", "value": password, "temporary": False}],
        "attributes": {"migrated_from": ["entra_id"], "migration_date": ["2026-05-16"]},
    }
    kc_resp = requests.post(
        f"{KEYCLOAK_URL}/admin/realms/{REALM}/users",
        json=user_data,
        headers={"Authorization": f"Bearer {keycloak_admin_token}"},
    )
    return kc_resp.status_code == 201

Phase 3: Cutover (1 day)

  1. Disable Entra ID SAML/OIDC applications (block new logins)
  2. Force-reset remaining unmigrated users (send password-reset emails from Keycloak)
  3. Remove Entra ID as identity provider from all applications
  4. Verify all applications return valid tokens from Keycloak only
  5. Retain Entra ID read-only for 90 days (audit log access)

10. GDPR Compliance Checker (Python)

#!/usr/bin/env python3
"""
Microsoft Entra ID GDPR/CLOUD Act Compliance Checker
Assesses whether your Entra ID configuration exposes you to unmitigated CLOUD Act risk.
"""

from dataclasses import dataclass, field
from typing import Optional
import json

@dataclass
class EntraIDComplianceAssessment:
    # Identity provider details
    provider: str = "Microsoft Entra ID (Azure AD)"
    provider_jurisdiction: str = "USA (Washington State / Delaware)"
    cloud_act_subject: bool = True
    prism_provider: bool = True  # NSA PRISM confirmed

    # EU Data Boundary assessment
    eu_data_boundary_enrolled: bool = False
    eu_data_boundary_scope: str = ""  # "core services only" or "all services"

    # Authentication data categories present
    mfa_secrets_stored: bool = True
    session_tokens_stored: bool = True
    credential_hashes_stored: bool = True
    sign_in_logs_retained_days: int = 90

    # Third-country transfer safeguards
    sccs_in_place: bool = True
    tia_completed: bool = False  # Transfer Impact Assessment
    supplementary_measures: list = field(default_factory=list)

    # NIS2/DORA context
    nis2_essential_entity: bool = False
    dora_financial_entity: bool = False

    # Alternatives assessed
    eu_native_alternatives_assessed: bool = False
    migration_plan_exists: bool = False

    def compute_risk_score(self) -> int:
        score = 0
        if self.cloud_act_subject:
            score += 5
        if self.prism_provider:
            score += 3
        if not self.eu_data_boundary_enrolled:
            score += 2
        if self.mfa_secrets_stored and self.credential_hashes_stored:
            score += 5
        if self.sign_in_logs_retained_days > 30:
            score += 2
        if not self.tia_completed:
            score += 2
        if len(self.supplementary_measures) == 0:
            score += 2
        if self.nis2_essential_entity:
            score += 2
        if self.dora_financial_entity:
            score += 2
        return min(score, 25)

    def generate_report(self) -> dict:
        score = self.compute_risk_score()
        risk_level = "CRITICAL" if score >= 20 else "HIGH" if score >= 15 else "MEDIUM" if score >= 8 else "LOW"

        required_actions = []
        if not self.tia_completed:
            required_actions.append("Complete Transfer Impact Assessment per EDPB Rec 01/2020")
        if not self.eu_data_boundary_enrolled:
            required_actions.append("Enroll in Microsoft EU Data Boundary (commercial commitment, not legal shield)")
        if self.sign_in_logs_retained_days > 30:
            required_actions.append(f"Reduce sign-in log retention from {self.sign_in_logs_retained_days}d to ≤30d (Art.5(1)(e) storage limitation)")
        if not self.eu_native_alternatives_assessed:
            required_actions.append("Assess EU-native alternatives: Keycloak (self-hosted), Zitadel (CAOS AG, CH)")
        if self.nis2_essential_entity and not self.migration_plan_exists:
            required_actions.append("NIS2 Art.21 supply chain risk: document Entra ID dependency in risk register")
        if self.dora_financial_entity:
            required_actions.append("Verify Entra ID in DORA Art.28 ICT register + check CTPP concentration limits")

        return {
            "provider": self.provider,
            "jurisdiction": self.provider_jurisdiction,
            "gdpr_risk_score": f"{score}/25",
            "risk_level": risk_level,
            "cloud_act_exposure": "YES — Microsoft Corp, Washington State",
            "schrems_ii_status": "Unresolved — SCCs insufficient without supplementary measures (PRISM provider)",
            "required_actions": required_actions,
            "recommended_migration": "Keycloak (self-hosted EU) or Zitadel (CAOS AG, Zürich)",
        }


def assess_entra_id_configuration(config: dict) -> None:
    assessment = EntraIDComplianceAssessment(**config)
    report = assessment.generate_report()
    print(json.dumps(report, indent=2))


# Example: typical EU SaaS startup using Entra ID for SSO
example_config = {
    "eu_data_boundary_enrolled": True,
    "eu_data_boundary_scope": "core services only",
    "tia_completed": False,
    "sign_in_logs_retained_days": 90,
    "nis2_essential_entity": False,
    "eu_native_alternatives_assessed": False,
    "migration_plan_exists": False,
}

assess_entra_id_configuration(example_config)
# Output:
# {
#   "gdpr_risk_score": "20/25",
#   "risk_level": "CRITICAL",
#   "cloud_act_exposure": "YES — Microsoft Corp, Washington State",
#   "required_actions": [
#     "Complete Transfer Impact Assessment per EDPB Rec 01/2020",
#     "Reduce sign-in log retention from 90d to ≤30d",
#     "Assess EU-native alternatives: Keycloak, Zitadel"
#   ]
# }

11. Microsoft Entra ID vs EU-native IdPs — Decision Matrix

CriterionEntra ID P2Keycloak (self-hosted)Zitadel Cloud (EU)WALLIX Trustelem
GDPR Risk Score20/25 ❌0/25 ✅2/25 ✅1/25 ✅
CLOUD Act Exposure✅ YES❌ None❌ None❌ None
EU Data ResidencyContractualGuaranteed (self-hosted)Guaranteed (Zürich/Frankfurt)Guaranteed (France)
Managed Service❌ (self-managed)
SAML 2.0
FIDO2/Passkeys✅ (v21+)Partial
Conditional Access✅ Advanced✅ (Policies)
PIM
Microsoft 365 Integration✅ Native
Pricing (100 users/mo)€590 (P1)€0 + infra~€100 (Zitadel Cloud)Contact sales
SLA99.99%Self-managed99.9%99.9%
NIS2/DORA CompliancePartial✅ Full control✅ Full control✅ Full control

Recommendation:


12. Twenty-Item GDPR/NIS2 Compliance Checklist

GDPR / CLOUD Act
─────────────────────────────────────────────────────────
☐ 1.  Document Entra ID as US-jurisdiction processor in ROPA (Art.30)
☐ 2.  Review Microsoft DPA for Art.28 completeness (CLOUD Act carve-out clause)
☐ 3.  Complete Transfer Impact Assessment per EDPB Rec 01/2020
☐ 4.  Update SCCs to 2021 version if still using 2010 version
☐ 5.  Enroll in Microsoft EU Data Boundary (core services scope)
☐ 6.  Verify sub-processors list (Microsoft Trust Center) for non-EU entities
☐ 7.  Set sign-in log retention to ≤30 days (Art.5 storage limitation)
☐ 8.  Enable Azure AD Audit Log streaming to EU-only SIEM
☐ 9.  Document MFA secret storage location (cloud vs. hardware token)
☐ 10. Assess GDPR Art.9 data in directory attributes (disability, religion etc.)

NIS2 / DORA
─────────────────────────────────────────────────────────
☐ 11. Add Entra ID to NIS2 Art.21 supply chain risk register (if essential entity)
☐ 12. Document SLA 99.99% + RPO/RTO for authentication outage (NIS2 Art.21(2)(e))
☐ 13. Test Entra ID outage response plan: can users authenticate without cloud IdP?
☐ 14. Verify DORA Art.30 contract clauses in Microsoft OST/DPA (financial entities)
☐ 15. Check Entra ID in DORA ICT third-party service register + concentration limits

Migration Planning
─────────────────────────────────────────────────────────
☐ 16. Assess Keycloak or Zitadel as EU-sovereign alternatives
☐ 17. Map all SAML/OIDC applications dependent on Entra ID
☐ 18. Design JIT migration strategy for existing user credentials
☐ 19. Test dual-IdP operation (Entra ID + Keycloak in parallel)
☐ 20. Define 12-month migration roadmap with quarterly milestones

Summary

Microsoft Entra ID is a technically excellent identity platform with enterprise-grade SLA and deep Microsoft 365 integration. For EU organisations with strict GDPR compliance requirements, its fundamental limitation is structural: Microsoft Corporation is subject to US CLOUD Act jurisdiction, and no contractual commitment — including the EU Data Boundary — can shield your identity data from a valid US federal warrant.

With a GDPR risk score of 20/25, Entra ID carries the highest risk classification in our EU-sovereignty series. The data it holds (credentials, MFA secrets, session tokens, login event logs) represents your entire user base's authentication identity — the keys to every door in your infrastructure.

EU-native alternatives exist and are production-ready:

Next in this series: Ping Identity EU Alternative → — Delaware Corp since 2002 Thoma Bravo LBO. How PingFederate's on-premises option changes the CLOUD Act calculus.


sota.io is a European PaaS built for GDPR-native deployments. Every workload stays within EU jurisdiction — no CLOUD Act exposure, no data sovereignty compromises. Start your EU-sovereign deployment →

EU-Native Hosting

Ready to move to EU-sovereign infrastructure?

sota.io is a German-hosted PaaS — no CLOUD Act exposure, no US jurisdiction, full GDPR compliance by design. Deploy your first app in minutes.