# SecureCart Journey

SecureCart is an **AWS-native e-commerce platform** that prioritizes **security, scalability, and resilience** across all workloads. As SecureCart expands, **securing workloads and applications** becomes a top priority to protect customer data, maintain compliance, and prevent unauthorized access.

This section focuses on **how SecureCart secures its applications and workloads** in AWS by leveraging AWS security best practices, secure network configurations, and access control mechanisms.

***

## **Secure Application Configuration & Credentials**

**Goal:** Prevent credential leaks and unauthorized access to configuration data.

#### **Implementation**

* **Use AWS Secrets Manager** to store sensitive data such as
  * Database credentials (Amazon RDS PostgreSQL)
  * API keys for payment gateways
  * OAuth tokens for third-party services
* **IAM Role-based access** ensures that
  * Only authorized applications retrieve secrets.
  * Developers do not have direct access to production secrets.
* **AWS Systems Manager Parameter Store** manages **non-sensitive application configurations** securely.

**Use Case:** SecureCart’s ECS Fargate tasks retrieve RDS credentials from AWS Secrets Manager, ensuring credentials are never stored in application code.

***

### **Implement Network Segmentation & Security**

**Goal:** Enforce network-level security to isolate workloads and minimize exposure.

#### **Implementation**

* **VPC Architecture & Segmentation**
  * **Public Subnets** → Only for Load Balancers (ALB) and API Gateway.
  * **Private Subnets** → Application servers, RDS databases, and backend services.
* **Security Groups**
  * Restrict inbound/outbound access for each application component.

#### **Security Group Rules for SecureCart Components**

| **Component**                       | **Traffic Type** | **Source**                     | **Port Range** | **Direction** | **Purpose**                                            |
| ----------------------------------- | ---------------- | ------------------------------ | -------------- | ------------- | ------------------------------------------------------ |
| **Application Load Balancer (ALB)** | HTTP/HTTPS       | 0.0.0.0/0 (Public)             | 80, 443        | Inbound       | Accepts web traffic from customers.                    |
| **Application Load Balancer (ALB)** | HTTP/HTTPS       | VPC CIDR                       | 80, 443        | Outbound      | Sends traffic to backend services.                     |
| **ECS/EC2 Backend Services**        | HTTP             | ALB Security Group             | 8080           | Inbound       | Only allows traffic from ALB.                          |
| **ECS/EC2 Backend Services**        | Database         | RDS Security Group             | 5432           | Inbound       | Allows backend services to connect to RDS.             |
| **ECS/EC2 Backend Services**        | All              | Internet                       | Deny           | Inbound       | Blocks direct internet access.                         |
| **ECS/EC2 Backend Services**        | HTTPS            | S3 (AWS Services)              | 443            | Outbound      | Allows secure connection to AWS services like S3.      |
| **Amazon RDS (PostgreSQL)**         | Database         | ECS/EC2 Backend Security Group | 5432           | Inbound       | Ensures only backend services can access the database. |
| **Amazon RDS (PostgreSQL)**         | All              | Internet                       | Deny           | Inbound       | Blocks unauthorized direct database access.            |
| **Lambda Functions**                | HTTPS            | Internet                       | 443            | Outbound      | Allows Lambda to interact with AWS APIs securely.      |

* **Network ACLs (NACLs)**
  * Provide additional filtering for subnet-level control.

#### **Network ACL (NACL) Rules for SecureCart Subnets**

| **Rule #** | **Subnet Type**                           | **Traffic Type** | **Source/Destination** | **Port Range** | **Direction** | **Action** | **Purpose**                                               |
| ---------- | ----------------------------------------- | ---------------- | ---------------------- | -------------- | ------------- | ---------- | --------------------------------------------------------- |
| 100        | **Public Subnet (ALB)**                   | HTTP/HTTPS       | 0.0.0.0/0 (Internet)   | 80, 443        | Inbound       | Allow      | Allows public web traffic to ALB.                         |
| 110        | **Public Subnet (ALB)**                   | All              | 0.0.0.0/0              | All            | Inbound       | Deny       | Blocks all other inbound traffic.                         |
| 120        | **Public Subnet (ALB)**                   | HTTP/HTTPS       | VPC CIDR               | 80, 443        | Outbound      | Allow      | Allows traffic to backend services.                       |
| 130        | **Public Subnet (ALB)**                   | All              | 0.0.0.0/0              | All            | Outbound      | Deny       | Blocks unintended outbound traffic.                       |
| 200        | **Private Subnet (ECS/Backend Services)** | HTTP             | Public Subnet (ALB)    | 8080           | Inbound       | Allow      | Allows ALB to send traffic to backend services.           |
| 210        | **Private Subnet (ECS/Backend Services)** | Database         | Database Subnet        | 5432           | Inbound       | Allow      | Allows backend services to connect to RDS.                |
| 220        | **Private Subnet (ECS/Backend Services)** | All              | 0.0.0.0/0              | All            | Inbound       | Deny       | Blocks all other inbound traffic.                         |
| 230        | **Private Subnet (ECS/Backend Services)** | HTTPS            | 0.0.0.0/0              | 443            | Outbound      | Allow      | Allows secure AWS API access (e.g., S3, Secrets Manager). |
| 300        | **Database Subnet (RDS)**                 | Database         | Private Subnet (ECS)   | 5432           | Inbound       | Allow      | Ensures only backend services can access the database.    |
| 310        | **Database Subnet (RDS)**                 | All              | 0.0.0.0/0              | All            | Inbound       | Deny       | Blocks unauthorized database access.                      |
| 320        | **Database Subnet (RDS)**                 | All              | 0.0.0.0/0              | All            | Outbound      | Deny       | Prevents unintended outbound connections.                 |

* **AWS WAF (Web Application Firewall)**
  * Protects API Gateway and ALB from attacks like SQL Injection and XSS.

The following **AWS WAF rule set** is applied to **SecureCart’s ALB and API Gateway**.

| **Rule Name**                            | **Type**           | **Action**                       | **Purpose**                                                   |
| ---------------------------------------- | ------------------ | -------------------------------- | ------------------------------------------------------------- |
| Block SQL Injection                      | AWS Managed Rule   | Block                            | Prevents SQL Injection attempts targeting API requests.       |
| Block XSS Attacks                        | AWS Managed Rule   | Block                            | Protects against JavaScript injection in web forms.           |
| Rate Limiting                            | Rate-Based Rule    | Block if > 100 requests in 5 min | Prevents bot-driven brute force attacks.                      |
| Block Known Malicious IPs                | IP Reputation List | Block                            | Uses AWS Threat Intelligence feeds to block malicious actors. |
| Block Requests from Unapproved Countries | Geo-Blocking       | Block                            | Restricts access to SecureCart’s API to U.S. and Europe only. |

**AWS WAF automatically updates managed rulesets**, ensuring **continuous protection** against evolving threats.

* **AWS Shield**
  * Defends SecureCart against **DDoS attacks** on its public endpoints.

**Use Case:** SecureCart’s **RDS database is placed in a private subnet**, ensuring **only ECS tasks** can connect through **Security Groups** and blocking all external access.

***

### **Enforce Secure Application Access**

**Goal:** Implement strong authentication and authorization mechanisms to prevent unauthorized access.

#### **Implementation**

* **Amazon Cognito for Authentication**
  * SecureCart customers authenticate via **Cognito User Pools** before accessing the platform.
* **IAM Role-based Access for Services**
  * **ECS tasks assume IAM roles** to interact with S3 and DynamoDB.
  * **Lambda functions assume roles** to process customer orders securely.
* **API Gateway Authorization**
  * Enforces **Cognito-based authentication** for API endpoints.

**Use Case:** SecureCart’s **API Gateway allows only authenticated Cognito users** to fetch order history, ensuring **unauthorized requests are blocked**.

***

### **Protecting Workloads from External Threats**

**Goal:** Detect, prevent, and mitigate security threats targeting SecureCart’s workloads.

#### **Implementation**

* **AWS GuardDuty**
  * Monitors for **anomalous API calls, unauthorized access attempts, and data exfiltration**.
* **AWS WAF Rules**
  * Blocks **malicious traffic** such as SQL Injection and XSS attacks.
* **AWS Config**
  * Ensures compliance by checking security settings (e.g., **encrypted S3 buckets, security group rules**).
* **AWS CloudTrail**
  * Logs every API request for **security auditing and investigation**.

**Use Case:** If **AWS GuardDuty detects a brute-force attack**, SecureCart **automatically updates WAF rules** to block the attacker’s IP.

***

### **Automating Security & Compliance**

**Goal:** Continuously enforce security controls and automatically respond to threats.

#### **Implementation**

* **AWS Security Hub**
  * Centralizes security findings across **GuardDuty, AWS Config, and IAM Access Analyzer**.
* **AWS Lambda for Automated Security Remediation**
  * Automatically revokes excessive permissions when detected.
  * Disables unused IAM access keys.
* **IAM Access Analyzer**
  * Identifies unintended public access to resources.
* **AWS Config Rules**
  * Ensures encryption is enabled for **S3, RDS, and EBS volumes**.

**Use Case:** SecureCart enforces **automatic encryption** for **new S3 buckets** using an **AWS Config rule**, preventing misconfigurations.
