Skip to content

SquidRings1/projet_final-devsecops

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

100 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

GoCyc DevSecOps Infrastructure

Repository Branch

A production-grade Infrastructure-as-Code (IaC) project implementing a comprehensive DevSecOps infrastructure on AWS. This repository contains Terraform configurations for deploying containerized Laravel applications with complete monitoring, logging, and security controls.

πŸ“‹ Table of Contents


Overview

GoCyc DevSecOps is a complete infrastructure platform for deploying containerized applications on AWS using Terraform. It includes:

  • Container Orchestration: Amazon ECS with EC2 launch type
  • Database Management: Secure MariaDB RDS instance
  • Observability Stack: Prometheus, Grafana, and Loki for metrics and logs
  • Security: IAM roles, encrypted secrets, private networks
  • Infrastructure-as-Code: Fully reproducible Terraform configurations
  • Multi-Environment Support: Separate dev and production configurations

Key Technologies

Component Technology Version
IaC Terraform v1.0+
Container Registry AWS ECR -
Container Orchestration AWS ECS EC2 Launch Type
Database MariaDB 11.4
Metrics Prometheus Latest
Visualization Grafana Latest
Logs Loki Latest
Cloud Provider AWS eu-west-3

Quick Start

1️⃣ Prerequisites

# Verify installations
terraform version          # v1.0+
aws --version             # v2.x+
git --version

For detailed prerequisites, see Prerequisites Section

2️⃣ Configure AWS Credentials

aws configure
# Enter your AWS Access Key ID, Secret Access Key, and set region to eu-west-3

3️⃣ Deploy Bootstrap Infrastructure

./deploy_bootstrap.sh
# Creates: S3 backend, ECR repositories, IAM roles
# Duration: 3-5 minutes

4️⃣ Deploy Main Infrastructure

./deploy_infra.sh
# Creates: VPC, ECS, RDS, Monitoring stack
# Duration: 15-20 minutes

5️⃣ Access Your Infrastructure

# Get Grafana IP
aws ec2 describe-instances --region eu-west-3 --query 'Reservations[0].Instances[0].PublicIpAddress'

# Open browser: http://<monitoring-ip>

For step-by-step deployment guide, see TECHNICAL.md β†’ Deployment Guide


Key Features

πŸ—οΈ Infrastructure

  • Multi-layer Networking: Public, private, and isolated subnets across 2 availability zones
  • High Availability: Distributed across multiple AZs for fault tolerance
  • Secure Connectivity: NAT gateways for private outbound access
  • Flexible Scaling: Ready for auto-scaling group configuration

πŸ“¦ Container Management

  • ECR Registries: Separate repositories for API and Admin services
  • Image Scanning: Automatic scanning on push for vulnerabilities
  • Task Definitions: Pre-configured for Laravel applications
  • Port Mapping: Container 8080 β†’ Host 80 (bridge networking)

πŸ—„οΈ Database

  • Managed RDS: MariaDB 11.4 with automatic maintenance
  • Encryption: Storage encryption enabled with AWS KMS
  • Isolation: Database in private, isolated subnets
  • Backup: Automated snapshots for disaster recovery

πŸ“Š Monitoring & Observability

  • Metrics: Prometheus scrapes container and system metrics
  • Visualization: Pre-configured Grafana dashboards
  • Logs: Loki aggregates logs from all containers
  • cAdvisor: Container runtime metrics collection

πŸ”’ Security

  • Secrets Management: AWS Systems Manager Parameter Store for credentials
  • IAM Roles: Principle of least privilege for all services
  • Encryption: In-transit (TLS) and at-rest (KMS)
  • Network Isolation: Security groups implement defense in depth

πŸ”„ State Management

  • Remote State: Terraform state stored in encrypted S3
  • Versioning: State history for rollback capability
  • Locking: DynamoDB-based state locking for team collaboration

Architecture

System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    AWS Cloud                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚              VPC (10.0.0.0/16)               β”‚  β”‚
β”‚  β”‚                                               β”‚  β”‚
β”‚  β”‚  Public: EC2 Monitoring                      β”‚  β”‚
β”‚  β”‚  Private: ECS Container Tasks                β”‚  β”‚
β”‚  β”‚  Isolated: MariaDB RDS                       β”‚  β”‚
β”‚  β”‚                                               β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚  β”‚
β”‚  β”‚  β”‚  ECS Cluster                         β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  β”œβ”€ Service API (Laravel)            β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  └─ Service Admin (Laravel)          β”‚   β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚  β”‚
β”‚  β”‚                                               β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚  β”‚
β”‚  β”‚  β”‚  Monitoring Stack (EC2)              β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  β”œβ”€ Prometheus (metrics)             β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  β”œβ”€ Grafana (dashboards)             β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  └─ Loki (logs)                      β”‚   β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚  β”‚
β”‚  β”‚                                               β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚  β”‚
β”‚  β”‚  β”‚  MariaDB RDS Instance                β”‚   β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚           ↓                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  S3 Backend (Terraform State)                β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

For detailed architecture diagrams, see TECHNICAL.md β†’ Architecture


Project Structure

projet_final-devsecops/
β”œβ”€β”€ README.md                    # This file
β”œβ”€β”€ TECHNICAL.md                 # Comprehensive technical documentation
β”œβ”€β”€ deploy_bootstrap.sh          # Bootstrap phase deployment script
β”œβ”€β”€ deploy_infra.sh              # Main infrastructure deployment script
β”‚
β”œβ”€β”€ bootstrap/                   # Phase 1: State backend & core resources
β”‚   β”œβ”€β”€ main.tf                  # S3 backend, ECR, IAM roles
β”‚   β”œβ”€β”€ variables.tf             # Input variables
β”‚   β”œβ”€β”€ outputs.tf               # Output values
β”‚   β”œβ”€β”€ env/
β”‚   β”‚   β”œβ”€β”€ dev/terraform.tfvars
β”‚   β”‚   └── prd/terraform.tfvars
β”‚   └── modules/
β”‚       β”œβ”€β”€ S3/                  # S3 bucket for state
β”‚       └── ECR/                 # ECR repositories
β”‚
└── terraform/                   # Phase 2: Main infrastructure
    β”œβ”€β”€ main.tf                  # Main configuration & modules
    β”œβ”€β”€ variables.tf             # Input variables
    β”œβ”€β”€ outputs.tf               # Output values
    β”œβ”€β”€ env/
    β”‚   β”œβ”€β”€ dev/
    β”‚   β”‚   β”œβ”€β”€ backend.tfbackend
    β”‚   β”‚   └── terraform.tfvars
    β”‚   └── prd/
    β”‚       β”œβ”€β”€ backend.tfbackend
    β”‚       └── terraform.tfvars
    └── modules/
        β”œβ”€β”€ network/             # VPC, subnets, routing
        β”œβ”€β”€ IAM/                 # Roles, policies, profiles
        β”œβ”€β”€ EC2/                 # Monitoring instance
        β”œβ”€β”€ ECS/                 # Cluster, task definitions
        β”œβ”€β”€ RDS/                 # MariaDB database
        └── monitoring/          # Prometheus, Grafana, Loki

For complete directory structure, see TECHNICAL.md β†’ Directory Structure


Prerequisites

Required Tools

  • Terraform: v1.0 or higher (Install)
  • AWS CLI: v2.x (Install)
  • Git: For version control
  • Bash: Shell interpreter

AWS Account Setup

  1. Create AWS account or use existing one
  2. Generate Access Key and Secret Key
  3. Configure AWS CLI:
    aws configure
    # Region: eu-west-3
    # Output: json

AWS Permissions Required

  • EC2, VPC, Subnets, Security Groups
  • RDS (MariaDB)
  • ECS, ECR
  • IAM (Roles, Policies, Instance Profiles)
  • S3, KMS, Systems Manager
  • CloudWatch Logs

For detailed prerequisites, see TECHNICAL.md β†’ Prerequisites


Deployment

One-Command Deployment (Recommended)

# Step 1: Bootstrap
./deploy_bootstrap.sh

# Step 2: Main Infrastructure  
./deploy_infra.sh

Manual Deployment

# Bootstrap Phase
cd bootstrap
terraform fmt
terraform init
terraform apply -var-file=env/dev/terraform.tfvars -auto-approve

# Main Infrastructure Phase
cd ../terraform
terraform fmt
terraform init -backend-config=env/dev/backend.tfbackend
terraform apply -var-file=env/dev/terraform.tfvars -auto-approve

Verify Deployment

# Check ECS cluster
aws ecs list-clusters --region eu-west-3

# Check RDS instance
aws rds describe-db-instances --region eu-west-3

# Check EC2 instances
aws ec2 describe-instances --region eu-west-3

For detailed deployment steps, see TECHNICAL.md β†’ Deployment Guide


Documentation

This repository includes comprehensive documentation:

Document Purpose Link
TECHNICAL.md Complete technical reference View
Architecture System design & diagrams View
Modules Detailed module documentation View
Deployment Step-by-step deployment guide View
Troubleshooting Common issues & solutions View
Commands Reference Useful Terraform & AWS CLI commands View

Quick Navigation


Monitoring & Logging

Access Grafana Dashboard

# Get monitoring instance public IP
aws ec2 describe-instances \
  --region eu-west-3 \
  --filters "Name=tag:Name,Values=*monitoring*" \
  --query 'Reservations[0].Instances[0].PublicIpAddress'

# Open in browser: http://<instance-ip>

Available Dashboards

  • Container Metrics: CPU, Memory, Network I/O
  • System Metrics: Node CPU, Memory, Disk
  • Application Logs: All container logs via Loki

Prometheus & Loki

  • Prometheus UI: http://<instance-ip>:9090
  • Loki API: http://<instance-ip>:3100

For monitoring details, see TECHNICAL.md β†’ Monitoring & Logging


Security

Key Security Features

βœ… Secrets Management: AWS Systems Manager Parameter Store βœ… Encryption: KMS encryption for RDS and secrets βœ… Network Isolation: Private subnets for ECS and RDS βœ… IAM Policies: Least privilege principle implemented βœ… Image Scanning: ECR scan on push enabled βœ… State Locking: DynamoDB-based Terraform state locking βœ… Audit Trail: S3 versioning for state history

Best Practices

  1. Never commit secrets to version control
  2. Use IAM roles instead of access keys
  3. Enable MFA for AWS account access
  4. Rotate credentials regularly
  5. Monitor CloudTrail for API access
  6. Review Security Groups regularly

For security details, see TECHNICAL.md β†’ Security Considerations


Troubleshooting

Common Issues

Issue Solution Details
Terraform init fails Check S3 bucket exists TECHNICAL.md
ECS task fails to start Check CloudWatch Logs TECHNICAL.md
Can't access RDS Check security groups TECHNICAL.md
Grafana not accessible Check monitoring instance TECHNICAL.md
State lock stuck Remove DynamoDB entry TECHNICAL.md

For all troubleshooting steps, see TECHNICAL.md β†’ Troubleshooting


Roadmap

Planned πŸ“‹

  • DynamoDB for the S3
  • Automated RDS backup strategy
  • Multi-region deployment support
  • Cost optimization with budgets and alerts

For full roadmap, see TECHNICAL.md β†’ TODO Items


Environment Configurations

Development Environment

# Deploy to dev
export ENV=dev
./deploy_bootstrap.sh
./deploy_infra.sh

Configuration: bootstrap/env/dev/terraform.tfvars

Production Environment

# Deploy to production
export ENV=prd
# Edit terraform.tfvars to use production values
./deploy_bootstrap.sh
./deploy_infra.sh

Configuration: bootstrap/env/prd/terraform.tfvars


Useful Commands

Terraform

# Validate configuration
terraform validate

# Plan changes
terraform plan -var-file=env/dev/terraform.tfvars

# Apply changes
terraform apply -var-file=env/dev/terraform.tfvars

# Destroy infrastructure
terraform destroy -var-file=env/dev/terraform.tfvars

AWS CLI

# List ECR repositories
aws ecr describe-repositories --region eu-west-3

# View ECS cluster
aws ecs describe-clusters --clusters gocyc-dev-ecs-cluster --region eu-west-3

# Get RDS endpoint
aws rds describe-db-instances --query 'DBInstances[0].Endpoint' --region eu-west-3

# View application logs
aws logs tail /ecs/dev-service-api --follow --region eu-west-3

For more commands, see TECHNICAL.md β†’ Useful Commands


Contributing

Development Workflow

  1. Create feature branch: git checkout -b feature/my-feature
  2. Make changes and test locally
  3. Format Terraform: terraform fmt -recursive
  4. Validate: terraform validate
  5. Commit: git commit -am "Add my feature"
  6. Push: git push origin feature/my-feature
  7. Create Pull Request

Code Standards

  • Use consistent formatting: terraform fmt
  • Add descriptive comments for complex resources
  • Update documentation when making changes
  • Test in dev environment before production

Support

Getting Help

  1. Check Troubleshooting Section
  2. Review TECHNICAL.md documentation
  3. Check AWS documentation for specific services
  4. Review Terraform registry documentation

References


Project Information


πŸ“– For comprehensive technical details, see TECHNICAL.md

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors