Compare commits

...

7 commits

27 changed files with 22591 additions and 199 deletions

81
.vscode/cours.code-snippets vendored Normal file
View file

@ -0,0 +1,81 @@
{
"Activité": {
"scope": "markdown",
"prefix": "act",
"body": [
"# Titre activité",
"",
"## Objectifs",
"",
"- Description",
"",
"## Compétences développées",
"",
"| Numéro | Intitulé | Mobilisée |",
"| ------ | --------------------------------------------------------- | --------- |",
"| C01 | Communiquer en situation professionnelle Français/Anglais | |",
"| C02 | Organiser une intervention | |",
"| C03 | Gérer un projet | |",
"| C04 | Analyser un système informatique | |",
"| C05 | Concevoir un système informatique | |",
"| C06 | Valider un système informatique | |",
"| C08 | Coder | |",
"| C09 | Installer un réseau informatique | |",
"| C10 | Exploiter un réseau informatique | |",
"| C11 | Maintenir un réseau informatique | |",
"",
"## Validation",
"",
"### Livrables",
"",
"- Le code final ",
"- Le compte-rendu de l'activité",
"",
"Le tout dans un répertoire avec le nom suivant `YYYY-MM-DD_TPX_NOM1_Prenom1_NOM2_Prenom2`.",
"- Le compte rendu peut-être livré au format Markdown ou PDF. ",
"- Si vous choisissez le Markdown, attention à bien livrer les éventuelles images et à la validité des liens",
"",
"### Résultats attendus",
"",
"- [ ] Le programme se lance sans erreur.",
"",
"### Critères d'évaluation",
"",
"",
"## Ressources fournies",
"",
"- Cours, Docs, Code préalable, machines virtuelles",
"",
"## Étapes",
"",
"",
"## Pour aller plus loin",
"",
"### Ressources",
""
],
"description": "Template d'activité"
},
"Étape": {
"prefix": "step",
"body": [
"### $1 - $2",
"",
"**Objectif :** $3",
"",
"```admonish travail",
"$0",
"```",
"",
"```admonish help title=\"Aide\"",
"```",
"",
"```admonish warning title=\"Attention\"",
"```",
"",
"```admonish note title=\"Dans le compte rendu\"",
"```"
],
"description": "Nouvelle étape"
}
}

1
.vscode/ltex.disabledRules.fr.txt vendored Normal file
View file

@ -0,0 +1 @@
WHITESPACE_RULE

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

View file

@ -4,4 +4,7 @@ puppeteer:
pages: 2
format: A4
---
![git](Git.png)
![git](Git.png)
![cheatsheet](Git-Cheat-Sheet.png)

View file

@ -1 +1,146 @@
# Python - Application web
# Séquence 02 - Développement d'une application web en microservices
## Objectif
Développer une application complète utilisant des technologies variées et découpée en plusieurs micro-services ayant chacune un tâche définie.
L'application est un système de surveillance des données d'utilisation d'un serveur pour une entreprise fictive proposant une plateforme de stockage de photos familiales.
L'objectif est de mettre en œuvre de nombreuses connaissances acquises au cours du cursus pour développer une application complexe similaire à ce qui se fait dans l'industrie
## Pré-requis
Séquence intervenant en fin de deuxième année, peu avant les projets et nécessitant donc de nombreuses connaissances.
- Développement en Python
- Machines virtuelles et conteneurs
- SSH
- Bases de données (MCD, MPD, SQL)
- HTML, CSS, JavaScript
- VCS Git
## Compétences développées
| Numéro | Intitulé | Mobilisée |
| ------ | --------------------------------------------------------- | --------- |
| C01 | COMMUNIQUER EN SITUATION PROFESSIONNELLE FRANÇAIS/ANGLAIS | X |
| C02 | ORGANISER UNE INTERVENTION | X |
| C03 | GÉRER UN PROJET | |
| C04 | ANALYSER UN SYSTÈME INFORMATIQUE | X |
| C05 | CONCEVOIR UN SYSTÈME INFORMATIQUE | X |
| C06 | VALIDER UN SYSTÈME INFORMATIQUE | |
| C08 | CODER | X |
| C09 | INSTALLER UN RÉSEAU INFORMATIQUE | X |
| C10 | EXPLOITER UN RÉSEAU INFORMATIQUE | |
| C11 | MAINTENIR UN RÉSEAU INFORMATIQUE | |
## Scénario pédagogique
### Démarche globale
| Démarche | |
| ----------------------- | --- |
| Déductive | |
| Inductive | X |
| Investigation | |
| Résolution de problèmes | |
| Projet | X |
### Organisation
#### S1 - Installation, paramétrage et développement de la base de données
- **Apport de connaissances** : -
- **Activité** :
- Déployer un SGBD (PostgreSQL) dans une docker sur une machine virtuelle
- Gérer les droits d'accès à la base de données
- Écrire le modèle (MCD/MPD) et le script SQL pour déployer la base de données
- **Structuration de connaissances** : -
#### S2 - Service d'observation des données d'utilisation de la machine
- **Apport de connaissances** : Selon besoins
- **Activité** :
- Développement d'un programme permettant d'observer les données d'utilisation du serveur et les stocker en base
- Développement de l'image Docker du programme
- Sécurisation du service (accès au réseau, à la base et au système hôte sécurisés)
- (Option) Stockage de l'image sur un registry gitlab
- (Option) Construction de l'image via un pipeline d'intégration continue
- **Structuration de connaissances** : (Option) Intégration continue, registry de conteneurs
#### S3 - Service d'affichage d'un tableau de bord web
- **Apport de connaissances** : Initiation au framework Python Flask
- **Activité** :
- Développement d'un tableau de bord web avec back-end python Flask
- Back-end propose une API qui interroge la DB pour récupérer l'historique des informations de la machine
- Conteneurisation et sécurisation
- (Option) Installation d'un reverse proxy Traefik
- **Structuration de connaissances** : Architecture en micro-service
### Évaluation
| Description | Formative | Sommative | Semaine |
| ------------------------- | --------- | --------- | ------- |
| Compte-rendus d'activités | X | | 1, 2, 3 |
| Dossier de conception | | X | 3+ |
## Connaissances mobilisées
### C01 - COMMUNIQUER EN SITUATION PROFESSIONNELLE FRANÇAIS/ANGLAIS
| Compétence | Connaissance | Niveau taxonomique |
| ---------- | ------------------------------------------------------------------------------------------------ | ------------------ |
| C01 | Communication écrite : cahiers des charges, dossiers de présentation | 3 |
| C01 | Règles de présentation et typographie | 3 |
### C02 - ORGANISER UNE INTERVENTION
| Compétence | Connaissance | Niveau taxonomique |
| ---------- | ------------------------------------------------------------------------------------ | ------------------ |
| C02 | Langages de modélisation UML, SysML | 2 |
| C02 | Termes dun contrat de prestation de service, contraintes en termes de sécurisation | 2 |
| C02 | Différents acteurs du projet : sous-traitants, clients, maître d'œuvre, utilisateurs | 2 |
| C02 | Moyens déchanges et de stockage de données retenus pour le projet | 3 |
### C04 - ANALYSER UN SYSTÈME INFORMATIQUE
| Compétence | Connaissance | Niveau taxonomique |
| ---------- | --------------------------------------------------------------------------------------------------------------------- | ------------------ |
| C04 | Infrastructures matérielles et logicielles centralisées, décentralisées ou réparties | 3 |
| C04 | Langages de modélisation UML, SysML, MERISE | 3 |
| C04 | Différents acteurs d'un projet : sous-traitants, clients, maître d'œuvre, maître d'ouvrage, utilisateurs, exploitants | 2 |
| C04 | Acteurs de lécosystème réglementaire, normatif, CNIL, ANSSI, NIS, Cybermalveillance.gouv.fr | 2 |
| C04 | Méthodologies de recherche et danalyse de documentation (y compris en anglais) | 3 |
### C05 - CONCEVOIR UN SYSTÈME INFORMATIQUE
| Compétence | Connaissance | Niveau taxonomique |
| ---------- | --------------------------------------------------------------------------------------------------------- | ------------------ |
| C05 | Langages de modélisation dapplication et dinfrastructure UML, SysML, MERISE, synoptique réseau | 3 |
| C05 | Infrastructures logicielles centralisées, décentralisées ou réparties | 2 |
| C05 | Livrables dun projet | 3 |
| C05 | Niveaux de sécurité attendus par solution logicielle (chiffrage, protection communications, accès BDD...) | 2 |
### C06 - VALIDER UN SYSTÈME INFORMATIQUE
| Compétence | Connaissance | Niveau taxonomique |
| ---------- | ----------------------------------------------------------------------------------------------------- | ------------------ |
| C06 | Réseaux informatiques : protocoles, équipements et outils usuels et industriels | 4 |
| C06 | Fiches de recette, scénario dutilisation, résultats attendus | 3 |
| C06 | Maîtrise des environnements de développement, intégration, déploiement logiciel et versions associées | 2 |
### C08 - CODER
| Compétence | Connaissance | Niveau taxonomique |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| C08 | Langages de développement, description, création dAPI et IDE associés | 4 |
| C08 | Spécificités des environnements de développement, test, production | 2 |
| C08 | Chaînes dintégration et de déploiement | 2 |
| C08 | Bases de données et environnements de traitement de données | 4 |
| C08 | Programmation multitâche | 3 |
| C08 | Outils de documentation | 3 |
### C09 - INSTALLER UN RÉSEAU INFORMATIQUE
| Compétence | Connaissance | Niveau taxonomique |
| ---------- | ----------------------------------------------------------------------------- | ------------------ |
| C09 | Systèmes dexploitation Windows, UNIX, virtualisation | 3 |

View file

@ -0,0 +1,177 @@
# Développement d'une application web en microservices - Itération 1
## Compétences
| Nom | Description |
| --- | ---------------------------------------- |
| C01 | Communiquer en situation professionnelle |
| C02 | Organiser une intervention |
| C04 | Analyser un système informatique |
| C05 | Concevoir un système informatique |
| C09 | Installer un réseau informatique |
## Objectifs
- Analyse du cahier des charges
- Déploiement du SGBD PostgreSQL dans un conteneur docker à l'aide de docker-compose
- Développement du schéma de la base de données
- Paramétrage des droits d'accès à la base de données
- (Optionnel) Sauvegarde et restauration de la base
## Validation
### Livrables
- Le code final
- Script de la base de données
- Fichier `docker-compose.yml`
- Document de conception (partiel : on le complètera au fil des itérations)
- MCD et MPD de la base de données
- Justification des choix de conception
- Persistance de données du conteneur
- Sécurisation des accès à la base de données
Le tout dans un répertoire avec le nom suivant `YYYY-MM-DD_TPX_NOM1_Prenom1_NOM2_Prenom2`.
- Le compte rendu peut-être livré au format Markdown ou PDF.
- Si vous choisissez le Markdown, attention à bien livrer les éventuelles images et à la validité des liens
Ou si Gitlab est prêt, sous forme de dépôt git.
### Résultats attendus
- [ ] Le docker compose est fonctionnel et permet de déployer une base de données PostgreSQL avec un volume persistant
- [ ] Le script de la base de données est fonctionnel et permet de créer les tables et les utilisateurs nécessaires
- [ ] Le document de conception est en cours d'élaboration et justifie les éléments techniques de l'itération
- [ ] Le dossier de projet est organisé clairement et sépare les éléments techniques dans des répertoires dédiés.
- [ ] Aucune donnée non nécessaire n'est versionnée avec le projet (volume docker notamment)
- [ ] Le projet est versionné sous git, les commits sont correctement commentés et bien segmentés
## Ressources fournies
- Cahier des charges
- Machine virtuelle sous Ubuntu Server 24.04 avec Docker préinstallé
- user : `vboxuser`
- mot de passe : `password`
- Documentations
- [PostgreSQL](https://www.postgresql.org/docs/current/index.html)
- [Docker Compose CLI](https://docs.docker.com/reference/cli/docker/compose/)
- [Docker Compose File Reference](https://docs.docker.com/reference/compose-file/)
- [Image Docker Officielle de PostgreSQL](https://hub.docker.com/_/postgres/)
## Étapes
### 0 - Mise en place
**Objectif :** Récupérer la machine virtuelle et la démarrer puis s'y connecter via VSCode
```admonish travail
- Récupérer la machine virtuelle sur le réseau et l'ajouter à virtualbox
- La configurer en mode bridge (Configuration > Réseau > Attached to > Accès par pont)
- La démarrer en tâche de fond avec interface détachable (cliquer sur la petite flèche à côté du bouton démarrer puis `Start with detachable GUI`)
- Vous connecter, noter l'adresse IP, puis fermer la GUI (mais ne pas éteindre la VM ! Sélectionner `Continuer en tâche de fond`)
- Démarrer VSCode et installer l'extension de Microsoft `Remote - SSH`
- Cliquer dans l'extension `Remote SSH` à gauche et cliquer sur le bouton `+`. Taper `ssh vboxuser@remplacer-par-adresse-ip`
- Vous connecter à la VM avec le mode Remote SSH. VSCode devrait ouvrir une nouvelle fenêtre et vous demander le mot de passe
- Une fois connecté, vous avez un VSCode ouvert dans la machine distante. Nous parlerons de la VM (sauf mention contraire) à partir de maintenant.
- Installez les extensions dont vous pensez avoir besoin (Markdown par exemple)
- Ouvrez un terminal (dans VSCode, pour qu'il soit dans la machine virtuelle) puis
- Vérifiez que docker soit installé et fonctionne avec `docker run hello-world`
- Créez un répertoire de travail `/home/vboxuser/sysmon` à l'aide du terminal puis ouvrez-le dans VSCode grâce à l'explorateur > Open Folder
- Créez un fichier `README.md` qui vous servira de document de conception
- Initialisez un dépôt git avec `git init` et faites un commit initial avec le compte rendu vide
- Vous êtes prêt.e à démarrer
```
### 1 - Démarrer un conteneur postgreSQL
**Objectif :** Utiliser docker-compose pour démarrer un conteneur avec PostgreSQL
```admonish travail
- Créer un fichier `docker-compose.yml`
- Vous servir de la [documentation](https://hub.docker.com/_/postgres/) pour créer une stack :
- Postgres
- Version 18
- nom de la base : sysmon
- utilisateur admin : sysmon
- mot de passe (pour l'instant) : sysmon
- un volume persistant : postgres monté sur `/var/lib/postgresql` en read-write
- Un seul réseau (pour le moment) :
- `adminer`
- Adminer (pour faciliter le dev)
- port 8080 mappé sur le port 8080 de l'hôte
- Réseau `adminer`
- Déclarez les [volumes](https://docs.docker.com/reference/compose-file/volumes/) et les [réseaux](https://docs.docker.com/reference/compose-file/networks/) en bas du fichier compose.
- Démarrez votre stack
- Vérfiez que vous arrivez à vous connecter à adminer avec `http://<ip-de-votre-vm>:8080`
- Tapez les identifiants de la base de données pour vous y connecter
- Attention au nom du serveur : utilisez bien le nom donné à votre service dans le docker-compose
- Complétez votre README.md et faites un commit
```
```admonish note title="Dans le document de conception"
- Expliquez ce que vous avez mis en place pour cette première étape. En particulier :
- à quoi sert le volume `postgres` et pourquoi est-il monté sur `/var/lib/postgresql` ?
- pourquoi avoir créé un réseau `adminer` ?
- A votre avis, y a-t-il un risque à laisser adminer sur un système en production, mappée sur le port 8080 de l'hôte ?
- Lister ce qu'il faudra changer pour sécuriser la configuration actuelle.
```
### 2 - Création de la base de données
**Objectif :** Créer un script SQL qui permet de créer les tables et les utilisateurs, ainsi que configurer les droits
```admonish travail
- A l'aide du cahier des charges, définir le format qu'aura votre base de données.
- A l'aide du cahier des charges, définir les utilisateurs et leurs droits. Utilisez la [documentation](https://www.postgresql.org/docs/current/index.html) si nécessaire.
- Écrire le script SQL permettant de créer votre base
- L'appliquer pour le tester et le valider
- Compléter le document et faire un nouveau commit. Vous pouvez en faire plusieurs si vous le jugez nécessaire.
```
```admonish help title="Aide"
Pour taper des commandes SQL dans votre base vous pouvez au choix :
- utiliser l'interface web de adminer
- vous connecter dans une console postgres via `docker compose exec -ti db /bin/psql -U sysmon` (remplacer db par le nom du service postgres dans votre stack) puis vous connecter à la base avec `\c sysmon`
- Si vous avez besoin de réinitialiser la base vous pouvez faire :
- `docker compose down` pour arrêter la stack et supprimer les conteneurs
- `docker volume rm sysmon_postgres` pour supprimer le volume
- `docker compose up` pour relancer
```
```admonish warning title="Attention"
Il faut réfléchir dès cette étape à la sécurisation de la base. Nous garderons cependant un utilisateur admin facile d'accès pour faciliter le développement, mais gardez en tête que sur le système en production, il faudra changer le mot de passe du superutilisateur de postgres
```
```admonish note title="Dans le document de conception"
- Décrire votre base de données (MPD + commentaires) qui devrait être très simple
- Détailler les utilisateurs et les droits créés. Justifier vos choix.
- Imaginez que vous allez écrire toutes le ssecondes une ligne avec des données. Quel problème risque de se poser à moyen/long terme ?
- Proposez une stratégie qui agit sur trois leviers différents pour pallier ce problème
```
### 3 - Mise en place des sauvegardes
**Objectif :** Vérifier que vous êtes en mesure d'effectuer une sauvegarde et une restauration de votre base de données
```admonish travail
- A l'aide de la [documentation](https://www.postgresql.org/docs/current/backup-dump.html) effectuez un dump de la base `sysmon` au format **custom** postgres.
- Récupérez ce dump sur la machine hôte.
- Effacez votre base (en supprimant le volume, voir Aide de l'étape 2) et restaurez votre dump
- Créez deux scripts shell permettant de
- récupérer un dump de la base sur la machine hôte
- restaurer un dump dans la base
- Faites un nouveau commit
```
```admonish help title="Aide"
- Pour exécuter une commande dans un conteneur docker compose, vous pouvez utiliser `docker compose exec -ti <service> <programme>`
- Pour copier des fichiers entre un conteneur et la machine hôte, vous pouvez utiliser `docker compose cp` (utilisez l'aide pour en savoir plus)
```
```admonish note title="Dans le document de conception"
- Quels sont les avantages et inconvénients du dump au format custom de postgres ?
- En production, que faudrait-il faire avec les sauvegardes pour pouvoir assurer une reprise d'activité avec le minimum de pertes en cas d'incident sur l'hôte ?
- Proposer une solution technique simple pour appliquer ces idées lors d'un éventuel passage en production
```

View file

@ -1,98 +0,0 @@
# Cahier des charges - Application de surveillance de ressources - Prototype
## Contexte et problématique
L'entreprise **PixelVault** est une jeune PME qui gère une solution cloud de partage de photos familiales ou entre amis.
Elle met en avant le respect de la vie privée de ses utilisateurices, la sécurité et la fiabilité de sa solution.
Actuellement, ses serveurs rencontrent des problèmes de saturation disque et de surcharge processeur ou réseau, perturbant la qualité de service.
La société decide donc de mettre en place un système de surveillance des ressources pour pouvoir anticiper ces problèmes
et les diagnostiquer plus rapidement.
Elle envisage la création d'une solution sur mesure qu'elle souhaite pouvoir déployer sur ses serveurs.
La société souhaite procéder par étapes, la première d'entre elles étant la réalisation d'un prototype
qui sera mis en oeuvre sur une petite partie de son infrastructure. C'est cette première
étape qui est l'objet du présent cahier des charges.
## Objectifs
Les objectifs de cette première étape sont les suivants :
- Prouver la **faisabilité technique** dun système interne de supervision
- Définir et valider les **besoins fonctionnels et techniques** des équipes dexploitation
- Concevoir une **interface visuelle simple et claire** adaptée à un usage quotidien
## Périmètre
Le prototype sera testé sur une seule machine de développement interne.
Le système ne devra pas impacter les performances de cette machine.
## Description fonctionnelle
L'objectif du projet est que les équipes d'exploitation soient en mesure de :
- **UC1** Visualiser l'état des ressources du serveur
- **UC2** Recevoir une alerte visuelle en cas de dépassement d'un seuil critique
### Cas d'usage
![use cases](images/uc.svg)
### Exigences
```mermaid
requirementDiagram
requirement SysMon_R1 {
id: R1
text: "Surveiller les ressources système principales"
}
requirement SysMon_R2 {
id: R2
text: "Déclencher une alerte si un seuil critique est atteint"
}
requirement SysMon_R3 {
id: R3
text: "Afficher létat en temps réel via un tableau de bord"
}
requirement SysMon_R4 {
id: R4
text: "Supporter plusieurs plateformes (Linux, Windows, Mac)"
}
requirement SysMon_R5 {
id: R5
text: "Utiliser Python 3 (Flask) pour le backend et HTML/CSS/JS pour le frontend"
}
SysMon_R1 - derives -> SysMon_R2
SysMon_R1 - derives -> SysMon_R3
SysMon_R1 - derives -> SysMon_R4
SysMon_R4 - refines -> SysMon_R5
```
- **R1** - Surveiller les ressources système principales
- Utilisation CPU
- Utilisation mémoire
- Espace disque occupé
- Taux d'usage du disque (entrées/sorties)
- Entrées Sorties Réseau
- **R2** - Déclencher une alerte si un seuil critique est atteint
- Lorsque des ressources dépassent un seuil d'usage supérieur à 80% de leur capacité, la ressource doit être fortement mise en avant sur le tableau de bord de façon à alerter la personne qui le surveille
- **R3** - Afficher létat en temps réel via un tableau de bord
- **R4** - Supporter plusieurs plateformes (Linux, Windows, Mac)
- **R5** - Utiliser Python 3 (Flask) pour le backend et HTML/CSS/JS pour le frontend
- Le système devra être multiplateforme. Par conséquent, le chef de projet impose Python 3 comme langage de programmation Back-end. En front, il faudra utiliser le tryptique HTML, CSS, JavaScript. Pour que l'ensemble fonctionnne, le framework Flask sera utilisé
- **R6** - Versionnement du projet
- Le projet devra être versionné avec Git
## Livrables attendus
- Code du projet
- Document de conception

View file

@ -0,0 +1,156 @@
---
puppeteer:
format: A4
---
# Application de surveillance de ressources - Cahier des charges
## Contexte et problématique
L'entreprise **PixelVault** est une jeune PME qui gère une solution cloud de partage de photos familiales ou entre amis.
Elle met en avant le respect de la vie privée de ses utilisateurices, la sécurité et la fiabilité de sa solution.
Actuellement, ses serveurs rencontrent des problèmes de saturation disque et de surcharge processeur ou réseau, perturbant la qualité de service.
La société décide donc de mettre en place un système de surveillance des ressources pour pouvoir anticiper ces problèmes
et les diagnostiquer plus rapidement.
Elle envisage la création d'une solution sur mesure qu'elle souhaite pouvoir déployer sur ses serveurs.
La société souhaite procéder par étapes, la première d'entre elles étant la réalisation d'un prototype
qui sera mis en oeuvre sur une petite partie de son infrastructure. C'est cette première
étape qui est l'objet du présent cahier des charges.
## Objectifs
Les objectifs de cette première étape sont les suivants :
- Prouver la **faisabilité technique** dun système interne de supervision
- Définir et valider les **besoins fonctionnels et techniques** des équipes dexploitation
- Concevoir une **interface visuelle simple et claire** adaptée à un usage quotidien
## Périmètre
Le prototype sera testé sur une seule machine de développement interne.
Le système ne devra pas impacter les performances de cette machine.
## Description fonctionnelle
### Cas d'usage
L'objectif du projet est que les équipes d'exploitation soient en mesure de :
- **UC1** Visualiser l'état actuel des ressources du serveur
- **UC2** Visualiser l'historique d'utilisation des ressources du serveur
![usecase](images/uc.svg)
### Exigences
```mermaid
requirementDiagram
requirement SysMon_R1 {
id: R1
text: "Surveiller les ressources système principales"
}
requirement SysMon_R2 {
id: R2
text: "Afficher létat en temps réel via un tableau de bord"
}
requirement SysMon_R3 {
id: R3
text: "Afficher lhistorique via un
tableau de bord"
}
requirement SysMon_R4 {
id: R4
text: "Utiliser Python 3 (Flask) pour le
backend et HTML/CSS/JS pour le frontend"
}
requirement SysMon_R5 {
id: R5
text: "Les données d'utilisation devront être persistées"
}
requirement SysMon_R6 {
id: R6
text: "Les données d'utilisation devront
stockées dans le SGBD PostgresSQL"
}
SysMon_R1 - derives -> SysMon_R2
SysMon_R1 - derives -> SysMon_R3
SysMon_R3 - refines -> SysMon_R4
SysMon_R2 - refines -> SysMon_R4
SysMon_R3 - derives -> SysMon_R5
SysMon_R5 - refines -> SysMon_R6
```
- **R1** - Surveiller les ressources système principales
- Utilisation CPU
- Utilisation mémoire
- Espace disque occupé
- Taux d'usage du disque (entrées/sorties)
- Entrées Sorties Réseau
- **R2** - Afficher létat en temps réel via un tableau de bord
- **R3** - Afficher lhistorique via un tableau de bord
- **R5** - Utiliser Python 3 (Flask) pour le backend et HTML/CSS/JS pour le frontend
- Le système devra être multiplateforme. Par conséquent, le chef de projet impose Python 3 comme langage de programmation Back-end. En front, il faudra utiliser le tryptique HTML, CSS, JavaScript. Pour que l'ensemble fonctionnne, le framework Flask sera utilisé
- **R6** - Versionnement du projet
- Le projet devra être versionné avec Git
## Architecture technique
![Architecture](images/Architecture.svg)
L'architecture du projet sera organisée comme dans le schéma ci-dessus.
Il y aura 4 conteneurs, dont un optionnel.
- PostgreSQL : pour la persistance des données
- Un service d'observation des données système qui écrira les données en base
- Un service d'interface utilisateur
- (optionnel) Un reverse proxy Traefik pour écouter sur le port 80 et rediriger les flux
### PostgreSQL
PostgreSQL devra avoir un volume persistant pour conserver les données sur le disque et éviter de les perdre à chaque redémarrage du conteneur
Il devra être relié à deux réseaux différents afin d'isoler les usages :
- Un pour le conteneur d'interface utilisateur
- Un pour le conteneur de surveillance système
La base de données devra également être accessible, outre le super utilisateur `postgres`, par deux utilisateurs : un pour chaque service, avec les droits minimaux nécessaires à leurs fonctionnalités.
- L'UI n'aura que le droit de lire les tables dont elle a besoin
- Le service de surveillance pourra lire et écrire uniquement dans les tables nécessaires
### Service d'observation
Le service de surveillance sera un programme développé en Python et utilisant la librairie `psutils` afin d'observer les données d'utilisation de la machine et les écrire en base de données.
Le conteneur sera en mesure d'accéder aux données de son hôte. Il est probable qu'à l'avenir, il ait accès à des données sensibles et qu'il ait des privilèges. Il faut donc l'isoler du réseau dès la conception pour limiter le risque d'accès mal intentionnés depuis l'extérieur. Le conteneur ne devra donc avoir aucun accès au réseau extérieur, pour des raisons de sécurité.
Il ne devra pas non plus pouvoir être directement joignable par un conteneur relié au réseau extérieur. C'est pourquoi il aura son propre réseau, distinct de celui de l'interface utilisateur.
### Le service d'interface utilisateur
Ce service sera un programme Python utilisant le framework Flask pour proposer une interface web servant de tableau de bord à l'utilisateur. Il proposera également les points d'entrée API nécessaires pour que l'interface puisse récupérer les données d'historique des données système depuis la base de données.
Ce service sera soit relié au port 80 de la machine hôte (développement), soit préférablement (en production) relié à un reverse proxy (Traefik) qui gèrera les flux réseaux qui lui sont destinés afin de rajouter une couche supplémentaire de sécurité.
### Le reverse proxy
Ce service ne sera pas nécessaire dans un premier temps mais devra être utilisé en production. Il permettra d'intercepter les flux réseau sur les ports 443 et 80 de l'hôte, de façon à forcer les connexions sécurisées (HTTPS) et rediriger ensuite les flux autorisés vers le service d'interface utilisateur. Tous les conteneurs reliés au reverse proxy le seront sur un réseau dédié.
### Hôte
L'hôte sera une machine virtuelle sous Ubuntu Server 24.04. Il s'agit d'une version LTS garantissant donc un support de long terme et des mises à jour de sécurité sur 5 ans.
## Livrables attendus
- Code du projet versionné
- Document de conception

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 535 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before After
Before After

View file

@ -1,5 +1,7 @@
# Situations
Those situations need an answer by mail. Write it. Please be imaginative.
## Bug report
You need to send a report to the software team in order to make them aware of a serious bug and have them fix it. You have a document with all the steps to reproduce the bug.

View file

@ -44,8 +44,9 @@
- [TP3 - Fichiers et structures de données](./CIEL2/01-revisions-python/tp/tp3-fichiers-structures-de-données.md)
- [TP Git](./CIEL2/04-git/tp.md)
- [Python - Application web](./CIEL2/02-python-flask/python-flask.md)
- [Activité 1 - Prototype application surveillance de ressources](./CIEL2/02-python-flask/tp/activite1-monitoring.md)
- [Annexe - Cahier des charges](./CIEL2/02-python-flask/tp/activite1-cdc.md)
- [Activité 0 - Prototype application surveillance de ressources](./CIEL2/02-python-flask/tp/0-prototype-monitoring.md)
- [Activité 1 - Mise en place de la base de données](./CIEL2/02-python-flask/tp/1_base_de_donnees.md)
- [Annexe - Cahier des charges](./CIEL2/02-python-flask/tp/cdc.md)
- [Python objet](./CIEL2/02-python-objet/python-objet.md)
- [Bases de données](./CIEL2/03-base-de-donnees/bases-de-donnees.md)
- [Co-intervention Anglais](./CIEL2/anglais/mails.md)

View file

@ -1,93 +1 @@
# Titre activité
## Objectifs
### Objectifs pédagogiques
- **Objectif** : Description
### Objectifs techniques
- **Objectif** : Description
## Validation
### Livrables
- Le code final
- Le compte-rendu de l'activité
Le tout dans un répertoire avec le nom suivant `YYYY-MM-DD_TPX_NOM1_Prenom1_NOM2_Prenom2`.
- Le compte rendu peut-être livré au format Markdown ou PDF.
- Si vous choisissez le Markdown, attention à bien livrer les éventuelles images et à la validité des lien
### Résultats attendus
- [ ] Le programme se lance sans erreur.
- [ ] Chaque fonction contient une docstring minimale expliquant sa fonctionnalité. Bonus : Doctsrings complètes au format Numpy.
- [ ] Le code est propre, correctement formaté, les variables, fonctions et paramètres sont bien nommés, les conventions sont respectées.
### Critères d'évaluation
- 50% Technique (10pts)
- Code fonctionnel
- Réponses dans le compte-rendu
- Questions orale et compréhension générale
- Connaissance du cours
- 50% Professionnalisme (10pts)
- Posture professionnelle durant l'activité (3pts)
- Qualité du rendu (Compte rendu - Documentation - Code) (3pts)
- Respect des délais/horaires (2pts)
- Autonomie dans la progression (2pts)
- Bonus +2pts
## Documents fournis
- Cours
- Docs
- Code préalable
## Étapes
### 1 - Nom de l'étape
**Objectif :**
```admonish travail
```
```admonish help title="Aide"
```
```admonish warning title="Attention"
```
```admonish note title="Dans le compte rendu"
```
## Pour aller plus loin
### Bonus facile - titre
**Objectif**:
```admonish travail
```
### Bonus difficile - titre
**Objectif** :
```admonish travail
```
```admonish help title="Aide"
```
```admonish note title="Dans le compte rendu"
```
### Ressources
# Template - Activité

407
src/slides/B1/rgpd.md Normal file
View file

@ -0,0 +1,407 @@
---
marp: true
theme: catppuccin
paginate: true
size: 4:3
transition: coverflow
footer: ''
math: katex
lang: "fr"
---
<style>
section {
font-size: 28px;
text-align: left
}
</style>
# Protection de la vie privée et RGPD
---
## C'est quoi la vie privée ?
----
Wikipédia :
> La vie privée est la capacité, pour une personne ou pour un groupe de personnes, de s'isoler afin de protéger son bien-être.
- Diffère selon les personnes et les cultures
- Concept assez récent
- Évolution des techniques renforce sa pertinence
----
- Protégé par la **Déclaration universelle des droits humains**
- Porté dans le code civil français
- Mais pas de définition : seulement jurisprudence
- Quand même cadre légal pour :
- Droit à l'image
- Secret professionnel/médical
- Respect de la vie privée à l'embauche
----
Il faut distinguer :
- protection de la vie privée
- sécurité
- anonymat
----
### Vie privée
- Assurance que vos informations ne sont vues que par les parties (personnes physiques ou morales) autorisées (par vous-même) à les voir
----
### Sécurité
La **sécurité** est la capacité :
1. à faire confiance aux intermédiaires à qui vous confiez des informations
2. à savoir que les parties impliquées sont bien celles qu'elles prétendent être
3. et à maintenir dans le temps ces garanties
----
### Anonymat
- L'anonymat est la capacité d'agir sans être identifiable
- Attention le pseudonymat n'est pas de l'anonymat
---
### Échelle individuelle : "Je n'ai rien à cacher"
----
- On a évidemment des choses à cacher :
- Pourquoi vouloir cacher des choses ?
- contrainte sociale
- ex: orientation de genre ou sexuelle
- contrainte légale
- ex: désobéissance civile, fraudes...
- intérêts particuliers
- ex: problèmes de santé vs banques et assurances
- Point important : en termes de vie privée on cherche souvent à se protéger soi.
- Mais c'est un **effort collectif**
- D'où l'importance de sensibiliser, et de faire attention à la vie privée des autres
----
### Échelle collective : Cambridge Analytica
----
- Cambridge analytica : société de stratégie de communication
- Interventions dans des dizaines d'élections
- Question de souveraineté des États
- Mode opératoire :
- Questionnaire sur réseaux sociaux
- Pubs sur les réseaux sociaux en fonction des réponses
- Résultats de recherches Google
- Adaptation des discours dans les apparitions publiques
- 320 000 personnes ont répondu au "test de personnalité" -> 8.7 millions de personnes touchées (données entourage)
---
## Cadre légal : RGPD
- Règlement général sur la protection des données (Europe)
- Héritage de la loi Informatique et Libertés (1978)
---
### Informations générales
---
#### Objectifs du RGPD
- Protéger les données à caractère personnel des personnes physiques
- Protéger les droits, notamment à la protection des données personnelles
- Permettre la libre circulation des données (dans le cadre) en UE
#### Champ d'application
- S'applique dès que le traitement concerne un résident européen
- Etabli sur le territoire européen
- Vise à fournir biens et services à des résidents européens
- S'applique aux responsables de traitement mais aussi aux sous-traitants
---
#### Guichet unique
- Autorité de la protection des données nationale
- Pour chaque état membre
- En France : CNIL
- Interlocuteur unique pour tout ce qui concerne le traitement de données personnelles
---
### Définitions
----
#### Donnée personnelle
* information se rapportant à une **personne physique** identifiable ou identifiée
- **directement** (nom prénom)
- **indirectement** (numéro d'adhérent, adresse mail, voix...)
* Identification à partir:
- d'une seule donnée (numéro de sécu, ADN, ...)
- d'un croisement de données
----
#### Traitement de données personnelles
* Toute manipulation de données est un traitement
- collecte, consultation, rapprochements, ...
- **Remarque** : informatique et papier également concernés
- Doit avoir un **objectif** défini
----
#### Donnée sensible
* Liste :
- la prétendue origine raciale ou ethnique
- les opinions politiques
- les convictions religieuses ou philosophiques ou lappartenance syndicale
- les données génétiques/biométriques
- les données concernant la santé
- les données concernant la vie sexuelle ou lorientation sexuelle
----
- Leur utilisation est en principe interdite
- Nécessite consentement explicite de la personne concernée
- Ou ensemble de conditions :
- fichier mis en place par organisme à but non lucratif
- objectif politique, religieux ou syndical
- se rapporte uniquement aux membres ou anciens membres de l'organisme, ou personne entretenant des contacts réguliers avec organisme en lien avec ses finalités
- données non communiquées en dehors de l'organisme sans accord explicite des personnes concernées
---
#### Responsable de traitement
* Personne physique ou morale qui détermine les finalités et moyens de traitement
- En général personne morale incarnée par représentant légal
- L'entreprise par exemple
---
#### Sous-traitant
* Personne physique ou morale qui traite des données pour un autre organisme
- Autre organisme = responsable de traitement
- Obligations qui doivent être présentes dans le contrat :
- transparence et traçabilité
- privacy by design
- obligation de garantir la sécurité des données traitées
- obligation d'assistance, alerte et conseil
---
### Grands principes
----
#### Principe de licéité du traitement
- Objectif **légal**
- Une des 6 **bases légales** prévue par le RGPD
- [laccord libre, spécifique, éclairé et univoque](https://www.cnil.fr/fr/les-bases-legales/consentement)
- le respect dune [obligation légale](https://www.cnil.fr/fr/les-bases-legales/obligation-legale)
- sauvegarde des intérêts vitaux d'une personne physique
- La [mission d'intérêt public](https://www.cnil.fr/les-bases-legales/mission-interet-public)
- l[exécution du contrat](https://www.cnil.fr/fr/les-bases-legales/contrat)
- la satisfaction de l[intérêt légitime](https://www.cnil.fr/fr/les-bases-legales/interet-legitime)
----
#### Principe de finalité déterminée et légitime
- Données collectées pour un but **défini** et **légitime**, et doit être respecté
----
#### Principe de pertinence et de minimisation
- Données doivent avoir un lien **direct** avec l'objectif
- Elles doivent être **nécessaires**
----
#### Principe de transparence et de respect des droits des personnes
- Personnes doivent comprendre
- pourquoi leurs données sont collectées
- quels sont leurs droits
- Attention aux mentions obligatoires
---
- Personnes doivent comprendre pourquoi leurs données sont collectées et quels sont leurs droits
- identité de votre organisme
- objectif du traitement
- base légale (principe de licéité)
- caractère obligatoire de fournir l'info (et conséquences sinon)
- destinataires des données (à qui elles sont transmises)
- durée de conservation (durée pendant laquelle les données ont un intérêt, et doivent être ensuite détruites ou anonymisées)
- droits des personnes (accès, rectification, effacement et limitation)
- transferts hors UE
- Contact de l'éventuel DPO
- Droit d'effectuer une plainte auprès de la CNIL
---
- Informations doivent être accessibles au public visé, claires et transparentes
- Mettre infos importantes sur le formulaire et renvoyer à vos conditions
- responsable de traitement
- droits des personnes
- objectif du traitement
---
#### Principe d'une durée de conservation limitée
- 2 phases :
- données nécessaire pour la gestion courante
- archivage intermédiaire :
- intérêt administratif
- obligation légale
- Ensuite :
- supprimer les données
- ou les rendre non identifiables
----
#### Principe de confidentialité et de sécurité
- Seules les personnes dont les missions le nécessitent
- Assurer la confidentialité et la sécurité
---
### Mise en conformité
----
#### Le DPO : délégué à la protection des données
- Rôle clé dans le RGPD
- **Informer et conseiller** l'organisme et les employés
- **Contrôler** le respect du RGPD
- **Interlocuteur** pour les questions liées à la protection des données personnelles
- **Coopérer avec la CNIL** et être le point de contact
---
- Quand doit-on avoir un DPO ?
- Autorités et organismes publics
- organismes dont **activités de base** mènent à un suivi régulier et à **grande échelle**
- traitements à grande échelle de données sensibles ou relatives à des condamnations et infractions pénales
- **Activité de base** = coeur de métier
- **Grande échelle** = pas de seuil précis, cas par cas
---
#### Constituer un registre des traitements
- Registre qui regroupe l'ensemble des traitements de données effectués
- Identifier les activités qui utilisent des données personnelles (y compris des salariés)
- ex: recrutement, paie, formation, accès, ventes, prospection...
- Faire des fiches pour chaque activité
- Objectif poursuivi
- Catégories de données
- Qui a accès aux données
- Durée de conservation
- Garder le registre à jour
- Responsabilité du dirigeant de l'entreprise
- [Modèle de registre des traitements](https://www.cnil.fr/sites/default/files/atoms/files/registre-traitement-simplifie.ods)
---
#### Informer les personnes concernées
- Obligation d'informer les personnes lorsque vous collectez des données
- Directement sur le support (formulaire, questionnaire etc..)
- Pour les détails, voir la slide sur le principe de respect des droits et transparence
- [Exemples de mentions](https://www.cnil.fr/fr/passer-laction/rgpd-exemples-de-mentions-dinformation)
- Permettre aux personnes d'exercer leurs droits facilement
- Formulaire de contact spécifique
- numéro de telélphone ou mail dédié
- Accès depuis compte utilisateur
- 1 mois maximum de délai de traitement
---
#### Sécuriser les données
Principes de sécurité ionformatique :
- Chiffrement, mots de passe sécurisés, mises à jour, sauvegardes...
- Accès aux locaux et aux données réduits au minimum (RBAC)
---
- En cas de violation de données :
- Prévenir la CNIL dans les 72 heures,
- Si le risque est élevé, prévenir les personnes
- niveau de risque à déterminer en fonction :
- du type de violation
- et de la sensibilité, l'identification possible, conséquences probables pour les personnes, personnes vulnérables, mineures, nombre de personnes...
---
## Mise en pratique
---
### Entreprise qui vend en ligne
- Site vitrine avec formulaire de contact
* Mention CNIL dans le formulaire de contact
* Moyens de contact pour exercer les droits CNIL par voie électronique
* Mentions pour identifier l'éditeur du sitye
---
- Site qui vend en ligne
* Sécurisation des données
- https
- mot de passe complexe imposé à la création de compte
- ne pas envoyer d'infos sensibles par mail
- ne pas conserver de coordonnées bancaires
- transactions bancaires sécurisées
* Information des clients (page vie privée)
* Formulaire de contact pour les droits CNIL
---
- Traceurs publicitaires (cookies)
* Informer l'internaute
* obtenir son consentement **AVANT** de déposer/lire un cookie
* obtenir le consentement si vous utilisez des fonctionnalités offertes par d'autres prestataires
- Statistiques, boutons sociaux, vidéos youtube...
---
### Données des salariés
- Vidéosurveillance sur le lieu de travail
* Information des salariés + instances représentatives
* Consultations préalables souhaitables
* Intérêt légitime et transparent : limiter les vols (pas d'objectifs cachés)
* On ne surveille pas en continu un poste de travail
---
### Registre des traitements
Prenez votre entreprise (ou un exemple de votre choix) :
- Lister les activités nécessitant des données personnelles
- Choisir une activité et remplir la fiche de registre RGPD
- Expliquer les informations remplies et les choix retenus
- Ajouter si vous le souhaitez des commentaires/avis sur les mesures de sécurité
---
## Aller plus loin
- [RGPD](https://www.cnil.fr/fr/reglement-europeen-protection-donnees)
- [RGPD - De quoi parle-t-on ?](https://www.cnil.fr/fr/rgpd-de-quoi-parle-t-on)
- [RGPD - Grands principes](https://www.cnil.fr/fr/comprendre-le-rgpd/les-six-grands-principes-du-rgpd)
- [Transférer des données hors UE](https://www.cnil.fr/fr/les-outils-de-la-conformite/transferer-des-donnees-hors-de-lue)
Fiches pratiques :
- [Vente en ligne](https://www.cnil.fr/sites/default/files/atoms/files/bpi-cnil-rgpd_fiche-1_que-faire-quand-votre-entreprise-communique-vend-en-ligne.pdf)
- [Relation client](https://www.cnil.fr/sites/default/files/atoms/files/bpi-cnil-rgpd_fiche_2_ameliorez-maitrisez-votre-relation-client_0.pdf)
- [Données des collaborateurices](https://www.cnil.fr/sites/default/files/atoms/files/bpi-cnil-rgpd_fiche_3_protegez-les-donnees-de-vos-collaborateurs.pdf)

View file

@ -410,8 +410,8 @@ Différents types de valeurs reviennent régulièrement. Elles sont standard en
- **Relatives** :
- 1 est la valeur de référence
- Proportionnel à la taille
- de l'élément : `em`
- de la page : `rem`
- de la police de l'élément : `em`
- de la police de la page : `rem`
- du viewport : `vh` et `vw`
- Selon les propriétés : les `%` sont possibles
@ -446,4 +446,6 @@ La référence : [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/CSS
- Donne des informations de compatibilité entre navigateurs
- Articles et guides explicatifs + exemples
---
---
Avez-vous des questions ?