Secret

このページでは、Kubernetes の Secret オブジェクトと Google Kubernetes Engine でのその使用方法について説明します。

Secret とは

Secret は、パスワード、OAuth トークン、SSH 認証鍵などの機密データをクラスタに格納する安全なオブジェクトです。機密データを Secret に保存することは、平文の ConfigMap やポッド仕様よりも安全です。Secret を使用すると、機密データの使用方法を制御し、権限のないユーザーにデータが公開されるリスクを軽減できます。

Cloud KMS で管理する鍵を使用して Secret を暗号化することもできます。詳しくはアプリケーション レイヤでのシークレットの暗号化をご覧ください。

Secret の作成

Secret は、次のコマンドを使用して作成します。

kubectl create secret [TYPE] [NAME] [DATA]

[TYPE] は、以下のいずれかになります。

  • generic: ローカル ファイル、ディレクトリ、またはリテラル値から Secret を作成します。
  • docker-registry: Docker レジストリで使用する dockercfg Secret を作成します。Docker レジストリに対する認証に使用されます。
  • tls: 指定された公開鍵/秘密鍵のペアから TLS Secret を作成します。公開鍵/秘密鍵のペアが事前に存在している必要があります。公開鍵証明書は、.PEM エンコードされ、指定された秘密鍵と一致する必要があります。

ほとんどの Secret で、generic タイプを使用します。

[DATA] は、次のいずれかになります。

  • --from-file または --from-env-file フラグを使用して指定された 1 つ以上の構成ファイルを含むディレクトリへのパス
  • それぞれが --from-literal フラグを使用して指定された Key-Value ペア

kubectl create の詳細については、リファレンス ドキュメントをご覧ください。

または、YAML マニフェスト ファイルで Secret オブジェクトを定義し、kubectl create -f [FILE] を使用してそのオブジェクトをデプロイする方法でも Secret を作成できます。例については、Secret を使用して認証情報を安全に配布するをご覧ください。

ファイルから

1 つ以上のファイルから Secret を作成するには、--from-file または --from-env-file を使用します。ファイルは平文である必要がありますが、ファイルの拡張子は関係ありません。

--from-file

--from-file を使用して Secret を作成すると、Secret の値はファイルの内容全体になります。Secret の値に複数の Key-Value ペアが含まれている場合は、代わりに --from-env-file を使用します。

単一のファイルまたは複数のファイルを渡すことができます。

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/FILE] --from-file [/PATH/TO/FILE2]

複数のファイルを含むディレクトリを渡すこともできます。

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/DIRECTORY]

たとえば、次のコマンドでは、username.txtpassword.txt の 2 つのファイルから credentials という Secret を作成し、キーをそれぞれ username.txtpassword.txt に設定しています。

kubectl create secret generic credentials --from-file ./username.txt --from-file ./password.txt

Secret の値は Kubernetes で base64 でエンコードされます。

kubectl get secret credentials -o yaml を実行すると、次の出力が返されます。

apiVersion: v1
data:
  password.txt: MTIzNAo=
  username.txt: YWRtaW4K
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

デフォルトでは、キーはファイル名です。--from-file の拡張構文を使用してキーをオーバーライドできます。

kubectl create secret [TYPE] [NAME] --from-file=KEY=[/PATH/TO/DIRECTORY]

次の例は前の例と同じですが、ファイル名を使用するのではなく、キーを usernamepassword に設定しています。

kubectl create secret generic credentials --from-file=username=./username.txt --from-file=password=./password.txt

--from-env-file

複数の Key-Value ペアを単一の Secret に読み込むには、1 つ以上の平文ファイルに Key-Value ペアを保存してから、--from-file ではなく --from-env-file を使用してそれらを読み込みます。フラグを複数回指定することで複数のファイルを読み込むことができます。--from-file と同じ制限が適用されます。

たとえば、次のコマンドでは、複数の Key-Value ペアを含む単一のファイル credentials.txt から credentials という Secret を作成しています。

# Each of these key-value pairs is loaded into the Secret
username=jane
password=d7xnNss7EGCFZusG

Secret の値は Kubernetes で base64 でエンコードされます。

kubectl create secret generic credentials --from-env-file ./credentials.txt

kubectl get secret credentials -o yaml を実行すると、次の出力が返されます。

apiVersion: v1
data:
  credentials.txt:
    username: YWRtaW4K
    password: MTIzNA==
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

制限事項

シンボリック リンク、デバイス、パイプなどの非正規ファイルは、kubectl によって無視されます。またサブディレクトリも無視されます。kubectl create secret はサブディレクトリに再帰しません。

リテラル値から

リテラル値から Secret を作成するには、--from-literal を使用します。

たとえば、次のコマンドは、2 つの Key-Value ペアを含む literal-token という名前の一般的な Secret を作成します。

kubectl create secret generic literal-token --from-literal user=admin --from-literal password=1234

各 Key-Value ペアに対して --from-literal を指定します。値は自動的に base64 でエンコードされます。

kubectl get secret literal-token -o yaml を実行すると、次の出力が返されます。

apiVersion: v1
data:
  password: MTIzNA==
  user: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: ...
  name: literal-token
  namespace: default
  resourceVersion: "2012831"
  selfLink: /api/v1/namespaces/default/secrets/literal-token
  uid: ...
type: Opaque

上記の出力で、passworduser が base64 でエンコードされていることを確認してください。base64 でエンコードすることで、特定の文字を処理できないアプリやサービスに情報が認識されるようになります。base64 エンコードではセキュリティは保証されません。

Secret の使用

ワークロードで Secret を使用するには、Secret の値を参照する環境変数を指定するか、Secret を含むボリュームをマウントします。

Secret の使用方法については、Secret の使用をご覧ください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント