すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Secret を使用して認証情報を配布する

最終更新日:Jan 13, 2026

エンタープライズアプリケーションをデプロイする際、データベースのパスワードや API キーなどの機密データを管理する必要があります。この情報をコードにハードコーディングすると、深刻なセキュリティリスクやデータ漏洩の可能性があります。Secret は、機密データをアプリケーションコードから完全に分離する暗号化されたストレージメカニズムを提供します。これにより、コードの漏洩によるセキュリティインシデントを防ぐことができます。

選択のリファレンス

方法

特徴

利用シーン

ボリュームとしてマウント (推奨)

ファイル権限を使用してデータを分離し、プロセス間の漏洩を防ぎます。ファイル内容は自動的に同期されます。

本番環境、特にデータベースのパスワードや API キーなど、詳細なファイル権限コントロールが必要な機密性の高い情報に推奨されます。

環境変数インジェクション

環境変数はすべてのプロセスから容易にアクセスできるため、ログにデータが漏洩するリスクがあります。構成の更新を有効にするには、Pod を再起動する必要があります。

構成をインジェクトするためのシンプルで高速な方法です。この方法は、ログレベルやエンドポイントの構成、または環境変数を使用するように適合されたレガシーアプリケーションに適しています。

Secret の作成

コンソール

  1. Container Service for Kubernetes (ACK) コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[構成] > シークレット を選択します。

  3. [Secret] ページで、[名前空間] (デフォルト) を選択し、右上隅の [作成] をクリックして、表示されるパネルで Secret を構成します。

    • 名前:nginx-secret

    • タイプ:Opaque

      • Opaque:パスワードや証明書などの機密情報を保存するために使用される Base64 エンコードされた Secret です。

      • プライベートイメージリポジトリの認証情報:プライベートイメージリポジトリの認証情報を保存します。

      • TLS 証明書:TLS/SSL 証明書とその秘密鍵を保存します。

    • キーと値のペアを追加または削除します。

      • username: admin

      • password: 'MySecurePassword!'

      • api-key: 'ak-1234567890abcdef'

      Secret にプレーンテキストデータを入力する場合は、[Base64 を使用してデータ値をエンコード] を選択します。

kubectl

  1. kubectl を使用してクラスターに接続します

  2. Secret を作成します。

    kubectl create secret generic nginx-secret \
      --from-literal=username=admin \
      --from-literal=password='MySecurePassword!' \
      --from-literal=api-key='ak-1234567890abcdef' \
      -n default
  3. Secret の情報を表示します。

    kubectl get secret nginx-secret

    想定される出力:

    NAME           TYPE     DATA   AGE
    nginx-secret   Opaque   3      23h

Secret の使用

Deployment と Secret は同じ名前空間に存在する必要があります。

方法 1:ボリュームとしてマウント

この方法では、Secret をファイルとしてマウントすることで、証明書、秘密鍵、構成ファイルなどの機密データに安全にアクセスできます。アプリケーションは、それらをローカルファイルであるかのように読み取ることができます。

コンソールでの構成

  1. Deployment を作成します。

    既存の Deployment がある場合は、[ワークロード] > [ステートレス] を選択し、次の手順で説明するように [コンテナー構成] セクションでボリュームを編集します。
    1. ステートレスワークロード (Deployment) を作成します。

      1. [ステートレス] ページで、[イメージから作成] をクリックします。

      2. [アプリケーションの基本情報] ページで、アプリケーションの基本情報を設定します。次に、[次へ] をクリックして [コンテナー構成] ページに移動します。

        • アプリケーション名:nginx-volume-demo

        • 名前空間:default

        • レプリカ数:2

        • タイプ:ステートレス (Deployment)

      3. コンテナーを構成します。

        1. [コンテナー構成] タブで、[イメージ名][ポート] を構成します。

          • イメージ名:anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

          • コンテナーポート:80、プロトコル:TCP

          重要

          このイメージをプルするには、クラスターにパブリックネットワークアクセスが必要です。クラスターの作成時に[VPC の SNAT を構成] (デフォルトで有効) を選択した場合、追加の構成は不要です。それ以外の場合は、「ACK クラスターのインターネットアクセスを有効にする」をご参照ください。

        2. [コンテナー構成] タブの [ボリューム] セクションで、[ローカルストレージの追加] をクリックします。

          • ボリュームタイプSecret

          • 名前secret-volume

          • マウントソース作成した Secret (例:nginx-secret) を選択します。

          • コンテナーパス:コンテナー内のマウントパス (例:/etc/nginx/secrets) を指定します。

          情報を構成した後、[次へ] をクリックします。

      4. [詳細設定] ページで、必要に応じてスケーリング、スケジューリング、ラベル、アノテーションを構成します。その後、ページ下部の [作成] をクリックします。

      5. [作成完了] ページで、アプリケーションタスクを表示します。

        [アプリケーション作成タスクが送信されました] パネルで [アプリケーション詳細の表示] をクリックし、コンテナーのステータスが Running であることを確認します。

  2. Secret ファイルがマウントされていることを確認します。

    ログインするコンテナー (例:nginx-volume-demo-7xxxxxx****) を選択します。[操作] 列で [ターミナル] をクリックし、nginx を選択してコンテナーにログインします。

    1. Secret ファイルがマウントされていることを確認します。

      ls -la /etc/nginx/secrets

      想定される出力:

      total 4
      drwxrwxrwt 3 root root  140 Sep 15 02:31 .
      drwxr-xr-x 1 root root 4096 Sep 15 02:31 ..
      drwxr-xr-x 2 root root  100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463
      lrwxrwxrwx 1 root root   32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463
      lrwxrwxrwx 1 root root   18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt
      lrwxrwxrwx 1 root root   22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt
      lrwxrwxrwx 1 root root   22 Sep 15 02:31 db-username.txt -> ..data/db-username.txt
    2. ファイルの内容が正しいことを確認します。

      cat /etc/nginx/secrets/db-username.txt
      cat /etc/nginx/secrets/api-key.txt

      想定される出力:

      admin
      ak-1234567890abcdef

    出力は Secret の構成と一致しています。これは、アプリケーションが Secret をボリュームとしてマウントすることで Secret データにアクセスできることを示しています。

Kubectl での構成

  1. nginx-volume-demo.yaml という名前のファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-volume-demo
      namespace: default
      labels:
        app: nginx-volume
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx-volume
      template:
        metadata:
          labels:
            app: nginx-volume
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
              protocol: TCP
            # Secret ボリュームをマウント
            volumeMounts:
            - name: secret-volume
              mountPath: /etc/nginx/secrets
              readOnly: true
          volumes:
          - name: secret-volume
            secret:
              secretName: nginx-secret
              # ファイル権限を設定
              defaultMode: 0644
              # オプション:ファイル名のマッピングをカスタマイズ
              items:
              - key: username
                path: db-username.txt
              - key: password  
                path: db-password.txt
              - key: api-key
                path: api-key.txt
    
  2. Secret を使用する Deployment を作成します。

    kubectl apply -f nginx-volume-demo.yaml
  3. Pod のステータスを確認します。

    kubectl get pods -l app=nginx-volume -n default

    想定される出力:

    NAME                                 READY   STATUS    RESTARTS   AGE
    nginx-volume-demo-7db46895bc-c98b5   1/1     Running   0          4h20m
    nginx-volume-demo-7db46895bc-pc6qg   1/1     Running   0          4h20m
  4. Secret ファイルがマウントされていることを確認します。

    kubectl exec deployment/nginx-volume-demo -n default -- ls -la /etc/nginx/secrets

    想定される出力:

    total 4
    drwxrwxrwt 3 root root  140 Sep 15 02:31 .
    drwxr-xr-x 1 root root 4096 Sep 15 02:31 ..
    drwxr-xr-x 2 root root  100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463
    lrwxrwxrwx 1 root root   32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463
    lrwxrwxrwx 1 root root   18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt
    lrwxrwxrwx 1 root root   22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt
    lrwxrwxrwx 1 root root   22 Sep 15 02:31 db-username.txt -> ..data/db-username.txt
  5. ファイルの内容が正しいことを確認します。

    kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/db-username.txt
    kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/api-key.txt

    想定される出力:

    admin
    ak-1234567890abcdef

    出力は Secret の構成と一致しています。これは、アプリケーションが Secret をボリュームとしてマウントすることで Secret データにアクセスできることを示しています。

方法 2:環境変数としてインジェクト

この方法では、パスワード、API キー、トークンなどの機密データを環境変数として安全にインジェクトします。この方法は、構成をコードから分離し、アプリケーションのセキュリティと可搬性を向上させます。

コンソールでの構成

  1. Deployment を作成します。

    既存の Deployment がある場合は、[ワークロード] > [ステートレス] を選択し、次の手順で説明するように [コンテナー構成] セクションで環境変数を編集します。
    1. Deployment を作成します。

      1. [ステートレス] ページで、[イメージから作成] をクリックします。

      2. [アプリケーションの基本情報] ページで、アプリケーションの基本情報を設定します。次に、[次へ] をクリックして [コンテナー構成] ページに移動します。

        • アプリケーション名:nginx-env-demo

        • 名前空間:default

        • レプリカ数:2

        • タイプ:ステートレス (Deployment)

      3. コンテナーを構成します。

        1. [コンテナー構成] タブで、[イメージ名][ポート] を構成します。

          • イメージ名:anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

          • コンテナーポート:80、プロトコル:TCP

          重要

          このイメージをプルするには、クラスターがパブリックネットワークにアクセスできる必要があります。クラスターの作成時に[VPC の SNAT を設定] (デフォルトで有効) を選択した場合、追加の構成は不要です。そうでない場合は、「ACK クラスターのインターネットアクセスを有効にする」をご参照ください。

        2. [コンテナー構成] タブの [環境変数] セクションで、[追加] をクリックします。

          • タイプSecret

          • 名前USERNAME

          • 値/参照ソースとして 作成した Secret (例:nginx-secret) を選択し、各キーに対応する環境変数名を指定します。

          情報を構成した後、[次へ] をクリックします。

      4. [詳細設定] ページで、必要に応じてスケーリング、スケジューリング、ラベル、アノテーションを構成します。その後、ページ下部の [作成] をクリックします。

      5. [作成完了] ページで、アプリケーションタスクを表示します。

        [アプリケーション作成タスクが送信されました] パネルで [アプリケーション詳細の表示] をクリックし、コンテナーのステータスが Running であることを確認します。

  2. 環境変数がインジェクトされていることを確認します。

    ログインするコンテナー (例:nginx-env-demo-7xxxxxx****) を選択します。[操作] 列で [ターミナル] をクリックし、nginx を選択してコンテナーにログインします。

    env | grep -E 'DB_|API_|NGINX_'

    想定される出力:

    API_KEY=ak-1234567890abcdef
    NGINX_api-key=ak-1234567890abcdef
    NGINX_password=MySecurePassword!
    NGINX_username=admin
    DB_USERNAME=admin
    DB_PASSWORD=MySecurePassword!

    出力は Secret の構成と一致しています。これは、アプリケーションが Secret を環境変数としてインジェクトすることで Secret データにアクセスできることを示しています。

kubectl での構成

  1. nginx-env-demo.yaml という名前のファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-env-demo
      namespace: default
      labels:
        app: nginx-env
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx-env
      template:
        metadata:
          labels:
            app: nginx-env
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
              protocol: TCP
            # Secret から単一のキーと値のペアをインジェクト
            env:
            - name: DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: nginx-secret
                  key: username
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: nginx-secret
                  key: password
            - name: API_KEY
              valueFrom:
                secretKeyRef:
                  name: nginx-secret
                  key: api-key
            # オプション:プレフィックスを付けて Secret からすべてのキーと値のペアをインジェクト
            envFrom:
            - prefix: NGINX_
              secretRef:
                name: nginx-secret
    
  2. Secret を使用する Deployment を作成します。

    kubectl apply -f nginx-env-demo.yaml
  3. Pod のステータスを確認します。

    kubectl get pods -l app=nginx-env -n default

    想定される出力:

    NAME                             READY   STATUS    RESTARTS   AGE
    nginx-env-demo-6dc7556d9-6pjhj   1/1     Running   0          3h33m
    nginx-env-demo-6dc7556d9-rcqsh   1/1     Running   0          3h33m
  4. 環境変数がインジェクトされていることを確認します。

    kubectl exec deployment/nginx-env-demo -n default -- env | grep -E 'DB_|API_|NGINX_'

    想定される出力:

    API_KEY=ak-1234567890abcdef
    NGINX_api-key=ak-1234567890abcdef
    NGINX_password=MySecurePassword!
    NGINX_username=admin
    DB_USERNAME=admin
    DB_PASSWORD=MySecurePassword!

    出力は Secret の構成と一致しています。これは、アプリケーションが Secret を環境変数としてインジェクトすることで Secret データにアクセスできることを示しています。

Secret の管理

Secret が作成された後、[Secret] ページで次の操作を実行できます。

操作

説明

Secret の表示

対象の Secret の名前をクリックして、その基本情報と詳細を表示します。

Secret の編集

[操作] 列で [編集] をクリックして、Secret の情報を変更します。

重要

使用中の Secret を変更すると、サービス中断が発生する可能性があります。注意して進めてください。

Secret の削除

[操作] 列で [削除] をクリックして、不要になった Secret を削除します。

重要

クラスター作成時に kube-system および kube-public 名前空間で自動的に生成される Secret (サービスアカウントに関連する Secret など) は削除しないでください。

関連ドキュメント