従来の ABAC を有効にした GKE クラスター設定

GKE の従来の ABAC は、IAM や RBAC 以外の権限を追加します。必要な権限を用意してから ABAC を無効にし、実際のクラスターへのアクセスを確認してください。

説明

ABAC は属性に基づくアクセス制御です。GKE で従来の ABAC を有効にすると、サービスアカウント、ノード、コントローラーなどに、IAM や RBAC で付与したもの以外の固定的な権限が追加されます。RBAC のバインディングを限定するだけでは、この追加の権限はなくなりません。Google は ABAC を無効にし、IAM と RBAC でアクセスを管理することを推奨しています。現在の GKE では既定で無効であり、Autopilot では有効にできません。

想定される影響

  • IAM と RBAC で意図した範囲を超える操作が許可される場合があります。対象のユーザーやサービスアカウントの認証情報が侵害されると、不要な追加権限によって影響が広がるおそれがあります。
  • 認証と認可は別の仕組みです。ABAC が有効というだけで、インターネット上の誰もが認証なしでクラスターにアクセスできるとは判断できません。
  • ABAC に依存していた権限を置き換えずに無効化すると、運用担当者、ワークロード、自動処理のアクセスが途切れる場合があります。必要な権限を先に確認してください。

対処方法

  1. 実際の ABAC 設定と、アクセスが必要な主体・操作を確認してください。過剰な権限をそのまま移すのではなく、必要な IAM 権限と RBAC のロール・バインディングを用意してください。GKE では IAM と RBAC のどちらかで許可されれば操作が認可される場合があるため、両方を確認してください。
  2. 新規クラスターの設定では legacy_abac.enabled を false にしてください。既存クラスターには Google がサポートする変更手順を使ってください。例えば、対象のプロジェクトとロケーションを確認したうえで、gcloud container clusters update の --no-enable-legacy-authorization オプションや setLegacyAbac API で無効化できます。
  3. 操作が完了したら、実際の legacyAbac.enabled を読み直し、運用担当者、サービスアカウント、自動処理が必要な操作を続けられるかをテストしてください。不要な操作が許可されないことも確認してください。設定ファイルの編集だけで終えず、実際のクラスターに変更が反映されたかを確認してください。

例

変更前

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
    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
    legacy_abac:
      enabled: yes

変更後

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
    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
    legacy_abac:
      enabled: no

説明:

  • 変更前: enabled: yes は従来の ABAC を有効にする設定です。
  • 変更後: enabled: no は ABAC を無効にする意図を表しています。必要な IAM と RBAC の設定は別途用意してください。既存クラスターには前述の変更手順を適用し、結果を確認してください。
  • どちらの例にも master_auth の username と password が残っています。この基本認証方式は GKE 1.19 で削除されたため、現在の環境にそのまま適用できる完全な構成として使わないでください。プロジェクト、パスワード、サービスアカウントファイルのパスも、実際の環境に合わせて確認する必要があります。

参考資料