説明
GKE ノードがデフォルトのサービスアカウントを共有したり、過剰な IAM ロールを持ったりすると、ノード侵害の影響が他の Google Cloud リソースに広がるおそれがあります。デフォルトのアカウントが必ず管理者であるわけではないため、実際のロールを確認する必要があります。
想定される影響
ノードの認証情報が悪用されると、そのアカウントに許可されたリソースを参照・変更されるおそれがあります。アカウントの共有は、権限の分離や利用主体の追跡も難しくします。
対処方法
node_config.service_account に、ノードの運用に必要なロールだけを持つ専用アカウントのメールアドレスを指定してください。アカウントとロールを先に用意し、変更の影響を確認してください。アプリケーションの Google Cloud 権限は Workload Identity Federation for GKE で別途管理してください。
例
ノードサービスアカウントを選択する抜粋です。node_service_account_email に作成済みアカウントのメールアドレスを指定し、必要なノード用ロールを別途付与してください。プロジェクトと Ansible 実行用の JSON 認証情報ファイルのパスも指定します。
変更前
yaml
- name: create a cluster
google.cloud.gcp_container_cluster:
name: my-cluster
initial_node_count: 2
node_config:
machine_type: n1-standard-4
disk_size_gb: 500
location: us-central1-a
project: "{{ gcp_project }}"
auth_kind: serviceaccount
service_account_file: "{{ gcp_service_account_file }}"
state: present
ノード用アカウントを指定していないため、デフォルトのサービスアカウントを使用します。実際のリスクは付与されたロールによって異なります。
変更後
yaml
- name: create a cluster
google.cloud.gcp_container_cluster:
name: my-cluster
initial_node_count: 2
node_config:
machine_type: n1-standard-4
disk_size_gb: 500
service_account: "{{ node_service_account_email }}"
location: us-central1-a
project: "{{ gcp_project }}"
auth_kind: serviceaccount
service_account_file: "{{ gcp_service_account_file }}"
state: present
ノードに別のアカウントを指定しています。名前を分けるだけでは最小権限を保証できないため、IAM ロールを確認してください。