0Pricing
DevOps Bootcamp · レッスン

ConfigMapsとSecrets

ConfigMapsとSecretsを使用して、Kubernetesのデプロイメント内で設定データや機密情報を安全に管理します。

「ConfigMapsとSecrets」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

ConfigMapとSecretの概要

ようこそ。このレッスンでは、Kubernetesで設定データと機密情報を管理する方法を学びます。柔軟で安全なアプリケーションのデプロイに欠かせない2つのツール、ConfigMapとSecretについて説明します。

ConfigMapsとSecrets — イラスト1

設定を外部化する理由

データベースの認証情報やAPIキーを、アプリケーションのDockerイメージに直接ハードコードする状況を想像してください。更新が難しくなり、機密データも露出してしまいます。

  • 柔軟性の低下:変更するにはイメージを再ビルドする必要があります。
  • セキュリティリスク:機密データがイメージに埋め込まれます。
  • 環境依存:開発環境と本番環境など、環境ごとに異なる設定が必要です。

ConfigMap:機密性のないデータ

ConfigMapは、機密性のない設定データをキーと値のペアとして保存するKubernetesオブジェクトです。ログレベルやAPIエンドポイントなど、アプリケーションの設定をまとめて管理する場所と考えることができます。

設定をアプリケーションコードから分離できるため、デプロイの移植性が高まり、管理もしやすくなります。

ConfigMapの定義

ConfigMapは、リテラル値、ファイル、またはディレクトリから作成できます。以下は、YAMLファイルで定義した簡単な例です。

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-config
data:
  log_level: "INFO"
  api_endpoint: "http://myapi.example.com"

環境変数としてのConfigMap

作成したConfigMapのデータは、Podで環境変数として利用できます。アプリケーションに設定を渡す一般的な方法です。

Podでmy-app-configを使用する方法は次のとおりです。

apiVersion: v1
kind: Pod
metadata:
  name: configmap-env-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "echo Log Level: $LOG_LEVEL; echo API: $API_ENDPOINT"]
    env:
    - name: LOG_LEVEL
      valueFrom:
        configMapKeyRef:
          name: my-app-config
          key: log_level
    - name: API_ENDPOINT
      valueFrom:
        configMapKeyRef:
          name: my-app-config
          key: api_endpoint
  restartPolicy: Never

マウントしたファイルとしてのConfigMap

ConfigMapのデータは、コンテナ内にファイルとしてマウントすることもできます。各キーと値のペアが1つのファイルになり、キーがファイル名、値がファイルの内容になります。

アプリケーションが特定のパスから読み込む設定ファイルに便利です。

apiVersion: v1
kind: Pod
metadata:
  name: configmap-file-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "cat /etc/config/log_level; cat /etc/config/api_endpoint"]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: my-app-config
  restartPolicy: Never

Secret:機密データ

SecretはConfigMapに似ていますが、パスワード、APIキー、TLS証明書などの機密データを扱うために設計されています。Kubernetesを使うと、これらを安全に管理して配布できます。

ConfigMapがデータをプレーンテキストで保存するのに対し、Secretはbase64エンコードされます。これは暗号化ではありませんが、偶発的な露出を防ぐのに役立ちます。

Secretの定義

Secretを作成するときは、値をbase64エンコードする必要があります。echo -n 'my-password' | base64を使ってエンコードできます。

以下は、データベースのパスワードの例です。

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  username: YWRtaW4= # base64 of 'admin'
  password: c3VwZXJzZWNyZXRwYXNz # base64 of 'supersecretpass'

PodでのSecretの使用

SecretはConfigMapとほぼ同じ方法でPodから利用できます。環境変数として使用することも、ファイルとしてマウントすることもできます。Kubernetesは、コンテナに渡す前に自動的にデコードします。

環境変数はログに記録されたり調査されたりしやすいため、セキュリティ上は通常、ファイルとしてマウントする方法が推奨されます。

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: my-app-container
    image: busybox
    command: ["sh", "-c", "echo DB User: $DB_USERNAME; echo DB Pass: $DB_PASSWORD"]
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: password
  restartPolicy: Never

セキュリティのベストプラクティス

base64エンコードは暗号化ではないことを覚えておいてください。保存時のデータを真に暗号化するには、Kubernetes Secretsバックエンド(Vaultなど)や、クラウドプロバイダーのKMSサービスを利用する必要があります。

  • RBAC:Secretにアクセスできるユーザーを制御します。
  • 最小権限:Podには必要なSecretへのアクセスだけを許可します。
  • マウントしたファイル:環境変数よりもSecretをファイルとしてマウントする方法を優先します。

設定に関する確認問題

Kubernetesで、アプリケーション用にAPIキー(機密情報)とログレベルの設定(機密性なし)を保存する必要があります。

それぞれにどのKubernetesオブジェクトを使用すべきですか?

まとめ:ConfigMapとSecret

よくできました。Kubernetesでアプリケーションの設定と機密データを管理する方法を学びました。

  • ConfigMap:機密性のないキーと値のペアを保存します。
  • Secret:機密データを保存します(base64エンコード)。
  • どちらもPodから環境変数またはマウントしたファイルとして利用できます。
  • 機密情報を扱うときは、必ずセキュリティのベストプラクティスに従ってください。

次は、RBACや外部Secret管理ソリューションなど、高度なセキュリティトピックを学びましょう。

よくある質問

「ConfigMapsとSecrets」レッスンは無料ですか?

はい。「ConfigMapsとSecrets」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「ConfigMapsとSecrets」で何を学びますか?

ConfigMapsとSecretsを使用して、Kubernetesのデプロイメント内で設定データや機密情報を安全に管理します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ConfigMapsとSecrets」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ステートレスアプリのDeployment
  2. ネットワークアクセスのためのService
  3. ConfigMapsとSecrets
  4. Ingressと外部ルーティング
← DevOps Bootcampに戻る