or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

application-api-security.mdcloud-security-posture.mdcompliance-governance.mdconfiguration-settings.mddevops-security.mdindex.mdnetwork-security.mdsecurity-assessment-monitoring.mdvulnerability-management.md

configuration-settings.mddocs/

0

# Configuration and Settings

1

2

Security Center configuration and settings management capabilities, providing centralized configuration for security settings, contact management, workspace settings, auto-provisioning, and data export configuration.

3

4

## Capabilities

5

6

### Settings Management

7

8

Manage Azure Security Center configuration settings including data export, alert synchronization, and feature enablement.

9

10

```python { .api }

11

def list(

12

**kwargs: Any

13

) -> Iterator[Setting]:

14

"""

15

List all security settings for the subscription.

16

17

Returns:

18

Iterator[Setting]: Iterator of Setting objects

19

"""

20

21

def get(

22

setting_name: str,

23

**kwargs: Any

24

) -> Setting:

25

"""

26

Get details of a specific security setting.

27

28

Parameters:

29

- setting_name (str): Name of the setting (MCAS, WDATP, SENTINEL)

30

31

Returns:

32

Setting: Security setting details

33

"""

34

35

def update(

36

setting_name: str,

37

setting: Setting,

38

**kwargs: Any

39

) -> Setting:

40

"""

41

Update a security setting.

42

43

Parameters:

44

- setting_name (str): Name of the setting

45

- setting (Setting): Updated setting configuration

46

47

Returns:

48

Setting: Updated security setting

49

"""

50

```

51

52

### Security Contacts

53

54

Manage security contact information for alert notifications and communication.

55

56

```python { .api }

57

def list(

58

**kwargs: Any

59

) -> Iterator[SecurityContact]:

60

"""

61

List security contacts for the subscription.

62

63

Returns:

64

Iterator[SecurityContact]: Iterator of SecurityContact objects

65

"""

66

67

def get(

68

security_contact_name: str,

69

**kwargs: Any

70

) -> SecurityContact:

71

"""

72

Get details of a specific security contact.

73

74

Parameters:

75

- security_contact_name (str): Name of the security contact

76

77

Returns:

78

SecurityContact: Security contact details

79

"""

80

81

def create(

82

security_contact_name: str,

83

security_contact: SecurityContact,

84

**kwargs: Any

85

) -> SecurityContact:

86

"""

87

Create a security contact.

88

89

Parameters:

90

- security_contact_name (str): Name of the security contact

91

- security_contact (SecurityContact): Contact information

92

93

Returns:

94

SecurityContact: Created security contact

95

"""

96

97

def update(

98

security_contact_name: str,

99

security_contact: SecurityContact,

100

**kwargs: Any

101

) -> SecurityContact:

102

"""

103

Update a security contact.

104

105

Parameters:

106

- security_contact_name (str): Name of the security contact

107

- security_contact (SecurityContact): Updated contact information

108

109

Returns:

110

SecurityContact: Updated security contact

111

"""

112

113

def delete(

114

security_contact_name: str,

115

**kwargs: Any

116

) -> None:

117

"""

118

Delete a security contact.

119

120

Parameters:

121

- security_contact_name (str): Name of the security contact

122

123

Returns:

124

None

125

"""

126

```

127

128

### Auto Provisioning Settings

129

130

Manage automatic provisioning of security agents and extensions.

131

132

```python { .api }

133

def list(

134

**kwargs: Any

135

) -> Iterator[AutoProvisioningSetting]:

136

"""

137

List auto provisioning settings for the subscription.

138

139

Returns:

140

Iterator[AutoProvisioningSetting]: Iterator of auto provisioning settings

141

"""

142

143

def get(

144

setting_name: str,

145

**kwargs: Any

146

) -> AutoProvisioningSetting:

147

"""

148

Get details of a specific auto provisioning setting.

149

150

Parameters:

151

- setting_name (str): Name of the setting

152

153

Returns:

154

AutoProvisioningSetting: Auto provisioning setting details

155

"""

156

157

def create(

158

setting_name: str,

159

setting: AutoProvisioningSetting,

160

**kwargs: Any

161

) -> AutoProvisioningSetting:

162

"""

163

Create an auto provisioning setting.

164

165

Parameters:

166

- setting_name (str): Name of the setting

167

- setting (AutoProvisioningSetting): Setting configuration

168

169

Returns:

170

AutoProvisioningSetting: Created auto provisioning setting

171

"""

172

```

173

174

### Workspace Settings

175

176

Manage Log Analytics workspace settings for Security Center data collection.

177

178

```python { .api }

179

def list(

180

**kwargs: Any

181

) -> Iterator[WorkspaceSetting]:

182

"""

183

List workspace settings for the subscription.

184

185

Returns:

186

Iterator[WorkspaceSetting]: Iterator of WorkspaceSetting objects

187

"""

188

189

def get(

190

workspace_setting_name: str,

191

**kwargs: Any

192

) -> WorkspaceSetting:

193

"""

194

Get details of a specific workspace setting.

195

196

Parameters:

197

- workspace_setting_name (str): Name of the workspace setting

198

199

Returns:

200

WorkspaceSetting: Workspace setting details

201

"""

202

203

def create(

204

workspace_setting_name: str,

205

workspace_setting: WorkspaceSetting,

206

**kwargs: Any

207

) -> WorkspaceSetting:

208

"""

209

Create a workspace setting.

210

211

Parameters:

212

- workspace_setting_name (str): Name of the workspace setting

213

- workspace_setting (WorkspaceSetting): Workspace configuration

214

215

Returns:

216

WorkspaceSetting: Created workspace setting

217

"""

218

219

def update(

220

workspace_setting_name: str,

221

workspace_setting: WorkspaceSetting,

222

**kwargs: Any

223

) -> WorkspaceSetting:

224

"""

225

Update a workspace setting.

226

227

Parameters:

228

- workspace_setting_name (str): Name of the workspace setting

229

- workspace_setting (WorkspaceSetting): Updated workspace configuration

230

231

Returns:

232

WorkspaceSetting: Updated workspace setting

233

"""

234

235

def delete(

236

workspace_setting_name: str,

237

**kwargs: Any

238

) -> None:

239

"""

240

Delete a workspace setting.

241

242

Parameters:

243

- workspace_setting_name (str): Name of the workspace setting

244

245

Returns:

246

None

247

"""

248

```

249

250

### Sensitivity Settings

251

252

Manage data sensitivity and classification settings for Security Center.

253

254

```python { .api }

255

def list(

256

**kwargs: Any

257

) -> Iterator[GetSensitivitySettingsResponse]:

258

"""

259

List sensitivity settings for the subscription.

260

261

Returns:

262

Iterator[GetSensitivitySettingsResponse]: Iterator of sensitivity settings

263

"""

264

265

def get(

266

**kwargs: Any

267

) -> GetSensitivitySettingsResponse:

268

"""

269

Get sensitivity settings for the subscription.

270

271

Returns:

272

GetSensitivitySettingsResponse: Sensitivity settings details

273

"""

274

275

def create_or_update(

276

sensitivity_settings: UpdateSensitivitySettingsRequest,

277

**kwargs: Any

278

) -> GetSensitivitySettingsResponse:

279

"""

280

Create or update sensitivity settings.

281

282

Parameters:

283

- sensitivity_settings (UpdateSensitivitySettingsRequest): Sensitivity configuration

284

285

Returns:

286

GetSensitivitySettingsResponse: Created or updated sensitivity settings

287

"""

288

```

289

290

### Information Protection Policies

291

292

Manage information protection and data classification policies.

293

294

```python { .api }

295

def list(

296

scope: str,

297

**kwargs: Any

298

) -> Iterator[InformationProtectionPolicy]:

299

"""

300

List information protection policies for a scope.

301

302

Parameters:

303

- scope (str): Resource scope (subscription or management group)

304

305

Returns:

306

Iterator[InformationProtectionPolicy]: Iterator of protection policies

307

"""

308

309

def get(

310

scope: str,

311

information_protection_policy_name: str,

312

**kwargs: Any

313

) -> InformationProtectionPolicy:

314

"""

315

Get details of a specific information protection policy.

316

317

Parameters:

318

- scope (str): Resource scope

319

- information_protection_policy_name (str): Name of the policy

320

321

Returns:

322

InformationProtectionPolicy: Protection policy details

323

"""

324

325

def create_or_update(

326

scope: str,

327

information_protection_policy_name: str,

328

information_protection_policy: InformationProtectionPolicy,

329

**kwargs: Any

330

) -> InformationProtectionPolicy:

331

"""

332

Create or update an information protection policy.

333

334

Parameters:

335

- scope (str): Resource scope

336

- information_protection_policy_name (str): Name of the policy

337

- information_protection_policy (InformationProtectionPolicy): Policy configuration

338

339

Returns:

340

InformationProtectionPolicy: Created or updated policy

341

"""

342

```

343

344

### Locations and Operations

345

346

Access Security Center supported locations and available operations.

347

348

```python { .api }

349

def list_locations(

350

**kwargs: Any

351

) -> Iterator[AscLocation]:

352

"""

353

List supported Azure Security Center locations.

354

355

Returns:

356

Iterator[AscLocation]: Iterator of supported locations

357

"""

358

359

def get_location(

360

asc_location: str,

361

**kwargs: Any

362

) -> AscLocation:

363

"""

364

Get details of a specific Azure Security Center location.

365

366

Parameters:

367

- asc_location (str): Azure Security Center location

368

369

Returns:

370

AscLocation: Location details

371

"""

372

373

def list_operations(

374

**kwargs: Any

375

) -> Iterator[Operation]:

376

"""

377

List available Security Center operations.

378

379

Returns:

380

Iterator[Operation]: Iterator of available operations

381

"""

382

```

383

384

### Microsoft Defender for Endpoint Onboarding

385

386

Manage Microsoft Defender for Endpoint (MDE) onboarding configurations.

387

388

```python { .api }

389

def list(

390

**kwargs: Any

391

) -> Iterator[MdeOnboardingData]:

392

"""

393

List Microsoft Defender for Endpoint onboarding configurations.

394

395

Returns:

396

Iterator[MdeOnboardingData]: Iterator of MDE onboarding configurations

397

"""

398

399

def get(

400

**kwargs: Any

401

) -> MdeOnboardingData:

402

"""

403

Get Microsoft Defender for Endpoint onboarding data.

404

405

Returns:

406

MdeOnboardingData: MDE onboarding configuration

407

"""

408

```

409

410

### Security Operators

411

412

Manage security operator configurations and access.

413

414

```python { .api }

415

def list(

416

**kwargs: Any

417

) -> Iterator[SecurityOperator]:

418

"""

419

List security operators for the subscription.

420

421

Returns:

422

Iterator[SecurityOperator]: Iterator of SecurityOperator objects

423

"""

424

425

def get(

426

security_operator_name: str,

427

**kwargs: Any

428

) -> SecurityOperator:

429

"""

430

Get details of a specific security operator.

431

432

Parameters:

433

- security_operator_name (str): Name of the security operator

434

435

Returns:

436

SecurityOperator: Security operator details

437

"""

438

439

def create_or_update(

440

security_operator_name: str,

441

security_operator_body: SecurityOperator,

442

**kwargs: Any

443

) -> SecurityOperator:

444

"""

445

Create or update a security operator.

446

447

Parameters:

448

- security_operator_name (str): Name of the security operator

449

- security_operator_body (SecurityOperator): Operator configuration

450

451

Returns:

452

SecurityOperator: Created or updated security operator

453

"""

454

455

def delete(

456

security_operator_name: str,

457

**kwargs: Any

458

) -> None:

459

"""

460

Delete a security operator.

461

462

Parameters:

463

- security_operator_name (str): Name of the security operator

464

465

Returns:

466

None

467

"""

468

```

469

470

## Types

471

472

```python { .api }

473

class Setting:

474

id: Optional[str]

475

name: Optional[str]

476

type: Optional[str]

477

kind: str # DataExportSettings, AlertSyncSettings

478

479

class DataExportSettings:

480

enabled: bool

481

482

class AlertSyncSettings:

483

enabled: bool

484

485

class SecurityContact:

486

id: Optional[str]

487

name: Optional[str]

488

type: Optional[str]

489

emails: Optional[str] # Semicolon-separated email addresses

490

phone: Optional[str]

491

alert_notifications: Optional[AlertNotifications]

492

notifications_by_role: Optional[NotificationsByRole]

493

494

class AlertNotifications:

495

state: Optional[str] # On, Off

496

minimal_severity: Optional[str] # High, Medium, Low

497

498

class NotificationsByRole:

499

state: Optional[str] # On, Off

500

roles: Optional[List[str]] # Owner, Contributor, ServiceAdmin, AccountAdmin

501

502

class AutoProvisioningSetting:

503

id: Optional[str]

504

name: Optional[str]

505

type: Optional[str]

506

auto_provision: str # On, Off

507

508

class WorkspaceSetting:

509

id: Optional[str]

510

name: Optional[str]

511

type: Optional[str]

512

workspace_id: Optional[str]

513

scope: Optional[str]

514

515

class GetSensitivitySettingsResponse:

516

sensitive_info_types_ids: Optional[List[str]]

517

sensitivity_threshold_label_order: Optional[float]

518

sensitivity_threshold_label_id: Optional[str]

519

520

class UpdateSensitivitySettingsRequest:

521

sensitive_info_types_ids: Optional[List[str]]

522

sensitivity_threshold_label_order: Optional[float]

523

sensitivity_threshold_label_id: Optional[str]

524

525

class InformationProtectionPolicy:

526

id: Optional[str]

527

name: Optional[str]

528

type: Optional[str]

529

last_modified_utc: Optional[datetime]

530

version: Optional[str]

531

labels: Optional[Dict[str, SensitivityLabel]]

532

information_types: Optional[Dict[str, InformationType]]

533

534

class SensitivityLabel:

535

display_name: Optional[str]

536

description: Optional[str]

537

rank: Optional[int]

538

enabled: Optional[bool]

539

order: Optional[float]

540

541

class InformationType:

542

display_name: Optional[str]

543

description: Optional[str]

544

order: Optional[float]

545

recommended_label_id: Optional[str]

546

enabled: Optional[bool]

547

custom: Optional[bool]

548

keywords: Optional[List[InformationProtectionKeyword]]

549

550

class InformationProtectionKeyword:

551

pattern: Optional[str]

552

custom: Optional[bool]

553

can_be_numeric: Optional[bool]

554

excluded: Optional[bool]

555

556

class AscLocation:

557

id: Optional[str]

558

name: Optional[str]

559

type: Optional[str]

560

properties: Optional[AscLocationProperties]

561

562

class AscLocationProperties:

563

display_name: Optional[str]

564

565

class Operation:

566

name: Optional[str]

567

origin: Optional[str]

568

display: Optional[OperationDisplay]

569

570

class OperationDisplay:

571

provider: Optional[str]

572

resource: Optional[str]

573

operation: Optional[str]

574

description: Optional[str]

575

576

class MdeOnboardingData:

577

id: Optional[str]

578

name: Optional[str]

579

type: Optional[str]

580

onboarding_package_windows: Optional[bytes]

581

onboarding_package_linux: Optional[bytes]

582

583

class SecurityOperator:

584

id: Optional[str]

585

name: Optional[str]

586

type: Optional[str]

587

identity: Optional[Identity]

588

589

class Identity:

590

principal_id: Optional[str]

591

tenant_id: Optional[str]

592

type: Optional[str] # SystemAssigned

593

```

594

595

## Usage Examples

596

597

### Security Settings Configuration

598

599

```python

600

from azure.identity import DefaultAzureCredential

601

from azure.mgmt.security import SecurityCenter

602

603

credential = DefaultAzureCredential()

604

client = SecurityCenter(credential, "subscription-id")

605

606

# List all security settings

607

settings = client.settings.list()

608

for setting in settings:

609

print(f"Setting: {setting.name}")

610

print(f"Kind: {setting.kind}")

611

612

if setting.kind == "DataExportSettings":

613

print(f"Data Export Enabled: {setting.enabled}")

614

elif setting.kind == "AlertSyncSettings":

615

print(f"Alert Sync Enabled: {setting.enabled}")

616

617

# Get specific setting

618

mcas_setting = client.settings.get("MCAS")

619

print(f"MCAS Setting: {mcas_setting.name}")

620

print(f"Enabled: {mcas_setting.enabled}")

621

622

# Update data export settings

623

data_export_setting = {

624

"kind": "DataExportSettings",

625

"enabled": True

626

}

627

628

updated_setting = client.settings.update("DataExportSettings", data_export_setting)

629

print(f"Data export updated: {updated_setting.enabled}")

630

631

# Enable WDATP integration

632

wdatp_setting = {

633

"kind": "AlertSyncSettings",

634

"enabled": True

635

}

636

637

wdatp_updated = client.settings.update("WDATP", wdatp_setting)

638

print(f"WDATP integration enabled: {wdatp_updated.enabled}")

639

```

640

641

### Security Contact Management

642

643

```python

644

# List existing security contacts

645

contacts = client.security_contacts.list()

646

for contact in contacts:

647

print(f"Contact: {contact.name}")

648

print(f"Emails: {contact.emails}")

649

print(f"Phone: {contact.phone}")

650

651

if contact.alert_notifications:

652

print(f"Alert Notifications: {contact.alert_notifications.state}")

653

print(f"Minimal Severity: {contact.alert_notifications.minimal_severity}")

654

655

if contact.notifications_by_role:

656

print(f"Role Notifications: {contact.notifications_by_role.state}")

657

print(f"Roles: {contact.notifications_by_role.roles}")

658

659

# Create a new security contact

660

security_contact = {

661

"emails": "security-team@company.com;soc@company.com",

662

"phone": "+1-555-123-4567",

663

"alert_notifications": {

664

"state": "On",

665

"minimal_severity": "Medium"

666

},

667

"notifications_by_role": {

668

"state": "On",

669

"roles": ["Owner", "Contributor"]

670

}

671

}

672

673

contact = client.security_contacts.create("primary", security_contact)

674

print(f"Created security contact: {contact.name}")

675

676

# Update existing contact

677

updated_contact = {

678

"emails": "security-team@company.com;soc@company.com;ciso@company.com",

679

"phone": "+1-555-123-4567",

680

"alert_notifications": {

681

"state": "On",

682

"minimal_severity": "High" # Changed to High

683

},

684

"notifications_by_role": {

685

"state": "On",

686

"roles": ["Owner", "Contributor", "ServiceAdmin"]

687

}

688

}

689

690

updated = client.security_contacts.update("primary", updated_contact)

691

print(f"Updated contact minimal severity to: {updated.alert_notifications.minimal_severity}")

692

```

693

694

### Auto Provisioning Configuration

695

696

```python

697

# List auto provisioning settings

698

auto_settings = client.auto_provisioning_settings.list()

699

for setting in auto_settings:

700

print(f"Auto Provisioning: {setting.name}")

701

print(f"Status: {setting.auto_provision}")

702

703

# Get specific auto provisioning setting

704

log_analytics_setting = client.auto_provisioning_settings.get("default")

705

print(f"Log Analytics Auto Provisioning: {log_analytics_setting.auto_provision}")

706

707

# Enable auto provisioning

708

auto_provision_config = {

709

"auto_provision": "On"

710

}

711

712

enabled_setting = client.auto_provisioning_settings.create(

713

"default",

714

auto_provision_config

715

)

716

print(f"Auto provisioning enabled: {enabled_setting.auto_provision}")

717

```

718

719

### Workspace Settings Management

720

721

```python

722

# List workspace settings

723

workspace_settings = client.workspace_settings.list()

724

for setting in workspace_settings:

725

print(f"Workspace Setting: {setting.name}")

726

print(f"Workspace ID: {setting.workspace_id}")

727

print(f"Scope: {setting.scope}")

728

729

# Create workspace setting

730

workspace_config = {

731

"workspace_id": "/subscriptions/sub-id/resourceGroups/rg/providers/Microsoft.OperationalInsights/workspaces/security-workspace",

732

"scope": "/subscriptions/sub-id"

733

}

734

735

workspace_setting = client.workspace_settings.create("default", workspace_config)

736

print(f"Workspace configured: {workspace_setting.workspace_id}")

737

738

# Update workspace setting

739

updated_workspace_config = {

740

"workspace_id": "/subscriptions/sub-id/resourceGroups/rg/providers/Microsoft.OperationalInsights/workspaces/new-security-workspace",

741

"scope": "/subscriptions/sub-id"

742

}

743

744

updated_workspace = client.workspace_settings.update("default", updated_workspace_config)

745

print(f"Workspace updated: {updated_workspace.workspace_id}")

746

```

747

748

### Information Protection Policy Management

749

750

```python

751

# List information protection policies

752

scope = "subscriptions/subscription-id"

753

policies = client.information_protection_policies.list(scope)

754

755

for policy in policies:

756

print(f"Policy: {policy.name}")

757

print(f"Version: {policy.version}")

758

print(f"Last Modified: {policy.last_modified_utc}")

759

760

if policy.labels:

761

print(f"Labels: {len(policy.labels)}")

762

for label_id, label in policy.labels.items():

763

print(f" {label_id}: {label.display_name} (Rank: {label.rank})")

764

765

if policy.information_types:

766

print(f"Information Types: {len(policy.information_types)}")

767

for info_type_id, info_type in policy.information_types.items():

768

print(f" {info_type_id}: {info_type.display_name}")

769

770

# Get specific policy

771

specific_policy = client.information_protection_policies.get(scope, "effective")

772

print(f"Effective Policy Labels: {len(specific_policy.labels or {})}")

773

```

774

775

### Sensitivity Settings Configuration

776

777

```python

778

# Get current sensitivity settings

779

sensitivity_settings = client.sensitivity_settings.get()

780

print(f"Sensitivity Info Types: {len(sensitivity_settings.sensitive_info_types_ids or [])}")

781

print(f"Threshold Label ID: {sensitivity_settings.sensitivity_threshold_label_id}")

782

print(f"Threshold Order: {sensitivity_settings.sensitivity_threshold_label_order}")

783

784

# Update sensitivity settings

785

updated_sensitivity = {

786

"sensitive_info_types_ids": [

787

"50842eb7-edc8-4019-85dd-5a5c1f2bb085", # Credit Card Number

788

"a44669fe-0d48-453d-a9b1-2cc83f2cba77", # U.S. Social Security Number

789

"be1daff4-7406-4a0c-8f23-7d0a5217e2a4" # Email Address

790

],

791

"sensitivity_threshold_label_order": 2.0,

792

"sensitivity_threshold_label_id": "confidential-label-id"

793

}

794

795

updated_settings = client.sensitivity_settings.create_or_update(updated_sensitivity)

796

print(f"Updated sensitivity settings with {len(updated_settings.sensitive_info_types_ids)} info types")

797

```

798

799

### Microsoft Defender for Endpoint Integration

800

801

```python

802

# Get MDE onboarding data

803

mde_data = client.mde_onboardings.get()

804

print(f"MDE Onboarding: {mde_data.name}")

805

806

if mde_data.onboarding_package_windows:

807

print("Windows onboarding package available")

808

# Save to file for deployment

809

with open("mde_windows_package.zip", "wb") as f:

810

f.write(mde_data.onboarding_package_windows)

811

812

if mde_data.onboarding_package_linux:

813

print("Linux onboarding package available")

814

# Save to file for deployment

815

with open("mde_linux_package.zip", "wb") as f:

816

f.write(mde_data.onboarding_package_linux)

817

```

818

819

### Security Configuration Dashboard

820

821

```python

822

def create_security_configuration_dashboard():

823

"""Create a comprehensive security configuration dashboard."""

824

825

print("Security Configuration Dashboard")

826

print("=" * 50)

827

828

# Security Settings

829

print("\n1. Security Settings:")

830

settings = client.settings.list()

831

settings_status = {}

832

833

for setting in settings:

834

if hasattr(setting, 'enabled'):

835

settings_status[setting.name] = setting.enabled

836

else:

837

settings_status[setting.name] = "Unknown"

838

839

for name, status in settings_status.items():

840

print(f" {name}: {'✓ Enabled' if status else '✗ Disabled'}")

841

842

# Security Contacts

843

print("\n2. Security Contacts:")

844

contacts = client.security_contacts.list()

845

contact_count = sum(1 for _ in contacts)

846

print(f" Configured Contacts: {contact_count}")

847

848

# Auto Provisioning

849

print("\n3. Auto Provisioning:")

850

auto_settings = client.auto_provisioning_settings.list()

851

auto_enabled = False

852

853

for setting in auto_settings:

854

if setting.auto_provision == "On":

855

auto_enabled = True

856

break

857

858

print(f" Status: {'✓ Enabled' if auto_enabled else '✗ Disabled'}")

859

860

# Workspace Settings

861

print("\n4. Workspace Configuration:")

862

workspace_settings = client.workspace_settings.list()

863

workspace_configured = sum(1 for _ in workspace_settings) > 0

864

print(f" Status: {'✓ Configured' if workspace_configured else '✗ Not Configured'}")

865

866

# Locations

867

print("\n5. Supported Locations:")

868

locations = client.locations.list()

869

location_count = sum(1 for _ in locations)

870

print(f" Available Locations: {location_count}")

871

872

# Configuration Score

873

config_score = 0

874

if settings_status.get("MCAS", False):

875

config_score += 1

876

if settings_status.get("WDATP", False):

877

config_score += 1

878

if contact_count > 0:

879

config_score += 1

880

if auto_enabled:

881

config_score += 1

882

if workspace_configured:

883

config_score += 1

884

885

print(f"\n6. Configuration Health Score: {config_score}/5")

886

887

if config_score >= 4:

888

print(" 🟢 Excellent configuration")

889

elif config_score >= 3:

890

print(" 🟡 Good configuration, minor improvements needed")

891

else:

892

print(" 🔴 Configuration needs attention")

893

894

return {

895

"settings_status": settings_status,

896

"contact_count": contact_count,

897

"auto_provisioning_enabled": auto_enabled,

898

"workspace_configured": workspace_configured,

899

"location_count": location_count,

900

"config_score": config_score

901

}

902

903

# Generate the configuration dashboard

904

config_data = create_security_configuration_dashboard()

905

```