From 49d19584c6e97d332e301f2da3598acc4e696ea1 Mon Sep 17 00:00:00 2001 From: ptux Date: Thu, 18 Nov 2021 00:09:58 +0900 Subject: [PATCH] translate distribute-credentials-secure into Japanese --- .../distribute-credentials-secure.md | 260 ++++++++++++++++++ .../pod-multiple-secret-env-variable.yaml | 19 ++ .../pods/inject/pod-secret-envFrom.yaml | 11 + .../pod-single-secret-env-variable.yaml | 14 + 4 files changed, 304 insertions(+) create mode 100644 content/ja/docs/tasks/inject-data-application/distribute-credentials-secure.md create mode 100644 content/ja/examples/pods/inject/pod-multiple-secret-env-variable.yaml create mode 100644 content/ja/examples/pods/inject/pod-secret-envFrom.yaml create mode 100644 content/ja/examples/pods/inject/pod-single-secret-env-variable.yaml diff --git a/content/ja/docs/tasks/inject-data-application/distribute-credentials-secure.md b/content/ja/docs/tasks/inject-data-application/distribute-credentials-secure.md new file mode 100644 index 0000000000..772ada5e20 --- /dev/null +++ b/content/ja/docs/tasks/inject-data-application/distribute-credentials-secure.md @@ -0,0 +1,260 @@ +--- +title: Secretsで安全にクレデンシャルを配布する +content_type: task +weight: 50 +min-kubernetes-server-version: v1.6 +--- + + +このページでは、パスワードや暗号化キーなどの機密データをPodに安全に注入する方法を紹介します。 + +## {{% heading "prerequisites" %}} + + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +### 秘密データをbase64でエンコードする + +ユーザー名 `my-app` とパスワード `39528$vdg7Jb` の2つの秘密データが必要だとします。 +まず、base64エンコーディングツールを使って、ユーザ名とパスワードをbase64表現に変換します。 +ここでは、手軽に入手できるbase64プログラムを使った例を紹介します: + +```shell +echo -n 'my-app' | base64 +echo -n '39528$vdg7Jb' | base64 +``` + +出力結果によると、ユーザ名のbase64表現は `bXktYXBw`で、 +パスワードのbase64表現は `Mzk1MjgkdmRnN0pi` です。 + +{{< caution >}} +OSから信頼されているローカルツールを使用することで、外部ツールのセキュリティリスクを低減することができます。 +{{< /caution >}} + + + + +## Secret を作成する + +以下はユーザー名とパスワードを保持するSecretを作成するために使用できる設定ファイル: + +{{< codenew file="pods/inject/secret.yaml" >}} + +1. Secret を作成する + + ```shell + kubectl apply -f https://k8s.io/examples/pods/inject/secret.yaml + ``` + +1. Secret の情報を取得する + + ```shell + kubectl get secret test-secret + ``` + + 出力: + + ``` + NAME TYPE DATA AGE + test-secret Opaque 2 1m + ``` + +1. Secret の詳細な情報を取得する: + + ```shell + kubectl describe secret test-secret + ``` + + 出力: + + ``` + Name: test-secret + Namespace: default + Labels: + Annotations: + + Type: Opaque + + Data + ==== + password: 13 bytes + username: 7 bytes + ``` + +### kubectl で Secret を作成する + +base64エンコードの手順を省略したい場合は、`kubectl create secret`コマンドで +同じSecretを作成することができます。 + +例えば: + +```shell +kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb' +``` + +先ほどの詳細なアプローチでは 各ステップを明示的に実行し、何が起こっているかを示していますが、 +`kubectl create secret` の方が便利です。 + + +## Volume にある秘密情報をアクセスする Pod を作成する + +これは Pod の作成に使用できる設定ファイルです。 + +{{< codenew file="pods/inject/secret-pod.yaml" >}} + +1. Pod を作成する: + + ```shell + kubectl apply -f https://k8s.io/examples/pods/inject/secret-pod.yaml + ``` + +1. Pod がランニング状態にあるのを確認する: + + ```shell + kubectl get pod secret-test-pod + ``` + + 出力: + ``` + NAME READY STATUS RESTARTS AGE + secret-test-pod 1/1 Running 0 42m + ``` + +1. Pod の中にあるコンテナにシェルを実行する + + ```shell + kubectl exec -i -t secret-test-pod -- /bin/bash + ``` + +1. 秘密のデータは `/etc/secret-volume` にマウントされたボリュームを介してコンテナに公開されます。 + + ディレクトリ `/etc/secret-volume` 中のファイルの一覧を確認する: + ```shell + # Run this in the shell inside the container + ls /etc/secret-volume + ``` + `password`と`username` 2つのファイル名が出力される: + ``` + password username + ``` + +1. `username` と `password` ファイルの中身を表示する: + + ```shell + # Run this in the shell inside the container + echo "$( cat /etc/secret-volume/username )" + echo "$( cat /etc/secret-volume/password )" + + ``` + 出力: + ``` + my-app + 39528$vdg7Jb + ``` + +## Secret でコンテナの環境変数を定義する + +### 単一の Secret でコンテナの環境変数を定義する + +* Secret の中で key-value ペアで環境変数を定義する: + + ```shell + kubectl create secret generic backend-user --from-literal=backend-username='backend-admin' + ``` + +* Secret で定義された`backend-username`の値をPodの環境変数`SECRET_USERNAME`に割り当てます。 + + {{< codenew file="pods/inject/pod-single-secret-env-variable.yaml" >}} + +* Pod を作成する: + + ```shell + kubectl create -f https://k8s.io/examples/pods/inject/pod-single-secret-env-variable.yaml + ``` + +* コンテナの環境変数 `SECRET_USERNAME` の中身を表示する: + + ```shell + kubectl exec -i -t env-single-secret -- /bin/sh -c 'echo $SECRET_USERNAME' + ``` + + 出力: + ``` + backend-admin + ``` + +### 複数の Secret からコンテナの環境変数を定義する + +* 前述の例と同様に、まず Secret を作成します: + + ```shell + kubectl create secret generic backend-user --from-literal=backend-username='backend-admin' + kubectl create secret generic db-user --from-literal=db-username='db-admin' + ``` + +* Pod の中で環境変数を定義する: + + {{< codenew file="pods/inject/pod-multiple-secret-env-variable.yaml" >}} + +* Pod を作成する: + + ```shell + kubectl create -f https://k8s.io/examples/pods/inject/pod-multiple-secret-env-variable.yaml + ``` + +* コンテナの環境変数を表示する: + + ```shell + kubectl exec -i -t envvars-multiple-secrets -- /bin/sh -c 'env | grep _USERNAME' + ``` + 出力: + ``` + DB_USERNAME=db-admin + BACKEND_USERNAME=backend-admin + ``` + + +## Secret のすべての key-value ペアを環境変数として設定する + +{{< note >}} +この機能は Kubernetes v1.6 以降から利用可能 +{{< /note >}} + +* 複数 key-value ペアを含む Secret を作成する + + ```shell + kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb' + ``` + +* envFromを使用してSecretのすべてのデータをコンテナの環境変数として定義します。Secret のキーが Pod の環境変数名になります。 + + {{< codenew file="pods/inject/pod-secret-envFrom.yaml" >}} + +* Pod を作成する: + + ```shell + kubectl create -f https://k8s.io/examples/pods/inject/pod-secret-envFrom.yaml + ``` + +* `username` と `password` コンテナの環境変数を表示する + + ```shell + kubectl exec -i -t envfrom-secret -- /bin/sh -c 'echo "username: $username\npassword: $password\n"' + ``` + + 出力: + ``` + username: my-app + password: 39528$vdg7Jb + ``` + +### 参考文献 + +* [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core) +* [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core) +* [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core) + +## {{% heading "whatsnext" %}} + +* [Secrets](/docs/concepts/configuration/secret/) についてもっと知る. +* [Volumes](/docs/concepts/storage/volumes/) について. diff --git a/content/ja/examples/pods/inject/pod-multiple-secret-env-variable.yaml b/content/ja/examples/pods/inject/pod-multiple-secret-env-variable.yaml new file mode 100644 index 0000000000..f285e41932 --- /dev/null +++ b/content/ja/examples/pods/inject/pod-multiple-secret-env-variable.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Pod +metadata: + name: envvars-multiple-secrets +spec: + containers: + - name: envars-test-container + image: nginx + env: + - name: BACKEND_USERNAME + valueFrom: + secretKeyRef: + name: backend-user + key: backend-username + - name: DB_USERNAME + valueFrom: + secretKeyRef: + name: db-user + key: db-username diff --git a/content/ja/examples/pods/inject/pod-secret-envFrom.yaml b/content/ja/examples/pods/inject/pod-secret-envFrom.yaml new file mode 100644 index 0000000000..eb1d3213ef --- /dev/null +++ b/content/ja/examples/pods/inject/pod-secret-envFrom.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: envfrom-secret +spec: + containers: + - name: envars-test-container + image: nginx + envFrom: + - secretRef: + name: test-secret diff --git a/content/ja/examples/pods/inject/pod-single-secret-env-variable.yaml b/content/ja/examples/pods/inject/pod-single-secret-env-variable.yaml new file mode 100644 index 0000000000..af4cf8732f --- /dev/null +++ b/content/ja/examples/pods/inject/pod-single-secret-env-variable.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: env-single-secret +spec: + containers: + - name: envars-test-container + image: nginx + env: + - name: SECRET_USERNAME + valueFrom: + secretKeyRef: + name: backend-user + key: backend-username