説明
名前空間の 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 権限を取り消す設定ではありません。