2.6. Sécuriser le contenu des conteneurs
Pour garantir la sécurité du contenu de vos conteneurs, vous devez commencer par des images de base fiables, telles que les Red Hat Universal Base Images, et ajouter des logiciels fiables. Pour vérifier la sécurité continue de vos images de conteneurs, il existe des outils Red Hat et des outils tiers pour analyser les images.
2.6.1. Sécurisation à l'intérieur du conteneur
Les applications et les infrastructures sont composées d'éléments facilement disponibles, dont beaucoup sont des logiciels libres tels que le système d'exploitation Linux, JBoss Web Server, PostgreSQL et Node.js.
Des versions conteneurisées de ces paquets sont également disponibles. Cependant, vous devez savoir d'où proviennent les paquets, quelles sont les versions utilisées, qui les a construits et s'ils contiennent du code malveillant.
Voici quelques questions auxquelles il faut répondre :
- Ce qui se trouve à l'intérieur des conteneurs risque-t-il de compromettre votre infrastructure ?
- Existe-t-il des vulnérabilités connues dans la couche applicative ?
- Les couches du système d'exécution et du système d'exploitation sont-elles à jour ?
En construisant vos conteneurs à partir des images de base universelles de Red Hat (UBI), vous êtes assuré d'avoir une base pour vos images de conteneurs qui consiste en les mêmes logiciels emballés par RPM que ceux inclus dans Red Hat Enterprise Linux. Aucun abonnement n'est nécessaire pour utiliser ou redistribuer les images UBI.
Pour assurer la sécurité continue des conteneurs eux-mêmes, les fonctions d'analyse de sécurité, utilisées directement à partir de RHEL ou ajoutées à OpenShift Container Platform, peuvent vous alerter lorsqu'une image que vous utilisez présente des vulnérabilités. L'analyse d'image OpenSCAP est disponible dans RHEL et Red Hat Quay Container Security Operator peut être ajouté pour vérifier les images de conteneurs utilisées dans OpenShift Container Platform.
2.6.2. Créer des images redistribuables avec UBI
Pour créer des applications conteneurisées, vous commencez généralement par une image de base fiable qui offre les composants habituellement fournis par le système d'exploitation. Il s'agit notamment des bibliothèques, des utilitaires et des autres fonctionnalités que l'application s'attend à trouver dans le système de fichiers du système d'exploitation.
Les images de base universelles de Red Hat (UBI) ont été créées pour encourager toute personne construisant ses propres conteneurs à commencer par une image entièrement constituée de paquets rpm Red Hat Enterprise Linux et d'autres contenus. Ces images UBI sont régulièrement mises à jour pour tenir compte des correctifs de sécurité et sont libres d'utilisation et de redistribution avec des images de conteneurs construites pour inclure vos propres logiciels.
Effectuez une recherche dans le catalogue de l'écosystème Red Hat pour trouver et vérifier l'état de différentes images UBI. En tant que créateur d'images de conteneurs sécurisés, vous pourriez être intéressé par ces deux types généraux d'images UBI :
-
UBI: Il existe des images UBI standard pour RHEL 7 et 8 (
ubi7/ubi
etubi8/ubi
), ainsi que des images minimales basées sur ces systèmes (ubi7/ubi-minimal
etubi8/ubi-mimimal
). Toutes ces images sont préconfigurées pour pointer vers des dépôts libres de logiciels RHEL que vous pouvez ajouter aux images de conteneurs que vous construisez, en utilisant les commandes standardyum
etdnf
. Red Hat encourage l'utilisation de ces images sur d'autres distributions, telles que Fedora et Ubuntu. -
Red Hat Software Collections: Faites une recherche dans le catalogue de l'écosystème Red Hat pour
rhscl/
afin de trouver des images créées pour être utilisées en tant qu'images de base pour des types d'applications spécifiques. Par exemple, il existe des images rhscl Apache httpd (rhscl/httpd-*
), Python (rhscl/python-*
), Ruby (rhscl/ruby-*
), Node.js (rhscl/nodejs-*
) et Perl (rhscl/perl-*
).
Gardez à l'esprit que si les images UBI sont librement disponibles et redistribuables, la prise en charge de ces images par Red Hat n'est disponible que par le biais d'abonnements aux produits Red Hat.
Voir Utilisation des images de base universelles de Red Hat dans la documentation de Red Hat Enterprise Linux pour obtenir des informations sur la manière d'utiliser et de construire sur des images UBI standard, minimales et init.
2.6.3. Analyse de sécurité dans RHEL
Pour les systèmes Red Hat Enterprise Linux (RHEL), l'analyse OpenSCAP est disponible à partir du paquetage openscap-utils
. Dans RHEL, vous pouvez utiliser la commande openscap-podman
pour rechercher les vulnérabilités dans les images. Voir Recherche de vulnérabilités dans les conteneurs et les images de conteneurs dans la documentation de Red Hat Enterprise Linux.
OpenShift Container Platform vous permet d'exploiter les scanners RHEL dans le cadre de votre processus CI/CD. Par exemple, vous pouvez intégrer des outils d'analyse statique du code qui testent les failles de sécurité dans votre code source et des outils d'analyse de la composition des logiciels qui identifient les bibliothèques open source afin de fournir des métadonnées sur ces bibliothèques, telles que les vulnérabilités connues.
2.6.3.1. Analyse des images OpenShift
Pour les images de conteneurs qui sont exécutées dans OpenShift Container Platform et qui sont tirées des registres Red Hat Quay, vous pouvez utiliser un opérateur pour lister les vulnérabilités de ces images. L'opérateur Red Hat Quay Container Security peut être ajouté à OpenShift Container Platform pour fournir des rapports de vulnérabilité pour les images ajoutées aux espaces de noms sélectionnés.
L'analyse des images de conteneurs pour Red Hat Quay est effectuée par l'analyseur de sécurité Clair. Dans Red Hat Quay, Clair peut rechercher et signaler les vulnérabilités dans les images construites à partir des logiciels des systèmes d'exploitation RHEL, CentOS, Oracle, Alpine, Debian et Ubuntu.
2.6.4. Intégration de l'analyse externe
OpenShift Container Platform utilise les annotations d'objets pour étendre les fonctionnalités. Les outils externes, tels que les scanners de vulnérabilité, peuvent annoter les objets image avec des métadonnées pour résumer les résultats et contrôler l'exécution du pod. Cette section décrit le format reconnu de cette annotation afin qu'elle puisse être utilisée de manière fiable dans les consoles pour afficher des données utiles aux utilisateurs.
2.6.4.1. Métadonnées de l'image
Il existe différents types de données relatives à la qualité de l'image, notamment les vulnérabilités des paquets et le respect des licences des logiciels libres. En outre, il peut y avoir plus d'un fournisseur de ces métadonnées. C'est pourquoi le format d'annotation suivant a été réservé :
quality.images.openshift.io/<qualityType>.<providerId> : {}
Composant | Description | Valeurs acceptables |
---|---|---|
| Type de métadonnées |
|
| Chaîne d'identification du prestataire |
|
2.6.4.1.1. Exemples de clés d'annotation
quality.images.openshift.io/vulnerability.blackduck: {} quality.images.openshift.io/vulnerability.jfrog: {} quality.images.openshift.io/license.blackduck: {} quality.images.openshift.io/vulnerability.openscap: {}
La valeur de l'annotation de la qualité de l'image est une donnée structurée qui doit respecter le format suivant :
Field | Nécessaire ? | Description | Type |
---|---|---|---|
| Oui | Nom d'affichage du prestataire | String |
| Oui | Horodatage de l'analyse | String |
| Non | Brève description | String |
| Oui | URL de la source d'information ou de plus amples détails. Requis pour que l'utilisateur puisse valider les données. | String |
| Non | Version du scanner | String |
| Non | Conformité réussie ou échouée | Booléen |
| Non | Résumé des problèmes constatés | Liste (voir tableau ci-dessous) |
Le champ summary
doit respecter le format suivant :
Field | Description | Type |
---|---|---|
| Afficher le libellé du composant (par exemple, "critique", "important", "modéré", "faible" ou "santé") | String |
| Données relatives à ce composant (par exemple, nombre de vulnérabilités trouvées ou score) | String |
|
Indice de composant permettant d'ordonner et d'attribuer une représentation graphique. La valeur est comprise entre | Integer |
| URL de la source d'information pour plus de détails. En option. | String |
2.6.4.1.2. Exemples de valeurs d'annotation
Cet exemple montre une annotation OpenSCAP pour une image avec des données de résumé de vulnérabilité et un booléen de conformité :
Annotation OpenSCAP
{ "name": "OpenSCAP", "description": "OpenSCAP vulnerability score", "timestamp": "2016-09-08T05:04:46Z", "reference": "https://www.open-scap.org/930492", "compliant": true, "scannerVersion": "1.2", "summary": [ { "label": "critical", "data": "4", "severityIndex": 3, "reference": null }, { "label": "important", "data": "12", "severityIndex": 2, "reference": null }, { "label": "moderate", "data": "8", "severityIndex": 1, "reference": null }, { "label": "low", "data": "26", "severityIndex": 0, "reference": null } ] }
Cet exemple montre la section Images de conteneurs du catalogue de l'écosystème Red Hat pour une image avec des données d'index de santé avec une URL externe pour des détails supplémentaires :
Annotation du catalogue de l'écosystème Red Hat
{ "name": "Red Hat Ecosystem Catalog", "description": "Container health index", "timestamp": "2016-09-08T05:04:46Z", "reference": "https://access.redhat.com/errata/RHBA-2016:1566", "compliant": null, "scannerVersion": "1.2", "summary": [ { "label": "Health index", "data": "B", "severityIndex": 1, "reference": null } ] }
2.6.4.2. Annoter les objets de l'image
Alors que les objets de flux d'images sont ce que l'utilisateur final d'OpenShift Container Platform utilise, les objets d'images sont annotés avec des métadonnées de sécurité. Les objets image sont de type "cluster-scoped", c'est-à-dire qu'ils pointent vers une seule image qui peut être référencée par de nombreux flux d'images et tags.
2.6.4.2.1. Exemple de commande CLI annotate
Remplacez <image>
par un condensé d'image, par exemple sha256:401e359e0f45bfdcf004e258b72e253fd07fba8cc5c6f2ed4f4608fb119ecc2
:
$ oc annotate image <image> \ quality.images.openshift.io/vulnerability.redhatcatalog='{ \ "name": "Red Hat Ecosystem Catalog", \ "description": "Container health index", \ "timestamp": "2020-06-01T05:04:46Z", \ "compliant": null, \ "scannerVersion": "1.2", \ "reference": "https://access.redhat.com/errata/RHBA-2020:2347", \ "summary": "[ \ { "label": "Health index", "data": "B", "severityIndex": 1, "reference": null } ]" }'
2.6.4.3. Contrôler l'exécution des pods
Utilisez la politique d'image images.openshift.io/deny-execution
pour contrôler par programme si une image peut être exécutée.
2.6.4.3.1. Exemple d'annotation
annotations: images.openshift.io/deny-execution: true
2.6.4.4. Référence d'intégration
Dans la plupart des cas, les outils externes tels que les scanners de vulnérabilité développent un script ou un plugin qui surveille les mises à jour de l'image, effectue l'analyse et annote l'objet image associé avec les résultats. Généralement, cette automatisation fait appel aux API REST d'OpenShift Container Platform 4.12 pour écrire l'annotation. Voir OpenShift Container Platform REST APIs pour des informations générales sur les API REST.
2.6.4.4.1. Exemple d'appel à l'API REST
L'exemple d'appel suivant, qui utilise curl
, remplace la valeur de l'annotation. Veillez à remplacer les valeurs de <token>
, <openshift_server>
, <image_id>
, et <image_annotation>
.
Appel de l'API du correctif
$ curl -X PATCH \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/merge-patch+json" \ https://<openshift_server>:6443/apis/image.openshift.io/v1/images/<image_id> \ --data '{ <image_annotation> }'
Voici un exemple de données de charge utile sur le site PATCH
:
Données d'appel de correctifs
{ "metadata": { "annotations": { "quality.images.openshift.io/vulnerability.redhatcatalog": "{ 'name': 'Red Hat Ecosystem Catalog', 'description': 'Container health index', 'timestamp': '2020-06-01T05:04:46Z', 'compliant': null, 'reference': 'https://access.redhat.com/errata/RHBA-2020:2347', 'summary': [{'label': 'Health index', 'data': '4', 'severityIndex': 1, 'reference': null}] }" } } }
Ressources supplémentaires