シークレットの使用

Secret を作成する方法と、その Secret を使用するように Knative serving サービスとリビジョンを構成する方法について説明します。

サービスの一般的なユースケースとして、ユーザー名とパスワードを提供するサードパーティ アプリケーションへアクセスする場合があります。Google Kubernetes Engine の場合、このタイプの機密情報を Kubernetes の Secret オブジェクトに格納することをおすすめします。

コンテナが Secret にアクセスできるようにするには、各 Secret をボリュームとしてマウントします。これにより、コンテナは Secret 内のエントリをファイルとして利用できるようになります。Secret をマウントすると、Secret の読み取り時の最新バージョンを取得できます。

環境変数を使用して Secret を渡すこともできます。

Secret の作成

以下では、Secret の作成方法を簡単に説明しますが、Secret で説明しているように、Secret を作成する方法はいくつかあります。

Secret を作成するときは、Knative serving サービスを実行しているクラスタと同じ Namespace で作成してください。この例では、default 名前空間を使用します。

クラスタの default 名前空間に Secret を作成するには:

  • ファイルを使用して Secret を作成します。

    echo -n 'devuser' > ./username.txt
    echo -n 'S!B\*d$zDsb' > ./password.txt
    kubectl create secret generic user-creds --from-file=./username.txt --from-file=./password.txt
    
  • kubectl コマンドのみを使用して Secret を作成します。

    kubectl create secret generic user-creds --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb'
    

サービスで Secret を利用できるようにする

新しいサービスをデプロイする際や、既存のサービスを更新してリビジョンをデプロイする際に、Google Cloud Console やコマンドライン ツールを使用して、シークレットをサービスに関連付けることが可能です。

コンソール

  1. Google Cloud コンソールで Knative serving に移動します。

    Knative serving に移動

  2. デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成する場合は、そのサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. [詳細設定] で [変数と Secret] をクリックします。

  4. [Secret の参照] プルダウン メニューから目的の Secret を選択します。

    • [参照の方法] プルダウン メニューで、Secret の使用方法について、Volume としてマウントするか、環境変数として公開するかを選択します。
    • ボリュームとしてマウントをする場合は、パスを指定して [完了] をクリックします。
    • 環境変数として公開する場合は、次の手順を行います。
      1. 変数の名前を指定し、[キー] プルダウン メニューから対応する Secret 値を選択します。
      2. 他の Secret 値を追加するには [追加] をクリックします。
      3. 変数の名前を指定し、[キー] プルダウン メニューから対応する Secret 値を選択します。
      4. [完了] をクリックします。

  5. [次へ] をクリックして、次のセクションに進みます。

  6. [このサービスをトリガーする方法の構成] セクションで、サービスを呼び出すために使用する接続を選択します。

  7. [作成] をクリックしてイメージを Knative serving にデプロイし、デプロイの完了を待ちます。

gcloud

Google Cloud CLI を使用して、Secret を新しいサービスに関連付ける、または既存のサービスを更新できます。

  • 既存のサービスの場合は、次のいずれかのパラメータを指定して gcloud run services update コマンドを実行し、Secret を更新します。

    例:

    gcloud run services update SERVICE --update-secrets KEY1=VALUE1,KEY2=VALUE2
    

    以下のように置き換えます。

    • SERVICE は、実際のサービスの名前に置き換えます。
    • KEY1=VALUE1,KEY2=VALUE2 は、各 Secret の名前と値のペアのカンマ区切りのリストに置き換えます。各 KEY のパスを指定します。先頭にスラッシュ / を付けて、Secret をファイルとしてマウントします。Secret を環境変数としてマウントする場合は、スラッシュを除外することもできます。各 VALUE に Secret 名を指定します。複数のパラメータを指定する方法
    • コマンド パラメータ オプション

      複数の Key-Value ペアを指定するには、読みやすくするために複数のパラメータを指定します。例:
      [...]
      --update-secrets "KEY=VALUE1" \
      --update-secrets "KEY=VALUE2" \
      --update-secrets "KEY=VALUE3"
      
  • 新しいサービスの場合は、--set-secrets パラメータを指定して gcloud run deploy コマンドを実行し、Secret を関連付けます。

    gcloud run deploy SERVICE --image=IMAGE_URL --set-secrets KEY1=VALUE1,KEY2=VALUE2
    

    次のように置き換えます。

    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/cloudrun/hello など)に置き換えます。
    • SERVICE は、実際のサービスの名前に置き換えます。
    • KEY1=VALUE1,KEY2=VALUE2 は、各 Secret の名前と値のペアのカンマ区切りのリストに置き換えます。各 KEY のパスを指定します。先頭にスラッシュ / を付けて、Secret をファイルとしてマウントします。Secret を環境変数としてマウントする場合は、スラッシュを除外することもできます。各 VALUE に Secret 名を指定します。複数のパラメータを指定する方法
    • コマンド パラメータ オプション

      複数の Key-Value ペアを指定するには、読みやすくするために複数のパラメータを指定します。例:
      [...]
      --update-secrets "KEY=VALUE1" \
      --update-secrets "KEY=VALUE2" \
      --update-secrets "KEY=VALUE3"