0Pricing
Kubernetes Basics · レッスン

機密データのためのSecrets

Secretsを使って、パスワードやAPIキーなどの機密情報を安全に保存・管理します。

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

機密情報の保護

アプリケーションを構築する際は、データベースのパスワード、APIキー、プライベート証明書などの機密情報を扱うことがよくあります。

これらをアプリケーションのコードや設定ファイルに直接保存するのは、大きなセキュリティリスクです。データ漏洩につながり、システムが危険にさらされる可能性があります。

Kubernetes Secretsの概要

Kubernetes Secretsは、クラスター内で機密データを安全に保存するために設計されたオブジェクトです。

機密情報をPodの定義やアプリケーションコードから分離できるため、デプロイの安全性と管理性が向上します。

  • 分離: 機密データをコンテナーイメージやPodのYAMLから除外できます。
  • 利用可能: Podは、環境変数またはマウントしたファイルとしてSecretを利用できます。

SecretsとConfigMapsの違い

以前のレッスンで、機密性のない設定データに使うConfigMapsについて学んだかもしれません。

Secretsも似ていますが、機密データ専用です。どちらもキーと値のペアを保存しますが、Secretsはデータが機密であることを考慮して扱います。

  • ConfigMaps: 一般的で機密性のない設定(例: ログレベル、APIエンドポイント)に使用します。
  • Secrets: 機密データ(例: パスワード、トークン、秘密鍵)に使用します。

Secretsは暗号化されるのではなく、デフォルトではbase64エンコードされるだけであることに注意してください。

リテラルからSecretを作成する

Secretを作成する最も簡単な方法は、リテラル値からkubectl create secret genericを使って作成することです。

単純なパスワードのような、短い機密データを1つだけ扱う場合に便利です。

kubectl create secret generic my-db-secret \
  --from-literal=username=admin \
  --from-literal=password=SuperSecretP@ssw0rd!

ファイルからSecretを作成する

プライベートキーや完全な設定ファイルなど、サイズの大きい機密データや複数行の機密データには、ファイルからSecretを作成する方法が適しています。

まずローカルでファイルを作成し、それらを参照します。Kubernetesがファイルの内容を読み取り、保存します。

# Create local files first
echo "my-api-key-12345" > api-key.txt
echo "my-token-abcde" > auth-token.txt

# Create the Secret
kubectl create secret generic app-credentials \
  --from-file=api-key.txt \
  --from-file=auth-token.txt

Secretを環境変数として使用する

Podでは、Secretのデータを環境変数に直接注入して利用できます。単純なキーと値のペアでよく使われる方法です。

Secretの個々のキーを参照することも、envFromを使ってすべてのキーを参照することもできます。

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-env
spec:
  containers:
  - name: my-app
    image: nginx:latest
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: my-db-secret
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-db-secret
          key: password

Secretをマウントしたファイルとして使用する

証明書やプライベートキーなどの機密ファイルを扱う場合や、アプリケーションが特定のファイルパスから設定を読み込む場合は、SecretをPod内にファイルとしてマウントできます。

Secret内の各キーがマウント先ディレクトリ内のファイルになり、その値がファイルの内容になります。

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-vol
spec:
  containers:
  - name: my-app
    image: nginx:latest
    volumeMounts:
    - name: app-secret-volume
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: app-secret-volume
    secret:
      secretName: app-credentials

Secretのセキュリティ

Secretsはデータを不用意に見られることから守りますが、万能ではありません。次の点を覚えておいてください。

  • Base64エンコード: Secretsは暗号化されず、base64エンコードされるだけです。Secretにアクセスできる人は誰でもデコードできます。
  • RBAC: Role-Based Access Control(RBAC)を使って、Secretsの読み取り、作成、変更ができるユーザーを制限してください。
  • 保存時の暗号化: 本格的なセキュリティ対策として、etcd(Kubernetesのバックエンドストア)のデータに対する保存時の暗号化を有効にしてください。多くのクラウドプロバイダーがこの機能を提供しています。

Secretを更新する

機密データが変わった場合は、Secretを更新する必要があります。新しい値を指定してkubectl create secretを再実行するか、更新したYAMLに対してkubectl apply -fを使うだけで更新できます。

ただし、Secretを利用している実行中のPodが変更を自動的に反映することはありません。変更を適用するには、通常、そのSecretを使用するPodを再起動または再デプロイする必要があります。

クイックチェック: Secrets

アプリケーションからアクセスする必要があるプライベートAPIキーがあるとします。このキーをKubernetes Podに保存して提供する方法として、最も安全で適切なのはどれでしょうか。

まとめ: 機密データのためのSecrets

よくできました。Kubernetesで機密データを扱う方法を学びました。

  • Secretsは、パスワードやAPIキーなどの機密情報を保存します。
  • Secretはbase64エンコードされ、環境変数またはマウントしたファイルとして利用できます。
  • 最大限のセキュリティを確保するため、常にRBACを適用し、保存時の暗号化を検討してください。
  • Secretの更新を反映するには、Podを再起動する必要があります。

よくある質問

「機密データのためのSecrets」レッスンは無料ですか?

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

「機密データのためのSecrets」で何を学びますか?

Secretsを使って、パスワードやAPIキーなどの機密情報を安全に保存・管理します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kubernetes Basicsを始めるのに経験は必要ですか?

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

「機密データのためのSecrets」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 設定のためのConfigMaps
  2. 機密データのためのSecrets
  3. Persistent VolumeとClaim
  4. StorageClassと動的プロビジョニング
← Kubernetes Basicsに戻る