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 では Namespace 全体の Secret へのアクセスが許可されていないため、Config Connector を使用して複数のプロジェクトを管理する場合は、プロジェクトにマップするすべての 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 は Resource Manager API を使用してサービス API を有効にします。これらの手順を実行するには、Resource Manager API を有効にする必要があります。次の「gcloud」コマンドを使用して、この API を有効にできます。
    gcloud services enable cloudresourcemanager.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

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

gcloud services enable sqladmin.googleapis.com

Cloud SQL Server の作成

  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 で使用できることを確認してください。

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

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

  5. gcloud を使用して 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 に置き換えます。

次のステップ