HIPAA violations cost US healthcare organizations over $135 million in OCR penalties in 2024. The leading cause was not
malicious attacks - it was misconfigured cloud infrastructure and inadequate access controls on systems hosting PHI.
This checklist is designed to prevent every item on that list.
Before We Start: The Shared Responsibility Model
The most dangerous misconception in healthcare cloud is this: "We're hosting on AWS/Azure/GCP, so we're HIPAA compliant." You are not. Cloud providers operate a shared responsibility model for HIPAA:
- Cloud provider is responsible for: Physical data center security, hardware, hypervisor, network infrastructure, and the security of cloud services themselves
- You are responsible for: Application security, data classification, access controls, encryption key management, audit logging configuration, staff training, policies and procedures, and everything your application does with PHI
A misconfigured S3 bucket that publicly exposes patient records is a HIPAA violation, even though AWS is HIPAA-eligible infrastructure. The BAA (Business Associate Agreement) does not protect you from your own misconfigurations.
1. Business Associate Agreements (BAA)
A BAA is a legally required contract between your covered entity and any vendor that creates, receives, maintains, or transmits PHI on your behalf. You must have signed BAAs in place before any PHI touches these systems:
- Cloud provider: AWS, Azure, or GCP - all offer HIPAA BAAs for their HIPAA-eligible services. AWS
does not cover all services; ensure your specific services (EC2, RDS, S3, EBS, CloudTrail) are listed in the AWS HIPAA
Eligible Services list.
- Managed hosting provider: If a managed service provider (such as AnueraTech) manages your OpenEMR infrastructure, they are your Business Associate and must sign a BAA.
- Email providers: If PHI is transmitted over email (even in encrypted form), your email provider must sign a BAA. Standard Gmail and Outlook are not HIPAA-compliant without a BAA and appropriate configuration.
- Third-party integrations: Any API service, analytics platform, or SaaS tool that receives PHI -
including AI services processing clinical notes - must have a signed BAA.
- Backup providers: If you use a separate service for backup storage, that vendor must also sign a BAA.
Checklist item: Maintain a Business Associate inventory - a documented list of all vendors with signed BAAs, the date
signed, the services covered, and the renewal/review date. Review this annually and whenever you add a new vendor.
2. Encryption at Rest
HIPAA requires that PHI stored on any medium be protected against unauthorized access. In cloud environments, this means encryption at rest for every storage layer that touches PHI:
Database Encryption
- Enable Transparent Data Encryption (TDE) on your MySQL/MariaDB RDS instance (AWS: encrypt at creation using AES-256; this cannot be retroactively added to an existing unencrypted instance)
- Enable encryption for read replicas - encryption does not propagate automatically to replicas created from an
unencrypted snapshot
- OpenEMR application-level encryption: use OpenEMR's built-in Patient Notes encryption for particularly sensitive fields
Storage Encryption
- Enable server-side encryption (SSE-KMS) on all S3 buckets storing PHI - never use SSE-S3 alone for
HIPAA workloads, as it does not allow key rotation control
- Encrypt EBS volumes attached to EC2 instances hosting OpenEMR
- DICOM imaging storage: enable encryption on your PACS storage (whether S3-based or dedicated PACS system)
- Temporary files: ensure /tmp directories on application servers are on encrypted volumes - application processing
often writes PHI fragments to temp files
Key Management
- Use AWS KMS, Azure Key Vault, or Google Cloud KMS for encryption key management - never hard-code encryption keys in
application config files
- Enable automatic key rotation (annual minimum)
- Restrict KMS key access to the minimum required IAM roles
- Log all KMS API calls via CloudTrail
3. Encryption in Transit
All PHI in transit - between the browser and the server, between microservices, between the application and the
database, and between your system and external integrations (HL7, FHIR R4, ABDM) - must be encrypted:
- Enforce TLS 1.3 on all HTTPS endpoints; disable TLS 1.0 and TLS 1.1 at the load balancer/web server level
- Configure HSTS (HTTP Strict Transport Security) with a max-age of at least 1 year and includeSubDomains
- Encrypt database connections: configure OpenEMR's MySQL connection to require SSL/TLS (use `REQUIRE SSL` in MySQL user grants and pass SSL cert/key parameters in the OpenEMR database configuration)
- HL7 v2.x messages transmitted via MLLP must use MLLP over TLS (SMLLP) - plain MLLP over TCP is not HIPAA-compliant
- FHIR R4 API calls to ABDM and other endpoints must use HTTPS with certificate validation enabled
- Certificate management: use automated certificate renewal (AWS ACM or Let's Encrypt with auto-renewal) - expired
certificates are a common cause of accidental plaintext transmission
4. Access Controls and Identity Management
HIPAA's Access Control standard (§164.312(a)(1)) requires that PHI access be limited to authorized users with a documented minimum necessary standard. In cloud environments:
Identity and Authentication
- Enforce Multi-Factor Authentication (MFA) for all accounts with access to PHI - cloud console, VPN,
SSH, and OpenEMR admin accounts. MFA cannot be optional for HIPAA-covered workloads.
- Implement least-privilege IAM: each application component has its own IAM role with only the permissions it needs. The OpenEMR web server should not have S3 list permissions on your entire bucket hierarchy.
- Disable root/admin account routine use: the cloud account root user should only be used for account recovery. All routine administrative tasks use named IAM users or roles.
- Implement password policies on OpenEMR: minimum 12 characters, complexity requirements, 90-day expiration, account lockout after 5 failed attempts, no reuse of last 12 passwords.
- Implement role-based access control (RBAC) in OpenEMR: physicians see only their patients, front
desk sees scheduling and demographics, billing sees financial records - use OpenEMR's Access Controls under
Administration → ACL.
Network Access Controls
- Database servers must not be publicly accessible - place RDS instances in private subnets with no internet-facing
security group rules
- OpenEMR application servers: restrict SSH access to your organization's VPN IP ranges only
- Use VPC security groups with deny-by-default; only explicitly allow required ports (443 for HTTPS, 3306 only from application server security group to database security group)
- Enable VPC Flow Logs for network traffic auditing
5. Audit Logging
HIPAA's Audit Controls standard (§164.312(b)) requires that all access to PHI be logged with sufficient detail to reconstruct who accessed what, when, and from where. This is non-negotiable for HIPAA cloud deployments:
Application-Level Audit Logging (OpenEMR)
- Enable OpenEMR's audit logging under Administration → Globals → Logging
- Log: all patient record views, edits, prescription access, report generation, and administrative changes
- Log fields must include: user ID, patient ID, action type, timestamp (UTC), IP address, and session ID
- Audit logs must be immutable - write to a separate log storage system (CloudWatch Logs, ELK Stack) that the
application cannot modify or delete
- Retain audit logs for a minimum of 6 years (HIPAA documentation retention requirement)
Infrastructure Audit Logging
- Enable AWS CloudTrail across all regions with log file validation (ensures log tamper detection)
- Enable CloudWatch Logs for EC2 instances (system logs, Apache access logs, application error logs)
- Enable RDS enhanced monitoring and database-level audit logs (MySQL general query log for HIPAA deployments, though note the performance overhead)
- Set CloudWatch Alarms for: failed login attempts, root account usage, security group changes, S3 bucket policy changes, and KMS key deletion
6. Backup and Disaster Recovery
HIPAA's Contingency Plan standard (§164.308(a)(7)) requires documented procedures for backup, disaster recovery, and emergency mode operations. For cloud-hosted OpenEMR:
Backup Requirements
- Automated daily backups: Enable automated RDS snapshots with a minimum 35-day retention period
- Point-in-time recovery (PITR): Enable binary logging on RDS for point-in-time restore capability (minimum RPO of 5 minutes)
- Cross-region backup replication: Copy daily snapshots to a secondary AWS region (e.g., ap-south-1 primary → ap-southeast-1 secondary for Indian deployments). Geographically separate backups are required.
- Application data backup: Back up OpenEMR's /sites directory (includes uploaded documents, custom forms, reports) to S3 with versioning enabled and a separate bucket policy that prevents deletion
- Backup encryption: All backups must be AES-256 encrypted using your KMS CMK
Disaster Recovery Testing
- Document your RTO (Recovery Time Objective) and RPO (Recovery Point Objective) - most HIPAA-covered clinical
operations require RTO ≤ 4 hours and RPO ≤ 1 hour
- Conduct a full restore test from backup at least quarterly - not just monthly backup verification,
but an actual restore to a test environment with validation that the application functions correctly
- Document test results, date, personnel involved, and any issues encountered
- Test your emergency mode operations: can your team continue critical patient care if the primary system is unavailable for 4 hours? Document the manual fallback procedures.
7. FHIR R4 API Security
As healthcare organizations adopt FHIR R4 for interoperability - including ABDM integration in India, CMS
Interoperability Rule compliance in the US, and HL7 SMART on FHIR patient portal access - securing the FHIR API
becomes a critical HIPAA control surface:
- All FHIR R4 API endpoints must use OAuth 2.0 with PKCE for authorization; never expose unauthenticated FHIR endpoints
- Implement FHIR scopes at the resource level - patient/*.read, user/Observation.read - never grant
system/*.* scope unless specifically required and documented
- Rate limit FHIR API endpoints: implement throttling to prevent bulk PHI extraction (≤100 requests/minute per OAuth client)
- Log all FHIR API calls to your immutable audit log (patient resource ID, requesting client ID, FHIR resource type accessed, timestamp)
- For ABDM HIP/HIU integration: ensure ABDM health records are exchanged only with patient consent artifacts verified against the HIU's registered OAuth token
- API gateway: deploy a WAF (Web Application Firewall) in front of your FHIR endpoint to block injection attacks against FHIR search parameters
8. Breach Notification Readiness
HIPAA's Breach Notification Rule (45 CFR §164.400–414) requires covered entities to notify affected individuals, HHS, and in some cases the media within 60 days of discovering a breach. Being ready before a breach occurs is the difference between a managed incident and a regulatory crisis:
Breach Detection
- Configure AWS GuardDuty (or equivalent) for anomaly detection: unusual data access patterns, API calls from unexpected regions, suspicious IAM activity, cryptocurrency mining (often precursor to ransomware)
- Set up CloudWatch alarms for: bulk S3 download events, multiple failed database queries, unusual after-hours OpenEMR login activity, OpenEMR admin account usage outside business hours
- Implement a Security Information and Event Management (SIEM) system that aggregates CloudTrail, VPC Flow Logs, OpenEMR audit logs, and application logs into a unified alert dashboard
Incident Response Plan
- Document your incident response plan with: detection and reporting procedures, roles and responsibilities, containment steps, evidence preservation, notification workflow, and post-incident review
- Designate a HIPAA Privacy Officer and Security Officer - both are required roles for covered entities
- Maintain contact information for: your cloud provider's security team, your HIPAA legal counsel, your cyber insurance carrier, and HHS Office for Civil Rights (OCR)
- Test your incident response plan annually with a tabletop exercise
Notification Timelines
- Affected individuals: Written notification within 60 days of breach discovery
- HHS: Breaches affecting 500+ individuals - notify HHS within 60 days and report to media. Breaches
affecting <500 individuals - log and submit annual report within 60 days of calendar year end.
- Media: Required when 500+ residents of a single state or jurisdiction are affected
HIPAA Compliance vs. Indian Healthcare Compliance
For healthcare organizations operating in India (under ABDM, NMC telemedicine guidelines, and the DPDP Act 2023),
HIPAA compliance is not legally required - but it serves as an excellent baseline for implementing strong PHI
protections. Indian healthcare organizations should additionally ensure:
- ABDM Health Data Management Policy: Patient consent for health data sharing, ABHA-linked health records stored in India, FHIR R4-compliant structured health records
- DPDP Act 2023: Consent management, data minimization, purpose limitation, data principal rights (access, correction, erasure)
- NABH standards: Information management and patient confidentiality requirements for NABH-accredited hospitals
- NMC Telemedicine Guidelines: Patient consent, clinical data retention (3 years minimum), teleconsultation documentation requirements
HIPAA-Compliant Cloud Hosting for OpenEMR
AnueraTech handles every item on this checklist for you - signed BAA, AES-256 encryption
at rest and in transit, MFA enforcement, 6-year audit log retention, cross-region backup with quarterly restore
testing, ABDM integration, and 24/7 security monitoring. Your team focuses on patient care; we handle compliance
infrastructure.
Frequently Asked Questions
Does AWS, Azure, or Google Cloud automatically make my healthcare app HIPAA compliant?
No. Cloud providers offer HIPAA-eligible services and will sign a Business Associate Agreement (BAA), but HIPAA compliance is a shared responsibility. The cloud provider secures the underlying infrastructure; you are responsible for securing your application, configuring services correctly, managing access controls, implementing audit logging, encrypting PHI, training staff, and maintaining policies and procedures. A misconfigured S3 bucket that exposes patient records is a HIPAA violation even on AWS infrastructure.
What encryption does HIPAA require for healthcare data in the cloud?
HIPAA does not specify an encryption standard by name - it requires 'appropriate' encryption. In practice, HHS
guidance and NIST SP 800-111 recommend AES-256 for data at rest and TLS 1.2+ (TLS 1.3 preferred) for data in transit.
For cloud databases hosting PHI (OpenEMR's MySQL/MariaDB on RDS), enable Transparent Data Encryption. For backups, use
AES-256 encrypted snapshots with KMS-managed keys, stored in a geographically separate region.
What is a Business Associate Agreement and do I need one for cloud hosting?
A Business Associate Agreement (BAA) is a legally required contract between a HIPAA-covered entity and any vendor
that creates, receives, maintains, or transmits PHI on your behalf. If you host OpenEMR or any healthcare application
on AWS, Azure, or GCP - or use any third-party service that processes patient data - you must have a signed BAA with
that provider before any PHI is stored or transmitted. AnueraTech signs BAAs with all clients hosting HIPAA-covered
workloads.
How quickly must a HIPAA breach be reported?
Under HIPAA's Breach Notification Rule, covered entities must notify affected individuals within 60 days of
discovering a breach. Breaches affecting 500+ individuals in a single state require media notification within 60 days.
All breaches must be reported to HHS - large breaches (500+) immediately within 60 days; small breaches (<500) in
an annual log submitted within 60 days of the calendar year end.