Back to skills
SKILL.md
055 Architecture 581519af
ASecurityThe HealthTech Patient Portal is a modern, cloud-native application built for scalability, security, and compliance with healthcare regulations (HIPAA, HITRUST). This document describes the architecture and component inventory that will be captured in the SBOM.
- 9 stars
- 0 votes
- 0 copies
- 3 views
- Added October 11, 2026
Works with
Security analysis
100/100npx -y skills add tools-only/X-Skills --skill 055-architecture_581519af --agent claude-codeAre you the author of 055 Architecture 581519af?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tools-only-055-architecture-581519af)# Application Architecture: HealthTech Patient Portal
## System Overview
The HealthTech Patient Portal is a modern, cloud-native application built for scalability, security, and compliance with healthcare regulations (HIPAA, HITRUST). This document describes the architecture and component inventory that will be captured in the SBOM.
## High-Level Architecture
```mermaid
%%{init: {'theme':'neutral'}}%%
graph TB
subgraph "User Access"
Patient[Patient Web Browser]
Mobile[Mobile App]
end
subgraph "Azure Cloud"
subgraph "Frontend Tier"
AppService[Azure App Service<br/>React Frontend]
end
subgraph "API Tier"
APIService[Azure App Service<br/>Node.js API<br/>Express + TypeScript]
end
subgraph "Data Tier"
CosmosDB[(Azure Cosmos DB<br/>MongoDB API<br/>Patient Data)]
end
subgraph "Security & Monitoring"
KeyVault[Azure Key Vault<br/>Secrets Management]
AppInsights[Application Insights<br/>Monitoring & Logging]
end
subgraph "Networking"
VNet[Virtual Network<br/>Private Endpoints]
end
end
Patient --> AppService
Mobile --> AppService
AppService --> APIService
APIService --> CosmosDB
APIService --> KeyVault
APIService --> AppInsights
AppService --> AppInsights
CosmosDB -.Private Endpoint.-> VNet
KeyVault -.Private Endpoint.-> VNet
style AppService fill:#0078D4,color:#fff
style APIService fill:#0078D4,color:#fff
style CosmosDB fill:#0078D4,color:#fff
style KeyVault fill:#50E6FF,color:#000
style AppInsights fill:#50E6FF,color:#000
```
## SBOM Scope
The Software Bill of Materials will capture three layers:
### Layer 1: Application Dependencies
**Frontend (React Web App)**:
- React 18.x
- React Router
- Axios (HTTP client)
- TypeScript compiler (devDependency)
- Webpack (bundler)
- ESLint (linting)
- ~15 total npm packages
**Backend (Node.js API)**:
- Express 4.x (web framework)
- Mongoose 8.x (MongoDB ODM)
- @azure/cosmos (Cosmos DB SDK)
- @azure/identity (authentication)
- @azure/keyvault-secrets (Key Vault SDK)
- applicationinsights (Application Insights SDK)
- TypeScript 4.x
- Jest (testing framework)
- ESLint (linting)
- ~25 total npm packages
### Layer 2: Container Components
**Docker Base Image**: `node:20-alpine`
**Alpine Linux Components**:
- Alpine Linux 3.19
- musl libc (C standard library)
- OpenSSL 3.x
- ca-certificates
- ~50 OS packages
**Node.js Runtime**:
- Node.js 20.x LTS
- npm package manager
- V8 JavaScript engine
**Container Layers**:
- Base OS layer
- Node.js runtime layer
- Application code layer
- npm dependencies layer
### Layer 3: Azure Infrastructure
**Compute**:
- **Azure App Service** (Web tier)
- SKU: P1v3 (Premium tier)
- OS: Linux
- Runtime: Node 20 LTS
- API Version: 2023-12-01
- **Azure App Service** (API tier)
- SKU: P1v3 (Premium tier)
- OS: Linux
- Runtime: Node 20 LTS
- API Version: 2023-12-01
**Data**:
- **Azure Cosmos DB**
- API: MongoDB 4.2
- Consistency: Session
- Throughput: Autoscale (400-4000 RU/s)
- API Version: 2023-11-15
**Security**:
- **Azure Key Vault**
- SKU: Standard
- Soft delete enabled
- Purge protection enabled
- API Version: 2023-07-01
**Monitoring**:
- **Application Insights**
- Workspace-based
- Retention: 90 days
- API Version: 2020-02-02
**Networking**:
- **Virtual Network**
- Address space: 10.0.0.0/16
- Subnets: App (10.0.1.0/24), Data (10.0.2.0/24)
- API Version: 2023-09-01
- **Private Endpoints**
- Cosmos DB private endpoint
- Key Vault private endpoint
## Component Inventory
### Critical Components (for SBOM)
| Component | Type | Version | License | Purpose |
|-----------|------|---------|---------|---------|
| **express** | npm | 4.21.2 | MIT | Web framework |
| **mongoose** | npm | 8.9.5 | MIT | Database ODM |
| **@azure/cosmos** | npm | 4.4.1 | MIT | Cosmos DB SDK |
| **@azure/identity** | npm | 4.2.1 | MIT | Azure authentication |
| **@azure/keyvault-secrets** | npm | 4.7.0 | MIT | Key Vault SDK |
| **applicationinsights** | npm | 2.5.1 | MIT | Monitoring |
| **typescript** | npm | 4.7.3 | Apache-2.0 | Type system |
| **node:20-alpine** | container | 20.x | MIT | Runtime base image |
| **Alpine Linux** | OS | 3.19 | Multiple | Container OS |
| **Azure App Service** | cloud | 2023-12-01 | N/A | Web hosting |
| **Azure Cosmos DB** | cloud | 2023-11-15 | N/A | Database |
| **Azure Key Vault** | cloud | 2023-07-01 | N/A | Secrets |
### Dependency Tree
```mermaid
%%{init: {'theme':'neutral'}}%%
graph TB
App[Patient Portal Application]
subgraph "Application Layer"
API[Node.js API]
Web[React Frontend]
end
subgraph "Framework Dependencies"
Express[express 4.21.2]
Mongoose[mongoose 8.9.5]
React[react 18.x]
end
subgraph "Azure SDKs"
CosmosSDK[@azure/cosmos 4.4.1]
IdentitySDK[@azure/identity 4.2.1]
KeyVaultSDK[@azure/keyvault-secrets 4.7.0]
AppInsightsSDK[applicationinsights 2.5.1]
end
subgraph "Runtime"
Node[Node.js 20.x]
Alpine[Alpine Linux 3.19]
end
App --> API
App --> Web
API --> Express
API --> Mongoose
API --> CosmosSDK
API --> IdentitySDK
API --> KeyVaultSDK
API --> AppInsightsSDK
Web --> React
Express --> Node
Mongoose --> Node
CosmosSDK --> Node
Node --> Alpine
style App fill:#0078D4,color:#fff
style API fill:#0078D4,color:#fff
style Node fill:#50E6FF,color:#000
style Alpine fill:#50E6FF,color:#000
```
## Security Considerations for SBOM
### Sensitive Information to Exclude
The SBOM will **NOT** include:
- ❌ Secrets, passwords, connection strings
- ❌ API keys or authentication tokens
- ❌ Internal IP addresses or hostnames
- ❌ Customer data or PHI
- ❌ Proprietary business logic
- ❌ Configuration values with security implications
### Information to Include
The SBOM **WILL** include:
- ✅ Component names and versions
- ✅ License information (MIT, Apache, etc.)
- ✅ Package URLs (PURLs) for identification
- ✅ Component types (library, framework, application)
- ✅ Relationships and dependencies
- ✅ Azure resource types and API versions
- ✅ Base image information (public images only)
## Data Flow for SBOM Generation
```mermaid
%%{init: {'theme':'neutral'}}%%
graph LR
subgraph "Source Data"
PkgJSON[package.json<br/>npm dependencies]
Dockerfile[Dockerfile<br/>Container spec]
Bicep[Bicep Templates<br/>IaC definitions]
AzureRG[Azure Resources<br/>Deployed infrastructure]
end
subgraph "SBOM Scanners"
Scanner1[New-ApplicationSBOM.ps1]
Scanner2[New-ContainerSBOM.ps1]
Scanner3[New-InfrastructureSBOM.ps1]
end
subgraph "SBOM Documents"
SBOM1[application-sbom.json<br/>CycloneDX]
SBOM2[container-sbom.json<br/>CycloneDX]
SBOM3[infrastructure-sbom.json<br/>CycloneDX]
end
subgraph "Unified Output"
Merge[Merge-SBOMDocuments.ps1]
Final[merged-sbom.json<br/>Complete SBOM]
Report[sbom-report.html<br/>Human-readable]
end
PkgJSON --> Scanner1
Dockerfile --> Scanner2
Bicep --> Scanner3
AzureRG --> Scanner3
Scanner1 --> SBOM1
Scanner2 --> SBOM2
Scanner3 --> SBOM3
SBOM1 --> Merge
SBOM2 --> Merge
SBOM3 --> Merge
Merge --> Final
Final --> Report
style Final fill:#0078D4,color:#fff
style Report fill:#50E6FF,color:#000
```
## SBOM Use Cases
### 1. Vulnerability Management
**Scenario**: Log4j vulnerability (CVE-2021-44228) disclosed
**Without SBOM**:
- Manual review of all applications (3 days)
- Check each package.json file
- Search for "log4j" (but it's Java, not Node.js)
- Still uncertain about nested dependencies
**With SBOM**:
```powershell
# Query all SBOMs for vulnerable component
Get-ChildItem -Recurse -Filter "*-sbom.json" |
Select-String "log4j" |
Select-Object -Property Path
```
- Result in 15 minutes
- Confirm Node.js app not affected
- Provide evidence to customers same day
### 2. License Compliance
**Scenario**: Legal review for M&A due diligence
**Required**: Identify all GPL-licensed components (copyleft implications)
**SBOM Query**:
```powershell
# Extract all components with GPL licenses
$sbom = Get-Content merged-sbom.json | ConvertFrom-Json
$sbom.components | Where-Object { $_.licenses -like "*GPL*" } |
Select-Object name, version, @{N='License';E={$_.licenses.license.id}}
```
**Output**: Clear list of GPL components for legal review
### 3. Customer Security Questionnaire
**Question**: "Provide a list of all third-party software components and their versions"
**Response**: Attach `sbom-report.html` (professional, comprehensive, generated in minutes)
**Customer Confidence**: Demonstrates mature software supply chain management
### 4. Regulatory Audit (SOC2, HITRUST)
**Auditor Request**: "Show evidence of component tracking and vulnerability management"
**Evidence Package**:
- Quarterly SBOMs (version controlled in Git)
- Comparison reports (component changes over time)
- Vulnerability scan results linked to SBOM
- Remediation tracking (patched components)
**Audit Result**: No findings (control meets requirements)
## Architecture Benefits for SBOM
1. **Cloud-Native**: Azure Resource Graph provides infrastructure inventory API
2. **Containerized**: Docker layer inspection captures OS dependencies
3. **Modern Stack**: Node.js/npm has excellent SBOM tooling support
4. **Azure SDKs**: Official Microsoft packages with clear versioning
5. **Infrastructure as Code**: Bicep templates document intended state
6. **Monitoring**: Application Insights tracks deployed versions
## Component Update Frequency
| Layer | Update Frequency | SBOM Impact |
|-------|------------------|-------------|
| **npm packages** | Monthly (security patches) | High - regenerate SBOM |
| **Container base image** | Quarterly (Node.js LTS) | Medium - new OS packages |
| **Azure resources** | Rarely (SKU changes) | Low - stable API versions |
| **Application code** | Weekly (feature releases) | None - not in SBOM |
**Recommendation**: Generate SBOM on every production deployment (CI/CD integration)
---
## SBOM Metadata
When generating the SBOM, include these metadata fields:
**Organization**:
- Name: HealthTech Solutions Inc.
- URL: https://healthtechsolutions.example.com
- Contact: security@healthtechsolutions.example.com
**Application**:
- Name: Patient Portal
- Version: From Git tag (e.g., v2.5.1)
- Description: Healthcare patient engagement platform
**Timestamp**: ISO 8601 format (e.g., 2025-11-18T10:30:00Z)
**Tools Used**:
- Generator: Custom PowerShell scripts with GitHub Copilot
- Format: CycloneDX 1.5
- Specification: https://cyclonedx.org/specification/overview/
---
**Document Owner**: Architecture Team
**Contributors**: Security, DevOps, Compliance
**Last Updated**: November 18, 2025
**Review Cycle**: Quarterly or when major architecture changes occur
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.