ServiceAccount名の未指定

serviceAccountNameがないか空の場合、名前空間の既定のServiceAccountを使い、意図しない権限が適用される可能性があります。

説明

PodのserviceAccountNameがないか空の場合、Kubernetesは同じ名前空間の既定のServiceAccountを使います。そのアカウントに関連付けられた権限によっては、意図しないAPIアクセスが許可されるおそれがあります。名前を明示するだけでは権限は減りません。

サービスアカウントはワークロードのAPIアクセス範囲を定める要素です。ワークロードの用途に応じて、アカウントと最小限の権限を併せて管理してください。

想定される影響

  • 既定のアカウントの権限が、意図せずワークロードに適用される可能性があります。
  • ワークロードごとに権限を分離しにくくなるおそれがあります。
  • 異なるワークロードが同じ既定のアカウントで送信するリクエストを区別しにくくなる場合があります。

対処方法

  • PodにserviceAccountNameを明示してください。
  • テンプレートやマニフェストに、意図しない空の値や省略がないか確認してください。
  • アプリケーションごとに専用のServiceAccountを作成し、必要な権限だけを付与してください。

例

イメージは例示のため、実際に使用するものに置き換えてください。build-robot ServiceAccountはPodと同じ名前空間に別途作成し、必要な権限だけを付与してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx3
spec:
  containers:
    - image: nginx3
      name: nginx3
  serviceAccountName: ""

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - image: nginx
      name: nginx
  serviceAccountName: build-robot

説明:

  • 変更前: ServiceAccount名が空のため、既定のアカウントを使います。
  • 変更後: ServiceAccountを明示し、使用する主体を明確にします。

参考資料