GKEの従来のクライアント証明書認証

GKEで推奨される認証方式を使い、発行済みの従来のクライアント証明書に付与された権限を管理する方法を説明します。

説明

GKEの従来のクライアント証明書は、クラスターAPIにアクセスするための認証情報です。Ansibleの google.cloud.gcp_container_cluster モジュールでは、master_auth.client_certificate_config.issue_client_certificate で証明書を発行するかどうかを指定します。APIサーバーのTLS証明書を検証する設定とは異なります。

従来の認証方式はGKE 1.12以降で既定で無効になっており、Autopilotでは利用できません。クライアント証明書の発行を無効にしても、OAuth認証とAPIサーバーのTLS証明書の検証を利用できます。

想定される影響

クライアント証明書が漏えいすると、第三者がその証明書に付与された権限でクラスターにアクセスするおそれがあります。発行を無効にしても、発行済みの証明書から権限が取り除かれるわけではありません。既存の証明書とアクセス権限を併せて管理する必要があります。

対処方法

  • 新しいクラスターでは、従来のクライアント証明書の発行を無効にしてOAuth認証を使用してください。IAMまたはKubernetes RBACで必要な権限だけを付与してください。kubectl を使う場合は、GKE認証プラグインも設定してください。
  • 既存のクラスターでは、認証方式と付与された権限を確認してください。Googleが案内するRBACの設定と証明書の権限を取り除く手順に従い、運用担当者や自動化処理が引き続きアクセスできることを確認してください。

例

次の古い構成例は、証明書の発行設定の違いを示しています。両方に含まれる基本認証(username と password)はGKE 1.19で廃止されています。現在の環境にそのまま適用しないでください。

証明書の発行を無効にした設定

yaml
- name: create a cluster3
  google.cloud.gcp_container_cluster:
    name: my-cluster3
    initial_node_count: 2
    master_auth:
      username: cluster_admin
      password: my-secret-password
      client_certificate_config:
        issue_client_certificate: no
    node_config:
      machine_type: n1-standard-4
      disk_size_gb: 500
    location: us-central1-a
    project: test_project
    auth_kind: serviceaccount
    service_account_file: "/tmp/auth.pem"
    state: present

issue_client_certificate: no は、クライアント証明書の発行を無効にします。

発行を有効にした以前の設定

yaml
- name: create a cluster
  google.cloud.gcp_container_cluster:
    name: my-cluster
    initial_node_count: 2
    master_auth:
      username: cluster_admin
      password: my-secret-password
      client_certificate_config:
        issue_client_certificate: yes
    node_config:
      machine_type: n1-standard-4
      disk_size_gb: 500
    location: us-central1-a
    project: test_project
    auth_kind: serviceaccount
    service_account_file: /tmp/auth.pem
    state: present

issue_client_certificate: yes は、従来のクライアント証明書を発行します。新しいクラスターで推奨される認証構成として使用しないでください。

参考資料