既定の ServiceAccount 権限とトークン自動マウントの確認

ワークロードごとに権限を分離し、不要な API トークンを自動マウントしないでください。

説明

名前空間の default ServiceAccount を複数のワークロードで使うと、同じ API 主体を共有します。既定のアカウントが管理者であるわけではありませんが、追加した権限はその主体を使うワークロードにも適用されます。

同じアカウントを使っても、すべての Pod が同じトークン値を共有するわけではありません。実際の RBAC 権限と、各 Pod にトークンの自動マウントが必要かを確認してください。

想定される影響

  • 一つのワークロードから漏えいしたトークンで、共有アカウントの権限が悪用される可能性があります。
  • ワークロード別の権限分離や監査が難しくなる場合があります。

対処方法

  • API アクセスが必要なワークロードには専用の ServiceAccount と最小限の RBAC 権限を設定してください。トークンが不要な Pod には automount_service_account_token = false を設定してください。
  • default ServiceAccount の不要な権限とトークン自動マウントを削除し、Pod 側の設定による上書きを確認してください。新しく作成した Pod で実際の設定を確認してください。

例

既存の default ServiceAccount を Terraform で管理する前にインポートしてください。二つの例はアカウント単位の自動マウントだけを比較し、専用アカウントへの移行や権限の取り消しは行いません。Pod 単位の設定が優先されます。

変更前

hcl
resource "kubernetes_service_account" "example" {
  metadata {
    name = "default"
  }

  automount_service_account_token = true
}

変更後

hcl
resource "kubernetes_service_account" "example" {
  metadata {
    name = "default"
  }

  automount_service_account_token = false
}

補足:

  • 変更前: default アカウント側でトークンの自動マウントを許可します。実際の Pod 設定と API アクセスの必要性を確認する必要があります。
  • 変更後: アカウント側の自動マウントを無効にします。既存 Pod のトークンや RBAC 権限を取り消す設定ではありません。

参考資料