説明
ABAC は属性に基づくアクセス制御です。GKE で従来の ABAC を有効にすると、サービスアカウント、ノード、コントローラーなどに、IAM や RBAC で付与したもの以外の固定的な権限が追加されます。RBAC のバインディングを限定するだけでは、この追加の権限はなくなりません。Google は ABAC を無効にし、IAM と RBAC でアクセスを管理することを推奨しています。現在の GKE では既定で無効であり、Autopilot では有効にできません。
想定される影響
- IAM と RBAC で意図した範囲を超える操作が許可される場合があります。対象のユーザーやサービスアカウントの認証情報が侵害されると、不要な追加権限によって影響が広がるおそれがあります。
- 認証と認可は別の仕組みです。ABAC が有効というだけで、インターネット上の誰もが認証なしでクラスターにアクセスできるとは判断できません。
- ABAC に依存していた権限を置き換えずに無効化すると、運用担当者、ワークロード、自動処理のアクセスが途切れる場合があります。必要な権限を先に確認してください。
対処方法
- 実際の ABAC 設定と、アクセスが必要な主体・操作を確認してください。過剰な権限をそのまま移すのではなく、必要な IAM 権限と RBAC のロール・バインディングを用意してください。GKE では IAM と RBAC のどちらかで許可されれば操作が認可される場合があるため、両方を確認してください。
- 新規クラスターの設定では
legacy_abac.enabledをfalseにしてください。既存クラスターには Google がサポートする変更手順を使ってください。例えば、対象のプロジェクトとロケーションを確認したうえで、gcloud container clusters updateの--no-enable-legacy-authorizationオプションやsetLegacyAbacAPI で無効化できます。 - 操作が完了したら、実際の
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 で削除されたため、現在の環境にそのまま適用できる完全な構成として使わないでください。プロジェクト、パスワード、サービスアカウントファイルのパスも、実際の環境に合わせて確認する必要があります。