3.18. Construction non privilégiée d'images de conteneurs à l'aide de Buildah
L'exécution d'OpenShift Pipelines en tant qu'utilisateur root sur un conteneur peut exposer les processus du conteneur et l'hôte à d'autres ressources potentiellement malveillantes. Vous pouvez réduire ce type d'exposition en exécutant la charge de travail en tant qu'utilisateur non root spécifique dans le conteneur. Pour sécuriser les builds non privilégiés des images de conteneurs en utilisant Buildah, vous pouvez effectuer les étapes suivantes :
- Définir le compte de service personnalisé (SA) et la contrainte de contexte de sécurité (SCC).
-
Configurez Buildah pour qu'il utilise l'utilisateur
build
avec l'identifiant1000
. - Lancez une exécution de tâche avec une carte de configuration personnalisée ou intégrez-la à une exécution de pipeline.
3.18.1. Configuration d'un compte de service personnalisé et d'une contrainte de contexte de sécurité Copier lienLien copié sur presse-papiers!
La SA par défaut pipeline
permet d'utiliser un identifiant d'utilisateur en dehors de la plage de l'espace de noms. Pour réduire la dépendance à l'égard de la SA par défaut, vous pouvez définir une SA et un SCC personnalisés avec le rôle de cluster et les liaisons de rôle nécessaires pour l'utilisateur build
avec l'identifiant 1000
.
Procédure
Créez un SA et un SCC personnalisés avec le rôle de cluster et les liaisons de rôle nécessaires.
Exemple : SA et SCC personnalisés pour l'identifiant utilisé
1000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- Définir une SA personnalisée.
- 2
- Définir un SCC personnalisé créé sur la base de privilèges restreints, avec le champ
runAsUser
modifié. - 3
- Restreindre tout pod rattaché au SCC personnalisé par l'intermédiaire de la SA personnalisée à s'exécuter sous l'identité de l'utilisateur
1000
. - 4
- Définir un rôle de cluster qui utilise le SCC personnalisé.
- 5
- Lier le rôle de cluster qui utilise le SCC personnalisé à la SA personnalisée.
3.18.2. Configuration de Buildah pour l'utilisation de build user Copier lienLien copié sur presse-papiers!
Vous pouvez définir une tâche Buildah pour utiliser l'utilisateur build
avec l'identifiant 1000
.
Procédure
Créez une copie de la tâche de cluster
buildah
en tant que tâche ordinaire.tkn task create --from=buildah
$ tkn task create --from=buildah
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Modifiez la tâche
buildah
copiée.oc edit task buildah
$ oc edit task buildah
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple : Tâche Buildah modifiée avec l'utilisateur
build
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.18.3. Démarrage d'une tâche avec une carte de configuration personnalisée ou d'un pipeline Copier lienLien copié sur presse-papiers!
Après avoir défini la tâche de cluster Buildah personnalisée, vous pouvez créer un objet TaskRun
qui construit une image en tant qu'utilisateur build
avec l'identifiant d'utilisateur 1000
. En outre, vous pouvez intégrer l'objet TaskRun
dans un objet PipelineRun
.
Procédure
Créez un objet
TaskRun
avec des objets personnalisésConfigMap
etDockerfile
.Exemple : Une tâche qui exécute Buildah en tant qu'identifiant de l'utilisateur
1000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (Facultatif) Créer un pipeline et un cycle de pipeline correspondant.
Exemple : Une canalisation et un tronçon de canalisation correspondant
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Utilisez la tâche de cluster
git-clone
pour récupérer la source contenant un fichier Docker et le construire à l'aide de la tâche Buildah modifiée. - 2
- Se référer à la tâche Buildah modifiée.
- 3
- Partager les données entre la tâche
git-clone
et la tâche Buildah modifiée à l'aide d'une revendication de volume persistant (PVC) créée automatiquement par le contrôleur.
- Lancer l'exécution de la tâche ou du pipeline.
3.18.4. Limites des versions non privilégiées Copier lienLien copié sur presse-papiers!
Le processus de construction sans privilège fonctionne avec la plupart des objets Dockerfile
. Cependant, certaines limitations connues peuvent entraîner l'échec de la construction :
-
L'utilisation de l'option
--mount=type=cache
peut échouer en raison de problèmes de permissions non nécessaires. Pour plus d'informations, voir cet article. -
L'utilisation de l'option
--mount=type=secret
échoue car le montage des ressources nécessite des capacités supplémentaires qui ne sont pas fournies par le SCC personnalisé.
Ressources complémentaires