serveurs:installation:web-srv:docker-api

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
serveurs:installation:web-srv:docker-api [2022/12/17 13:44] – [Activer TLS pour l'API Docker] jpmilcentserveurs:installation:web-srv:docker-api [2022/12/17 14:23] (Version actuelle) – [Tester l'activation de l'API] jpmilcent
Ligne 4: Ligne 4:
   * Avec les versions récentes de Docker (décembre 2022), il devient nécessaire d'activer TLS sur l'API Docker. Voici la procédure.   * Avec les versions récentes de Docker (décembre 2022), il devient nécessaire d'activer TLS sur l'API Docker. Voici la procédure.
   * Créer le dossier dans la config de Docker qui contiendra le certificat et les fichiers associés : ''mkdir /etc/docker/ssl && chmod 700 /etc/docker/ssl/ && cd /etc/docker/ssl''   * Créer le dossier dans la config de Docker qui contiendra le certificat et les fichiers associés : ''mkdir /etc/docker/ssl && chmod 700 /etc/docker/ssl/ && cd /etc/docker/ssl''
-  * Vous pouvez suivre [[https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket|la démarche indiquée dans la documentation de Docker pour générer le certificat et les fichiers associés]] (même ceux nécessaire au client) sur le serveur où l'API doit être exposée. Vous pouvez comparer à la démache retranscrite ici appliqué à notre configuration sur le serveur d'IP privée 10.0.1.20 ([[https://medium.com/@flavienb/securely-exposing-your-docker-api-d6dc211d51d4|source]] :+  * Vous pouvez suivre [[https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket|la démarche indiquée dans la documentation de Docker pour générer le certificat et les fichiers associés]] (même ceux nécessaire au client) sur le serveur où l'API doit être exposée. Vous pouvez comparer à la démache retranscrite ici appliqué à notre configuration sur le serveur d'IP privée 10.0.1.10 ([[https://medium.com/@flavienb/securely-exposing-your-docker-api-d6dc211d51d4|source]] :
     * Generate CA, of course, keep same CA for each Docker API certs you want to generate on other machines:      * Generate CA, of course, keep same CA for each Docker API certs you want to generate on other machines: 
       * ''openssl genrsa -out ca-key.pem 4096''       * ''openssl genrsa -out ca-key.pem 4096''
       * CA valable 1 an (''365'' => augmenter à 1093 ?) :  ''openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem''       * CA valable 1 an (''365'' => augmenter à 1093 ?) :  ''openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem''
-    * Generate certs for our 10.0.1.20 Docker API. This line is just descriptive, it will work for another IP or domain :+    * Generate certs for our 10.0.1.10 Docker API. This line is just descriptive, it will work for another IP or domain :
       * ''openssl genrsa -out server-key.pem 4096''       * ''openssl genrsa -out server-key.pem 4096''
-      * ''openssl req -subj "/CN=10.0.1.20" -sha256 -new -key server-key.pem -out server.csr''+      * ''openssl req -subj "/CN=10.0.1.10" -sha256 -new -key server-key.pem -out server.csr''
     * Allow external connections for specific IPs and hosts. Client requesting the API MUST MATCH the following subjectAltNames :     * Allow external connections for specific IPs and hosts. Client requesting the API MUST MATCH the following subjectAltNames :
-      * ''echo "subjectAltName=IP:10.0.1.20,IP:127.0.0.1" > extfile.cnf''+      * ''echo "subjectAltName=IP:10.0.1.10,IP:127.0.0.1" > extfile.cnf''
       * Signature du certificat avec le CA valable 1 an (''365'' => augmenter à 1093 ?) : ''openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf ''       * Signature du certificat avec le CA valable 1 an (''365'' => augmenter à 1093 ?) : ''openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf ''
     * Client certificates (for instance, might be used for Portainer) :     * Client certificates (for instance, might be used for Portainer) :
Ligne 34: Ligne 34:
 } }
 </code> </code>
 +  * Vous devez ensuite activer la persistance de l'API Docker comme indiqué ci-dessous 
 + 
 ===== Activer avec persistance l'API Docker ===== ===== Activer avec persistance l'API Docker =====
   * Afin d'éviter que les modifications effectuées dans le fichier ///lib/systemd/system/docker.service// soient écrasées à chaque mise à jour de Docker, vous devez ajouter un fichier qui écrasera les valeurs par défaut.   * Afin d'éviter que les modifications effectuées dans le fichier ///lib/systemd/system/docker.service// soient écrasées à chaque mise à jour de Docker, vous devez ajouter un fichier qui écrasera les valeurs par défaut.
Ligne 50: Ligne 51:
   * Vérifier la présence des nouveaux paramètres dans //CGroup// : '' systemctl status docker ''   * Vérifier la présence des nouveaux paramètres dans //CGroup// : '' systemctl status docker ''
  
-===== Tester temporairement l'activation ===== +===== Tester l'activation de l'API ===== 
-  * Au préalable, sur le serveur //web-srv//, activer l'API //Docker// sur l'IP de l'hôte du VPN : ''vi /lib/systemd/system/docker.service''+  * Si **vous n'avez pas encore activer la permanence de l'accès à l'API** sur le serveur //web-srv//, vous pouvez activer temporaire l'API //Docker// sur l'IP de l'hôte du VPN : ''vi /lib/systemd/system/docker.service''
     * Modifier la ligne ''ExectStart='' en ajoutant l'option ''<nowiki> -H tcp://10.0.1.20:2376 </nowiki>'' juste aprés ''<nowiki> -H fd:// </nowiki>''     * Modifier la ligne ''ExectStart='' en ajoutant l'option ''<nowiki> -H tcp://10.0.1.20:2376 </nowiki>'' juste aprés ''<nowiki> -H fd:// </nowiki>''
-      * À voir si on active TLS et ajoute l'option ''<nowiki> --tlsverify </nowiki>'' 
     * Prendre en compte les changements : ''systemctl daemon-reload''     * Prendre en compte les changements : ''systemctl daemon-reload''
     * Redémarrer Docker : ''systemctl restart docker''     * Redémarrer Docker : ''systemctl restart docker''
 +  * Pour tester depuis l'hôte hébergeant Portainer :
 +    * récupérer les fichiers ''key.pem'' et ''cert.pem'' généré précédemment et stockés sur le serveur où l'API écoute. Pour les récupérer, passer par les comptes ''admin'' et votre machine locale à l'aide de la commande ''scp''.
 +    * lancer la commande suivante : <code bash>curl https://10.0.1.10:2376/images/json --key ./key.pem --cert ./cert.pem --insecure</code>
 +      * Si tout est ok, vous devriez voir s'afficher des informations en JSON.
 +    * autre commande possible : <code bash>docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=10.0.1.10:2376 version</code>
   * Puis accéder à ''<nowiki>https://manager.<domaine-sinp> </nowiki>'' pour configurer cet instance (voir [[serveurs:installation:web-srv:docker-portainer#configurer_portainer|la doc dédiée]]).   * Puis accéder à ''<nowiki>https://manager.<domaine-sinp> </nowiki>'' pour configurer cet instance (voir [[serveurs:installation:web-srv:docker-portainer#configurer_portainer|la doc dédiée]]).
  • serveurs/installation/web-srv/docker-api.1671284648.txt.gz
  • Dernière modification : 2022/12/17 13:44
  • de jpmilcent