Comment utiliser AWS KMS pour chiffrer des données de plus de 4Ko avec la technique de l'envelope encryption
Des scripts pour réaliser une sauvegarde consistente (FS + DB) de Nextcloud sur AWS S3 où Backblaze B2.
Synthèse des nouveaux services EKS et Fargate annoncés aux AWS Re-Invent Summit cette année.
EKS (AWS Kubernetes managed solution) permet de déployer un cluster Kubernetes sur AWS en ne gérant que les workers nodes (masters nodes managés par AWS).
Fargate va plus loin en fournissant une solution 100% managée (workers nodes managés) pour ECS dans un premier temps puis EKS en 2018. Cette solution permet de déployer des containers sans ce soucier des instances EC2 sur lesquels ils tourneront et de payer uniquement pour les containers déployés (facturation par container au lieu de la facturation par instances EC2 démarrées dans le cluster).
Amazon GuardDuty analyse plusieurs sources de données AWS (Logs Cloudtrail, VPC Flow & DNS) et détecte les comportements suspects (instances EC2 se connectant à un domaine lié aux bitcoins ou prenant part à une attaque brute force par ex...).
Méthode pour faire du blue-green deployment sur AWS avec des scripts python utilisant boto3 et fabric.
Un rappel des différentes étapes pour scaler une application web de 1 à 10 millions d'utilisateurs sur une infra AWS.
Il est inutile de designer une architecture ultra-résiliente dès le début:
- l’architecture évoluera en même temps que le nombre d'utilisateur
- plus l’architecture sera simple à l'origine, plus elle sera facile à faire évoluer
- l'acquisition du trafic prend en général plus longtemps que l'évolution de l'architecture.
Un outils de restore point-in-time pour les buckets S3 bucket qui ont le versioning activé
Une command-line améliorée pour awscli: pip install aws-shell
Il est possible de tester le failover d'une base RDS Multi-AZ en la rebootant avec l'option force-failover
.
aws rds reboot-db-instance \
--db-instance-identifier dbInstanceID \
--force-failover
Attention le changement d'AZ (AZ primary devient AZ secondary et vice versa) n'est pas visible instantanément (10 min max) dans la console AWS.
Pour vérifier que le changement a bien eu lieu, il faut vérifier que l'alias DNS de l'instance a changé:
while true; do host <my-rds-endpoint.amazonaws.com> | grep alias ; sleep 1; done
- Pour exporter la conf d'un cluster kubernetes provisonné avec kops:
kops get cluster ${CLUSTER_NAME} -o yaml --full > cluster.yml kops get ig nodes -o yaml > nodes.yml kops get ig masters -o yaml > master.yml
- Pour recréer un cluster à partir de cette conf:
cat cluster.yml > cluster_spec.yml echo --- >> cluster_spec.yml cat nodes.yml >> cluster_spec.yml echo --- >> cluster_spec.yml cat master.yml >> cluster_spec.yml kops create -f cluster_spec.yml
route53-kubernetes permet d'automatiser la création d'enregistrement DNS quand on configure son Ingress.
C'est intégré sous forme d'addon à KOPS.
Attention: Après quelques tests, si route53-kubernetes gère bien la création des nouveaux enregistrements DNS, je n'ai pas l'impression qu'il gère la modification ou suppression des enregistrements créés précédemment. Il doit donc falloir faire du ménage manuellement de temps en temps.
A noter qu'il existe aussi ExternalDNS qui semble être la future méthode standard pour manipuler les DNS externes (Route53, Google Cloud DNS, ...) mais qui semble moins mature.
Pour installer un cluster Kubernetes privé avec KOPS sur une infra AWS déjà existante (DNS, VPC, Subnets, ...)
EDIT
en complement un tuto qui permet de faire quasimment la même chose mais en utilisant KOPS pour exporter une configuration Terraform pour ceux qui utilisent déjà Terraform pour le reste de leur infrastructure:
https://ryaneschinger.com/blog/kubernetes-aws-vpc-kops-terraform/
With AWS Organizations we can now automate the creation of new AWS account to have fully isolated resources from your main account while keeping consolidate bills, shared policy and being able to switch roles from the main accounts to the new accounts with the same credentials.
Kops permet de créer un cluster Kubernetes complet et haute-dispo sur AWS.
Parmi les nombreuses features intéressantes:
- instances EC2 basées sur Debian
- instances dans des ASG (master et nodes)
- possibilité de créer un VPC dédié ou d'en utiliser un existant
- possibilité d'exporter la config au format terraform pour provisionner le cluster avec terraform
L'article explique comment streamer des logs de Cloudwatch logs dans un cluster Amazon ElasticSearch
Plus besoin de recréer une instance ec2 pour lui attribuer un rôle IAM.
Pour automatiser la sauvegarde de volumes Docker sur S3 avec Duplicity:
docker run -v /var/run/docker.sock:/var/run/docker.sock:ro --rm -ti \
-e CONPLICITY_FULL_IF_OLDER_THAN="90D" \
-e CONPLICITY_REMOVE_OLDER_THAN="365D" \
-e CONPLICITY_TARGET_URL=s3://s3-eu-west-1.amazonaws.com/<s3-bucket>/<directory> \
-e AWS_ACCESS_KEY_ID=XXXXXXXXXX \
-e AWS_SECRET_ACCESS_KEY=XXXXXXXXXX \
camptocamp/conplicity
Un guide très complet pour monter une archi HAproxy en HA derrière un ELB avec la terminaison SSL au niveau du HAproxy (utile pour avoir plusieurs certificats SSL sur le même HAproxy par exemple).
Parmi les points importants:
- utiliser le mode TCP au niveau de l'ELB pour laisser HAproxy gérer la terminaison SSL
- activer le Proxy Protocol au niveau ELB (
ProxyProtocolPolicyType
) et HAproxy (accept-proxy
) pour récupérer les IP sources dans les logs HAproxy - créer un frontend sans le Proxy Protocol sur le HAproxy dédié au Healthcheck ELB (les healthcheck ELB ne supportent pas encore le ProxyProtocol)
Également pas mal d'autres astuces pour ajouter des fonctions de sécurité basiques au niveau HAproxy (URL filtering, Rate limiting, DDOS protection...)
Les slides de Gruntwork qui résument toutes les bonnes pratiques Terraform présentés dans leur série d'article
Cf. liens précédents:
Workflow proposé par Gruntwork pour les changements d'infrastructure avec Terraform:
- Vérifier les effets du changements avec
terraform plan
- Appliquer le changement en environnement de test avec
terraform apply
- Pusher le changement sur une branche et soumettre une pull-request à reviewer
- Merger la PR sur master après la code review
- Appliquer le changement en environnement de production avec
terraform apply