- Amazon Web Services (AWS)
- Microsoft Azure
- Google Cloud Platform (GCP)
- Kubernetes
- Sécurité et Isolation
# Installer AWS CLI
pip install awscli
aws configure- Créer un dépôt ECR
aws ecr create-repository --repository-name vulnerable-web-app --region us-east-1- Authentification Docker vers ECR
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin \
YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com- Build et push de l'image
# Compiler l'application
mvn clean package
# Build l'image
docker build -t vulnerable-web-app:latest .
# Tag pour ECR
docker tag vulnerable-web-app:latest \
YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/vulnerable-web-app:latest
# Push vers ECR
docker push YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/vulnerable-web-app:latest- Créer une définition de tâche ECS
{
"family": "vulnerable-web-app",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "1024",
"memory": "2048",
"containerDefinitions": [
{
"name": "vulnerable-app",
"image": "YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/vulnerable-web-app:latest",
"portMappings": [
{
"containerPort": 8080,
"protocol": "tcp"
}
],
"essential": true,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/vulnerable-web-app",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
}
}
]
}- Créer le service ECS
# Créer le cluster
aws ecs create-cluster --cluster-name vulnerable-app-cluster
# Créer le service
aws ecs create-service \
--cluster vulnerable-app-cluster \
--service-name vulnerable-app-service \
--task-definition vulnerable-web-app \
--desired-count 1 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxx],securityGroups=[sg-xxxxx],assignPublicIp=ENABLED}"# Créer un fichier Dockerrun.aws.json
cat > Dockerrun.aws.json <<EOF
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/vulnerable-web-app:latest",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "8080"
}
]
}
EOF
# Initialiser et déployer
eb init -p docker vulnerable-app
eb create vulnerable-app-env# Installer Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
az login- Créer un groupe de ressources
az group create --name vulnerable-app-rg --location eastus- Créer un registre de conteneurs Azure
az acr create --resource-group vulnerable-app-rg \
--name vulnerableappacr --sku Basic- Build et push de l'image
# Compiler
mvn clean package
# Login vers ACR
az acr login --name vulnerableappacr
# Build et push
docker build -t vulnerable-web-app:latest .
docker tag vulnerable-web-app:latest \
vulnerableappacr.azurecr.io/vulnerable-web-app:latest
docker push vulnerableappacr.azurecr.io/vulnerable-web-app:latest- Déployer sur ACI
# Obtenir les credentials ACR
ACR_PASSWORD=$(az acr credential show --name vulnerableappacr \
--query "passwords[0].value" -o tsv)
# Créer le container instance
az container create \
--resource-group vulnerable-app-rg \
--name vulnerable-app \
--image vulnerableappacr.azurecr.io/vulnerable-web-app:latest \
--registry-login-server vulnerableappacr.azurecr.io \
--registry-username vulnerableappacr \
--registry-password $ACR_PASSWORD \
--dns-name-label vulnerable-app-test \
--ports 8080 \
--cpu 1 \
--memory 2- Obtenir l'URL
az container show --resource-group vulnerable-app-rg \
--name vulnerable-app --query ipAddress.fqdn -o tsv# Créer un App Service Plan
az appservice plan create --name vulnerable-app-plan \
--resource-group vulnerable-app-rg \
--is-linux --sku B1
# Créer une Web App
az webapp create --resource-group vulnerable-app-rg \
--plan vulnerable-app-plan \
--name vulnerable-web-app-test \
--deployment-container-image-name vulnerableappacr.azurecr.io/vulnerable-web-app:latest
# Configurer le port
az webapp config appsettings set --resource-group vulnerable-app-rg \
--name vulnerable-web-app-test \
--settings WEBSITES_PORT=8080# Installer gcloud CLI
curl https://sdk.cloud.google.com | bash
gcloud init- Configurer le projet
PROJECT_ID="your-project-id"
gcloud config set project $PROJECT_ID- Activer les APIs nécessaires
gcloud services enable \
containerregistry.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com- Build et push avec Cloud Build
# Compiler
mvn clean package
# Build et push (Cloud Build fait tout)
gcloud builds submit --tag gcr.io/$PROJECT_ID/vulnerable-web-app- Déployer sur Cloud Run
gcloud run deploy vulnerable-web-app \
--image gcr.io/$PROJECT_ID/vulnerable-web-app \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--port 8080 \
--memory 2Gi \
--cpu 1- Obtenir l'URL
gcloud run services describe vulnerable-web-app \
--platform managed \
--region us-central1 \
--format 'value(status.url)'# Créer un cluster
gcloud container clusters create vulnerable-app-cluster \
--num-nodes=1 \
--machine-type=n1-standard-2 \
--region=us-central1
# Obtenir les credentials
gcloud container clusters get-credentials vulnerable-app-cluster \
--region us-central1
# Déployer (voir section Kubernetes ci-dessous)
kubectl apply -f k8s-deployment.yamlk8s-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: vulnerable-web-app
labels:
app: vulnerable-web-app
spec:
replicas: 1
selector:
matchLabels:
app: vulnerable-web-app
template:
metadata:
labels:
app: vulnerable-web-app
spec:
containers:
- name: vulnerable-app
image: YOUR_REGISTRY/vulnerable-web-app:latest
ports:
- containerPort: 8080
resources:
limits:
memory: "2Gi"
cpu: "1000m"
requests:
memory: "1Gi"
cpu: "500m"
env:
- name: JAVA_OPTS
value: "-Xms512m -Xmx1024m"
---
apiVersion: v1
kind: Service
metadata:
name: vulnerable-web-app-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: vulnerable-web-appDéploiement
# Appliquer le déploiement
kubectl apply -f k8s-deployment.yaml
# Vérifier le statut
kubectl get pods
kubectl get services
# Obtenir l'IP externe
kubectl get service vulnerable-web-app-serviceAWS - Security Groups
# Créer un security group restrictif
aws ec2 create-security-group \
--group-name vulnerable-app-sg \
--description "Security group pour application vulnérable - TESTS UNIQUEMENT"
# Autoriser uniquement votre IP
YOUR_IP=$(curl -s ifconfig.me)
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxx \
--protocol tcp \
--port 8080 \
--cidr $YOUR_IP/32Azure - Network Security Groups
# Créer un NSG
az network nsg create \
--resource-group vulnerable-app-rg \
--name vulnerable-app-nsg
# Règle pour votre IP uniquement
az network nsg rule create \
--resource-group vulnerable-app-rg \
--nsg-name vulnerable-app-nsg \
--name AllowMyIP \
--priority 100 \
--source-address-prefixes $YOUR_IP/32 \
--destination-port-ranges 8080 \
--access Allow \
--protocol TcpGCP - Firewall Rules
# Créer une règle de pare-feu restrictive
gcloud compute firewall-rules create allow-vulnerable-app \
--allow tcp:8080 \
--source-ranges $YOUR_IP/32 \
--target-tags vulnerable-appDéployer dans un réseau privé isolé
- Utiliser un VPC/VNet dédié
- Pas d'accès Internet direct
- Utiliser un VPN ou bastion host pour l'accès
AWS CloudWatch
# Créer une alarme pour trafic suspect
aws cloudwatch put-metric-alarm \
--alarm-name vulnerable-app-high-traffic \
--alarm-description "Alerte trafic élevé" \
--metric-name RequestCount \
--threshold 1000Configurer une suppression automatique
# AWS - Tag pour suppression automatique
aws ec2 create-tags --resources i-xxxxx \
--tags Key=AutoDelete,Value=true Key=TTL,Value=24h
# Azure - Définir une date d'expiration
az resource tag --tags ExpiryDate=$(date -d '+1 day' +%Y-%m-%d) \
--ids /subscriptions/.../resourceGroups/vulnerable-app-rg- Activer tous les logs (CloudTrail, Azure Monitor, Cloud Logging)
- Configurer des alertes pour accès inhabituels
- Utiliser des credentials temporaires
- Application déployée dans un VPC/VNet isolé
- Firewall/Security Group configuré pour votre IP uniquement
- Pas d'accès public Internet
- Logging activé
- Alertes de sécurité configurées
- TTL/Auto-delete configuré
- Équipe de sécurité informée
- Documentation du test
AWS
# Supprimer le service ECS
aws ecs delete-service --cluster vulnerable-app-cluster \
--service vulnerable-app-service --force
# Supprimer le cluster
aws ecs delete-cluster --cluster vulnerable-app-cluster
# Supprimer les images ECR
aws ecr delete-repository --repository-name vulnerable-web-app --forceAzure
# Supprimer tout le groupe de ressources
az group delete --name vulnerable-app-rg --yes --no-waitGCP
# Supprimer le service Cloud Run
gcloud run services delete vulnerable-web-app \
--platform managed --region us-central1 --quiet
# Supprimer les images
gcloud container images delete gcr.io/$PROJECT_ID/vulnerable-web-app --quietPour des questions sur le déploiement cloud de cette application de test, veuillez consulter:
- Le fichier README.md principal
- La documentation de sécurité de votre plateforme cloud
- Votre équipe de sécurité interne
Rappel final: Ne jamais exposer cette application sur Internet public!