説明
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 を明示します。権限は別途確認する必要があります。