ServiceAccount 名が未指定

Pod が使うアカウントを明示し、実際の権限を確認してください。

説明

ServiceAccount 名がない Pod は、同じ名前空間の default ServiceAccount を使います。このアカウントに権限が付与されていると、意図しないワークロードも同じ権限を使う可能性があります。既定のアカウントが常に管理者権限を持つわけではありません。

ワークロードごとのアカウントと必要な権限を明確にすると、権限分離と運用に役立ちます。名前の指定だけで権限が減るわけではありません。

想定される影響

  • default ServiceAccount に付与された不要な権限を使える場合があります。
  • 用途の異なるワークロード間で、権限分離や監査が難しくなる場合があります。

対処方法

  • Pod と Pod テンプレートの service_account_name に、承認された ServiceAccount を指定してください。同じ名前空間にアカウントを用意し、変数やテンプレートの実際の適用値を確認してください。
  • アカウントには必要な権限だけをバインドしてください。Kubernetes API トークンが不要なら、自動マウントも無効にしてください。

例

service-name は Pod と同じ名前空間に別途用意してください。残しているイメージバージョンは設定比較用であり、実際のデプロイには保守されているイメージを選んでください。

変更前

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    service_account_name = ""

    container {
      image = "nginx:1.7.9"
      name  = "example"
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    service_account_name = "service-name"

    container {
      image = "nginx:1.7.9"
      name  = "example"
    }
  }
}

補足:

  • 変更前: 名前が空なので default ServiceAccount を使います。
  • 変更後: ServiceAccount を明示します。権限は別途確認する必要があります。

参考資料