見出し画像

KubernetesのSecretを使って安全に情報を扱おう

アプリケーションを運用していると、「APIキーやパスワードをどうやって安全に渡す?」という課題に直面することがありますよね。設定ファイルに書くのは危険だし、環境変数で管理するだけだと不安…。そんなときに役立つのがKubernetesの「Secret」です!今回は、Secretを使って機密情報をPod内にファイルとして安全に配置する方法を見ていきます。


Secretを作成してみよう

まず、Secretを作成しますが、今回はYAMLファイルを使った例を紹介します。コマンドラインで直接作る方法もありますが、YAMLならコード管理にも便利です。

SecretのYAML例

以下は、Secretを作成するためのYAMLファイルの例です。このファイルをsecret.yamlとして保存してください。

apiVersion: v1
kind: Secret
metadata:
  name: sample-secret
type: Opaque
data:
  username: YWRtaW4=  # Base64でエンコードされた値
  password: c2VjcmV0MTIz

ポイント:

  • Base64エンコード
    値はBase64エンコードされた文字列で指定します。例えば、echo -n 'admin' | base64 コマンドで「admin」をエンコードできます。

    1. username: YWRtaW4= # 'admin' をBase64化した結果 password: c2VjcmV0MTIz # 'secret123' をBase64化した結果

このYAMLを適用するには、以下のコマンドを実行します。

kubectl apply -f secret.yaml

PodにSecretをマウントする設定

作成したSecretをPodにマウントして、ファイルとして利用できるようにしましょう。以下のYAMLはPodの設定例です。

Pod設定のYAML例

apiVersion: v1
kind: Pod
metadata:
  name: secret-demo
spec:
  containers:
    - name: app
      image: busybox
      command: [ "sleep", "3600" ]
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/app-secret  # Secretが配置されるディレクトリ
          readOnly: true
  volumes:
    - name: secret-volume
      secret:
        secretName: sample-secret

解説:

(1) volumeMounts の mountPath
ここで指定したパスが、Pod内でSecretが配置されるディレクトリになります。例えば、/etc/app-secretを指定すると、そのディレクトリ内に以下のファイルが作成されます。

  • /etc/app-secret/username

  • /etc/app-secret/password

これにより、アプリケーションは簡単にファイルを読み込むことでSecretの値を利用できます。

(2) readOnly
マウントされたボリュームを読み取り専用にすることで、アプリケーションが誤ってSecretを変更するリスクを防ぎます。

(3) volumes の secretName
ここで、先ほど作成したsample-secretを指定しています。指定したSecretがマウントされる仕組みです。


実際に動作確認

Pod内でSecretが正しくマウントされているか確認してみましょう。

  1. Podをデプロイします。

kubectl apply -f pod.yaml
  1. 実行中のPod内でSecretの内容を確認します。

kubectl exec -it secret-demo -- cat /etc/app-secret/username
# 出力: admin
kubectl exec -it secret-demo -- cat /etc/app-secret/password
# 出力: secret123

アプリケーションが機密情報を安全に利用できる状態になっていますね!


まとめ

Secretを使えば、Kubernetes環境で機密情報を安全に管理し、アプリケーションに渡すことができます。今回のポイントを振り返ると:

  • Secretの作成はYAMLで管理可能
    コードとして扱えるので、バージョン管理もしやすくなります。

  • Pod内でファイルとして利用可能
    volumeMounts の mountPath を工夫すれば、アプリケーションが必要とするディレクトリ構造を自由に設定できます。

  • 安全性の向上
    Base64で暗号化し、読み取り専用としてマウントすることでリスクを最小限に抑えます。

この仕組みを使って、よりセキュアなアプリケーション運用を実現してみてください!

いいなと思ったら応援しよう!