Skip to content

Commit 5e4a37a

Browse files
author
k0rventen
committed
add french translation for task 'Distribute Credentials Securely Using Secrets'
1 parent 0f12ff8 commit 5e4a37a

File tree

1 file changed

+354
-0
lines changed

1 file changed

+354
-0
lines changed
Lines changed: 354 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,354 @@
1+
---
2+
title: Distribuer des données sensibles de manière sécurisée avec les Secrets
3+
content_type: task
4+
weight: 50
5+
min-kubernetes-server-version: v1.6
6+
---
7+
8+
<!-- overview -->
9+
10+
Cette page montre comment injecter des données sensibles comme des mots de passe ou des clés de chiffrement dans des Pods.
11+
12+
## {{% heading "prerequisites" %}}
13+
14+
{{< include "task-tutorial-prereqs.md" >}}
15+
16+
### Encoder vos données en format base64
17+
18+
Supposons que vous avez deux données sensibles: un identifiant `my-app` et un
19+
mot de passe
20+
`39528$vdg7Jb`. Premièrement, utilisez un outil capable d'encoder vos données
21+
dans un format base64. Voici un exemple en utilisant le programme base64:
22+
```shell
23+
echo -n 'my-app' | base64
24+
echo -n '39528$vdg7Jb' | base64
25+
```
26+
27+
Le résultat montre que la représentation base64 de l'utilisateur est `bXktYXBw`,
28+
et que la représentation base64 du mot de passe est `Mzk1MjgkdmRnN0pi`.
29+
30+
{{< caution >}}
31+
Utilisez un outil local approuvé par votre système d'exploitation
32+
afin de réduire les risques de sécurité liés à l'utilisation d'un outil externe.
33+
{{< /caution >}}
34+
35+
<!-- steps -->
36+
37+
## Créer un Secret
38+
39+
Voici un fichier de configuration que vous pouvez utiliser pour créer un Secret
40+
qui contiendra votre identifiant et mot de passe:
41+
42+
{{< codenew file="pods/inject/secret.yaml" >}}
43+
44+
1. Créer le Secret
45+
46+
```shell
47+
kubectl apply -f https://k8s.io/examples/pods/inject/secret.yaml
48+
```
49+
50+
1. Lister les informations du Secret:
51+
52+
```shell
53+
kubectl get secret test-secret
54+
```
55+
56+
Résultat:
57+
58+
```
59+
NAME TYPE DATA AGE
60+
test-secret Opaque 2 1m
61+
```
62+
63+
1. Afficher les informations détaillées du Secret:
64+
65+
```shell
66+
kubectl describe secret test-secret
67+
```
68+
69+
Résultat:
70+
71+
```
72+
Name: test-secret
73+
Namespace: default
74+
Labels: <none>
75+
Annotations: <none>
76+
77+
Type: Opaque
78+
79+
Data
80+
====
81+
password: 13 bytes
82+
username: 7 bytes
83+
```
84+
85+
### Créer un Secret en utilisant kubectl
86+
87+
Si vous voulez sauter l'étape d'encodage, vous pouvez créer le même Secret
88+
en utilisant la commande `kubectl create secret`. Par exemple:
89+
90+
```shell
91+
kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
92+
```
93+
94+
Cette approche est plus pratique. La façon de faire plus explicite
95+
montrée précédemment permet de démontrer et comprendre le fonctionnement des Secrets.
96+
97+
98+
## Créer un Pod qui a accès aux données sensibles à travers un Volume
99+
100+
Voici un fichier de configuration qui permet de créer un Pod:
101+
102+
{{< codenew file="pods/inject/secret-pod.yaml" >}}
103+
104+
1. Créez le Pod:
105+
106+
```shell
107+
kubectl apply -f https://k8s.io/examples/pods/inject/secret-pod.yaml
108+
```
109+
110+
1. Vérifiez que le Pod est opérationnel:
111+
112+
```shell
113+
kubectl get pod secret-test-pod
114+
```
115+
116+
Résultat:
117+
```
118+
NAME READY STATUS RESTARTS AGE
119+
secret-test-pod 1/1 Running 0 42m
120+
```
121+
122+
1. Exécutez une session shell dans le Container qui est dans votre Pod:
123+
```shell
124+
kubectl exec -i -t secret-test-pod -- /bin/bash
125+
```
126+
127+
1. Les données sont exposées au container à travers un Volume monté sur
128+
`/etc/secret-volume`.
129+
130+
Dans votre shell, listez les fichiers du dossier `/etc/secret-volume`:
131+
```shell
132+
# À exécuter à l'intérieur du container
133+
ls /etc/secret-volume
134+
```
135+
Le résultat montre deux fichiers, un pour chaque donnée du Secret:
136+
```
137+
password username
138+
```
139+
140+
1. Toujours dans le shell, affichez le contenu des fichiers
141+
`username` et `password`:
142+
```shell
143+
# À exécuter à l'intérieur du container
144+
echo "$( cat /etc/secret-volume/username )"
145+
echo "$( cat /etc/secret-volume/password )"
146+
```
147+
Le résultat doit contenir votre identifiant et mot de passe:
148+
```
149+
my-app
150+
39528$vdg7Jb
151+
```
152+
153+
Vous pouvez alors modifier votre image ou votre ligne de commande pour que le programme recherche les fichiers contenus dans le dossier `mountPath`.
154+
Chaque clé du Secret `data` sera exposé comme un fichier à l'intérieur du dossier.
155+
156+
### Monter les données du Secret sur des chemins spécifiques
157+
158+
Vous pouvez contrôler les chemins sur lesquels les données des Secrets sont montées.
159+
Utilisez le champ `.spec.volumes[].secret.items` pour changer le
160+
chemin cible de chaque donnée:
161+
162+
```yaml
163+
apiVersion: v1
164+
kind: Pod
165+
metadata:
166+
name: mypod
167+
spec:
168+
containers:
169+
- name: mypod
170+
image: redis
171+
volumeMounts:
172+
- name: foo
173+
mountPath: "/etc/foo"
174+
readOnly: true
175+
volumes:
176+
- name: foo
177+
secret:
178+
secretName: mysecret
179+
items:
180+
- key: username
181+
path: my-group/my-username
182+
```
183+
184+
Voici ce qu'il se passe lorsque vous déployez ce Pod:
185+
186+
* La clé `username` du Secret `mysecret` est montée dans le container sur le chemin
187+
`/etc/foo/my-group/my-username` au lieu de `/etc/foo/username`.
188+
* La clé `password` du Secret n'est pas montée dans le container.
189+
190+
Si vous listez de manière explicite les clés en utilisant le champ `.spec.volumes[].secret.items`,
191+
il est important de prendre en considération les points suivants:
192+
193+
* Seules les clés listées dans le champ `items` seront montées.
194+
* Pour monter toutes les clés du Secret, toutes doivent être
195+
définies dans le champ `items`.
196+
* Toutes les clés définis doivent exister dans le Secret.
197+
Sinon, le volume ne sera pas créé.
198+
199+
### Appliquer des permissions POSIX aux données
200+
201+
Vous pouvez appliquer des permissions POSIX pour une clé d'un Secret. Si vous n'en configurez pas, les permissions seront par défault `0644`.
202+
Vous pouvez aussi définir des permissions pour tout un Secret, et redéfinir les permissions pour chaque clé si nécessaire.
203+
204+
Par exemple, il est possible de définir un mode par défaut:
205+
206+
```yaml
207+
apiVersion: v1
208+
kind: Pod
209+
metadata:
210+
name: mypod
211+
spec:
212+
containers:
213+
- name: mypod
214+
image: redis
215+
volumeMounts:
216+
- name: foo
217+
mountPath: "/etc/foo"
218+
volumes:
219+
- name: foo
220+
secret:
221+
secretName: mysecret
222+
defaultMode: 0400
223+
```
224+
225+
Le Secret sera monté sur `/etc/foo`; tous les fichiers créés par le secret
226+
auront des permissions de type `0400`.
227+
228+
{{< note >}}
229+
Si vous définissez un Pod en utilisant le format JSON, il est important de
230+
noter que la spécification JSON ne supporte pas le système octal, et qu'elle
231+
comprendra la valeur `0400` comme la valeur _décimale_ `400`.
232+
En JSON, utilisez plutôt l'écriture décimale pour le champ `defaultMode`.
233+
Si vous utilisez YAML, vous pouvez utiliser le système octal
234+
pour définir `defaultMode`.
235+
{{< /note >}}
236+
237+
## Définir des variables d'environnement avec des Secrets
238+
239+
Il est possible de monter les données de Secrets comme variables d'environnement dans vos containers.
240+
241+
Si un container consomme déja un Secret en variables d'environnement,
242+
la mise à jour de ce Secret ne sera pas répercutée tant qu'il n'aura pas été
243+
redémarré. Il existe cependant des solutions tierces permettant de
244+
redémarrer les containers lors d'une mise à jour du Secret.
245+
246+
### Définir une variable d'environnement à partir d'un seul Secret
247+
248+
* Définissez une variable d'environnement et sa valeur à l'intérieur d'un Secret:
249+
250+
```shell
251+
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
252+
```
253+
254+
* Assignez la valeur de `backend-username` définie dans le Secret
255+
à la variable d'environnement `SECRET_USERNAME` dans la configuration du Pod.
256+
257+
{{< codenew file="pods/inject/pod-single-secret-env-variable.yaml" >}}
258+
259+
* Créez le Pod:
260+
261+
```shell
262+
kubectl create -f https://k8s.io/examples/pods/inject/pod-single-secret-env-variable.yaml
263+
```
264+
265+
* À l'intérieur d'une session shell, affichez le contenu de la variable
266+
d'environnement `SECRET_USERNAME`:
267+
268+
```shell
269+
kubectl exec -i -t env-single-secret -- /bin/sh -c 'echo $SECRET_USERNAME'
270+
```
271+
272+
Le résultat est:
273+
```
274+
backend-admin
275+
```
276+
277+
### Définir des variables d'environnement à partir de plusieurs Secrets
278+
279+
* Comme précédemment, créez d'abord les Secrets:
280+
281+
```shell
282+
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
283+
kubectl create secret generic db-user --from-literal=db-username='db-admin'
284+
```
285+
286+
* Définissez les variables d'environnement dans la configuration du Pod.
287+
288+
{{< codenew file="pods/inject/pod-multiple-secret-env-variable.yaml" >}}
289+
290+
* Créez le Pod:
291+
292+
```shell
293+
kubectl create -f https://k8s.io/examples/pods/inject/pod-multiple-secret-env-variable.yaml
294+
```
295+
296+
* Dans un shell, listez les variables d'environnement du container:
297+
298+
```shell
299+
kubectl exec -i -t envvars-multiple-secrets -- /bin/sh -c 'env | grep _USERNAME'
300+
```
301+
Le résultat est
302+
```
303+
DB_USERNAME=db-admin
304+
BACKEND_USERNAME=backend-admin
305+
```
306+
307+
308+
## Configurez toutes les paires de clé-valeur d'un Secret comme variables d'environnement
309+
310+
{{< note >}}
311+
Cette fonctionnalité n'est disponible que dans les versions de Kubernetes
312+
égales ou supérieures à v1.6.
313+
{{< /note >}}
314+
315+
* Créez un Secret contenant plusieurs paires de clé-valeur
316+
317+
```shell
318+
kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb'
319+
```
320+
321+
* Utilisez `envFrom` pour définir toutes les données du Secret comme variables
322+
d'environnement. Les clés du Secret deviendront les noms des variables
323+
d'environnement à l'intérieur du Pod.
324+
325+
{{< codenew file="pods/inject/pod-secret-envFrom.yaml" >}}
326+
327+
* Créez le Pod:
328+
329+
```shell
330+
kubectl create -f https://k8s.io/examples/pods/inject/pod-secret-envFrom.yaml
331+
```
332+
333+
* Dans votre shell, affichez les variables d'environnement `username` et `password`
334+
335+
```shell
336+
kubectl exec -i -t envfrom-secret -- /bin/sh -c 'echo "username: $username\npassword: $password\n"'
337+
```
338+
339+
Le résultat est
340+
```
341+
username: my-app
342+
password: 39528$vdg7Jb
343+
```
344+
345+
### Références
346+
347+
* [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core)
348+
* [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core)
349+
* [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core)
350+
351+
## {{% heading "whatsnext" %}}
352+
353+
* En savoir plus sur les [Secrets](/docs/concepts/configuration/secret/).
354+
* En savoir plus sur les [Volumes](/docs/concepts/storage/volumes/).

0 commit comments

Comments
 (0)