Skip to content

Commit ecd90c8

Browse files
authored
Merge pull request #39631 from k0rventen/origin/dev-1.26-fr
[fr] add french translation for task inject-data-application/distribute-credentials-secure.md
2 parents 74746dd + 7bf363a commit ecd90c8

File tree

7 files changed

+443
-0
lines changed

7 files changed

+443
-0
lines changed
Lines changed: 355 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,355 @@
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éez le Secret:
45+
46+
```shell
47+
kubectl apply -f https://k8s.io/examples/pods/inject/secret.yaml
48+
```
49+
50+
1. Listez 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. Affichez 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
154+
recherche les fichiers contenus dans le dossier du champ `mountPath`.
155+
Chaque clé du Secret `data` sera exposée comme un fichier à l'intérieur de ce dossier.
156+
157+
### Monter les données du Secret sur des chemins spécifiques
158+
159+
Vous pouvez contrôler les chemins sur lesquels les données des Secrets sont montées.
160+
Utilisez le champ `.spec.volumes[].secret.items` pour changer le
161+
chemin cible de chaque donnée:
162+
163+
```yaml
164+
apiVersion: v1
165+
kind: Pod
166+
metadata:
167+
name: mypod
168+
spec:
169+
containers:
170+
- name: mypod
171+
image: redis
172+
volumeMounts:
173+
- name: foo
174+
mountPath: "/etc/foo"
175+
readOnly: true
176+
volumes:
177+
- name: foo
178+
secret:
179+
secretName: mysecret
180+
items:
181+
- key: username
182+
path: my-group/my-username
183+
```
184+
185+
Voici ce qu'il se passe lorsque vous déployez ce Pod:
186+
187+
* La clé `username` du Secret `mysecret` est montée dans le container sur le chemin
188+
`/etc/foo/my-group/my-username` au lieu de `/etc/foo/username`.
189+
* La clé `password` du Secret n'est pas montée dans le container.
190+
191+
Si vous listez de manière explicite les clés en utilisant le champ `.spec.volumes[].secret.items`,
192+
il est important de prendre en considération les points suivants:
193+
194+
* Seules les clés listées dans le champ `items` seront montées.
195+
* Pour monter toutes les clés du Secret, toutes doivent être
196+
définies dans le champ `items`.
197+
* Toutes les clés définies doivent exister dans le Secret.
198+
Sinon, le volume ne sera pas créé.
199+
200+
### Appliquer des permissions POSIX aux données
201+
202+
Vous pouvez appliquer des permissions POSIX pour une clé d'un Secret. Si vous n'en configurez pas, les permissions seront par défaut `0644`.
203+
Vous pouvez aussi définir des permissions pour tout un Secret, et redéfinir les permissions pour chaque clé si nécessaire.
204+
205+
Par exemple, il est possible de définir un mode par défaut:
206+
207+
```yaml
208+
apiVersion: v1
209+
kind: Pod
210+
metadata:
211+
name: mypod
212+
spec:
213+
containers:
214+
- name: mypod
215+
image: redis
216+
volumeMounts:
217+
- name: foo
218+
mountPath: "/etc/foo"
219+
volumes:
220+
- name: foo
221+
secret:
222+
secretName: mysecret
223+
defaultMode: 0400
224+
```
225+
226+
Le Secret sera monté sur `/etc/foo`; tous les fichiers créés par le secret
227+
auront des permissions de type `0400`.
228+
229+
{{< note >}}
230+
Si vous définissez un Pod en utilisant le format JSON, il est important de
231+
noter que la spécification JSON ne supporte pas le système octal, et qu'elle
232+
comprendra la valeur `0400` comme la valeur _décimale_ `400`.
233+
En JSON, utilisez plutôt l'écriture décimale pour le champ `defaultMode`.
234+
Si vous utilisez le format YAML, vous pouvez utiliser le système octal
235+
pour définir `defaultMode`.
236+
{{< /note >}}
237+
238+
## Définir des variables d'environnement avec des Secrets
239+
240+
Il est possible de monter les données des Secrets comme variables d'environnement dans vos containers.
241+
242+
Si un container consomme déja un Secret en variables d'environnement,
243+
la mise à jour de ce Secret ne sera pas répercutée dans le container tant
244+
qu'il n'aura pas été redémarré. Il existe cependant des solutions tierces
245+
permettant de redémarrer les containers lors d'une mise à jour du Secret.
246+
247+
### Définir une variable d'environnement à partir d'un seul Secret
248+
249+
* Définissez une variable d'environnement et sa valeur à l'intérieur d'un Secret:
250+
251+
```shell
252+
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
253+
```
254+
255+
* Assignez la valeur de `backend-username` définie dans le Secret
256+
à la variable d'environnement `SECRET_USERNAME` dans la configuration du Pod.
257+
258+
{{< codenew file="pods/inject/pod-single-secret-env-variable.yaml" >}}
259+
260+
* Créez le Pod:
261+
262+
```shell
263+
kubectl create -f https://k8s.io/examples/pods/inject/pod-single-secret-env-variable.yaml
264+
```
265+
266+
* À l'intérieur d'une session shell, affichez le contenu de la variable
267+
d'environnement `SECRET_USERNAME`:
268+
269+
```shell
270+
kubectl exec -i -t env-single-secret -- /bin/sh -c 'echo $SECRET_USERNAME'
271+
```
272+
273+
Le résultat est:
274+
```
275+
backend-admin
276+
```
277+
278+
### Définir des variables d'environnement à partir de plusieurs Secrets
279+
280+
* Comme précédemment, créez d'abord les Secrets:
281+
282+
```shell
283+
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
284+
kubectl create secret generic db-user --from-literal=db-username='db-admin'
285+
```
286+
287+
* Définissez les variables d'environnement dans la configuration du Pod.
288+
289+
{{< codenew file="pods/inject/pod-multiple-secret-env-variable.yaml" >}}
290+
291+
* Créez le Pod:
292+
293+
```shell
294+
kubectl create -f https://k8s.io/examples/pods/inject/pod-multiple-secret-env-variable.yaml
295+
```
296+
297+
* Dans un shell, listez les variables d'environnement du container:
298+
299+
```shell
300+
kubectl exec -i -t envvars-multiple-secrets -- /bin/sh -c 'env | grep _USERNAME'
301+
```
302+
Le résultat est:
303+
```
304+
DB_USERNAME=db-admin
305+
BACKEND_USERNAME=backend-admin
306+
```
307+
308+
309+
## Configurez toutes les paires de clé-valeur d'un Secret comme variables d'environnement
310+
311+
{{< note >}}
312+
Cette fonctionnalité n'est disponible que dans les versions de Kubernetes
313+
égales ou supérieures à v1.6.
314+
{{< /note >}}
315+
316+
* Créez un Secret contenant plusieurs paires de clé-valeur:
317+
318+
```shell
319+
kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb'
320+
```
321+
322+
* Utilisez `envFrom` pour définir toutes les données du Secret comme variables
323+
d'environnement. Les clés du Secret deviendront les noms des variables
324+
d'environnement à l'intérieur du Pod.
325+
326+
{{< codenew file="pods/inject/pod-secret-envFrom.yaml" >}}
327+
328+
* Créez le Pod:
329+
330+
```shell
331+
kubectl create -f https://k8s.io/examples/pods/inject/pod-secret-envFrom.yaml
332+
```
333+
334+
* Dans votre shell, affichez les variables d'environnement `username` et `password`:
335+
336+
```shell
337+
kubectl exec -i -t envfrom-secret -- /bin/sh -c 'echo "username: $username\npassword: $password\n"'
338+
```
339+
340+
Le résultat est:
341+
```
342+
username: my-app
343+
password: 39528$vdg7Jb
344+
```
345+
346+
### Références
347+
348+
* [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core)
349+
* [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core)
350+
* [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core)
351+
352+
## {{% heading "whatsnext" %}}
353+
354+
* En savoir plus sur les [Secrets](/docs/concepts/configuration/secret/).
355+
* En savoir plus sur les [Volumes](/docs/concepts/storage/volumes/).
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: envvars-multiple-secrets
5+
spec:
6+
containers:
7+
- name: envars-test-container
8+
image: nginx
9+
env:
10+
- name: BACKEND_USERNAME
11+
valueFrom:
12+
secretKeyRef:
13+
name: backend-user
14+
key: backend-username
15+
- name: DB_USERNAME
16+
valueFrom:
17+
secretKeyRef:
18+
name: db-user
19+
key: db-username
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: envfrom-secret
5+
spec:
6+
containers:
7+
- name: envars-test-container
8+
image: nginx
9+
envFrom:
10+
- secretRef:
11+
name: test-secret

0 commit comments

Comments
 (0)