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」をエンコードできます。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が正しくマウントされているか確認してみましょう。
Podをデプロイします。
kubectl apply -f pod.yaml
実行中の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で暗号化し、読み取り専用としてマウントすることでリスクを最小限に抑えます。
この仕組みを使って、よりセキュアなアプリケーション運用を実現してみてください!