Secret を使用してセンシティブ データを保存


Secret を使用して、パスワードやアクセスキーなどの機密性の高い構成情報を GKE クラスタに保存できます。このページでは、Google Cloud リソースを構成するときに、Config Connector が Secret 値を使用する方法について説明します。

概要

このセクションでは、Config Connector で Secret を使用する方法の概要を示します。

リソースを作成するときに Secret を使用する

リソースの作成時に Secret 内のデータを使用できます。Secret をリソースに渡すでは、パスワードを含む Secret を作成し、Cloud SQL データベース上のユーザーの Secret を参照します。

Secret の更新

Secret に更新を適用すると、Config Connector は次に目的の状態を調整するときにリソースを更新します。たとえば、SQLUser のパスワードとして参照される Secret を更新すると、Config Connector はユーザーのパスワードを更新します。

Secret を削除する

リソースで使用されている Secret を削除しても、Config Connector はリソースの Secret への参照を削除しません。たとえば、Secret を参照するパスワードで SQLUser を作成し、その Secret を削除した場合、そのパスワードは SQLUser に残ります。

トラブルシューティング

存在しない Secret を参照するリソースを作成すると、Config Connector は DependencyNotFound または DependencyInvalid イベントを作成します。

Secret と Kubernetes 名前空間

Kubernetes では Namespace 全体の Secret へのアクセスが許可されていないため、異なる Namespace のリソースに同じ Secret 値を使用している場合は、すべての Namespace に Secret を適用する必要があります。

リソースに Secret を渡す

このセクションでは、Cloud SQL サーバーを作成し、Secret を使用してデフォルトのユーザーのパスワードを設定します。

準備

これらの手順を完了するには、次のものが必要です。

  • Kubernetes クラスタにインストールされた Config Connector
  • プロジェクトで有効になっている Cloud SQL Admin API。この API が有効になっていることを確認するには、次の gcloud コマンドを実行します。

    gcloud services list --filter=sqladmin.googleapis.com
    

    コマンドが Listed 0 items. を出力する場合は、API を有効にする必要があります。この API は、Config Connector と Resource Manager API、または gcloud コマンドで有効にできます。

Service Usage API

  1. Config Connector は Service Usage API を使用してサービス API を有効にします。以下の手順を行うには、Service Usage API を有効にする必要があります。この API は、Google Cloud CLI を使用して有効にできます。
    gcloud services enable serviceusage.googleapis.com
  2. 次の YAML を enable-sql.yaml という名前のファイルにコピーします。

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. kubectl を使用してクラスタに enable-sql.yaml を適用します。

    kubectl apply -f enable-sql.yaml --namespace CC_NAMESPACE
    

    CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

gcloud

Google Cloud CLI で SQL Admin API を有効にするには、次のコマンドを実行します。

gcloud services enable sqladmin.googleapis.com

Cloud SQL サーバーの作成

  1. 以下の YAML を sql-server-example.yaml という名前のファイルにコピーします。これにより、sqlserver-1 という名前の Cloud SQL サーバーと sqluser-sample という名前のユーザーが作成されます。sqluser-sample のパスワードは、リソース参照によって secret-1 という名前の Secret に設定されています。

    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLInstance
    metadata:
      labels:
        label-one: "sql-server-example"
      name: sqlserver-1
    spec:
      region: us-central1
      databaseVersion: MYSQL_5_7
      settings:
        tier: db-g1-small
    ---
    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLUser
    metadata:
      name: sqluser-sample
    spec:
      instanceRef:
        name: sqlserver-1
      host: "%"
      password:
        valueFrom:
          secretKeyRef:
            name: secret-1  # Name of the Secret object to extract a value from
            key: password   # Key that identifies the value to be extracted
    
  2. 以下の YAML を example-secret.yaml という名前のファイルにコピーします。保存する前に、password の値を編集します。これは、前のセクションで参照されている secret-1 を宣言します。

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: PASSWORD
    
  3. この構成をクラスタに適用します。

    kubectl apply -n CC_NAMESPACE -f example-secret.yaml
    kubectl apply -n CC_NAMESPACE -f sql-server-example.yaml
    

    CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

    Config Connector は、指定したパスワードを使用して Cloud SQL インスタンスとユーザーを作成します。これには数分かかることがあります。

  4. 数分待ってから、インスタンスが使用できることを確認してください。

    gcloud sql instances list --filter="name=sqlserver-1"

    出力には、STATUSRUNNABLE のサーバーが含まれているはずです。

  5. SQL インスタンスに接続できることを確認します。

    gcloud sql connect sqlserver-1 --user=sqluser-sample

    パスワードの入力を求めるプロンプトが表示されます。

クリーンアップ

インスタンスを保持しない場合は、kubectl を使用して Cloud SQL インスタンス、ユーザー、Secret を削除します。

    kubectl delete -n CC_NAMESPACE -f sql-server-example.yaml
    kubectl delete -n CC_NAMESPACE -f example-secret.yaml

CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

次のステップ