![見出し画像](https://assets.st-note.com/production/uploads/images/164560597/rectangle_large_type_2_9f2add3c1f1eccce47f99aebf419983c.png?width=1200)
Kubernetesの「automountServiceAccountToken」 設定に関して
Kubernetesでは、Podが起動する際にServiceAccountトークンが自動的にマウントされます。これは便利な機能ですが、すべてのPodにトークンが必要なわけではありません。この挙動を制御するために役立つのが automountServiceAccountToken です。
今回は、わかりやすい例え話を交えて、automountServiceAccountToken の仕組みやその効果的な使い方を説明します!
automountServiceAccountToken をざっくり理解する
KubernetesのServiceAccountトークンは、Podがクラスタ内のリソースにアクセスするための「認証情報」です。このトークンはデフォルトでPodに自動的に渡されます。しかし、すべてのPodがこのトークンを必要とするわけではありません。
そこで、automountServiceAccountToken を使って「トークンを渡すかどうか」を制御することで、セキュリティや運用効率を向上させることができます。
例え話:トークンを配る仕組みを「オフィスの社員証」で考える
Kubernetesクラスタ全体を「会社」、Podを「社員」と考えてみましょう。
ServiceAccountトークン:
トークンは社員証のようなもの。社員証を持っていると、オフィス内の各部署(APIやリソース)にアクセスできます。
automountServiceAccountToken: true(デフォルト):
全社員に社員証を配る設定です。営業職や総務職など、どの職種にも社員証が渡されます。
ただし、例えば清掃スタッフや外部の協力業者には、社員証が不要な場合もあります。
automountServiceAccountToken: false:
特定の社員には社員証を配らない設定です。社員証が必要な社員(Pod)にだけ渡します。
設定の仕組み
1. Podに直接設定する場合
Pod単位でトークンの自動マウントを無効化するには、以下のように設定します。
apiVersion: v1
kind: Pod
metadata:
name: no-token-pod
spec:
automountServiceAccountToken: false
containers:
- name: nginx
image: nginx
この設定では、このPod(社員)は社員証(トークン)を受け取りません。
2. ServiceAccountに設定する場合
ある特定のServiceAccountを使用する全てのPodでトークンを無効化する場合には、ServiceAccountに設定を追加します。
apiVersion: v1
kind: ServiceAccount
metadata:
name: custom-sa
automountServiceAccountToken: false
このServiceAccountを参照するPod(社員)はデフォルトで社員証を受け取りません。
使いどころ:automountServiceAccountToken が役立つ場面
トークンが不要なPod
Kubernetes APIを利用せず、クラスタ外のシステム(外部データベースやストレージ)と通信するだけのアプリケーションでは、トークンは不要です。
セキュリティを強化したい場合
不必要なPodにトークンが配られると、もし侵入された場合に悪用されるリスクがあります。例えば、外部の業者に社員証を配ると、内部リソースに不正アクセスされるリスクが高まるのと同じです。
独自認証を使用する場合
Kubernetesのトークンではなく、OAuthやJWTトークンなど独自の認証方式を利用するアプリケーション。
注意点:無効化する際のリスク
トークンが必要なPodでは無効化しない
Kubernetes APIと連携するアプリケーション(例えばkubectlを内部で使用するアプリなど)ではトークンが必須です。トークンを無効化すると動作しなくなる場合があります。
RBAC(Role-Based Access Control)と併用する
トークンを無効化するだけでなく、RBACポリシーでアクセス権限を最小限に制限することが推奨されます。
設定例:トークンが必要なPodと不要なPod
トークンが不要な場合
以下のPodは、Kubernetes APIにアクセスする必要がないためトークンを無効化しています。
apiVersion: v1
kind: Pod
metadata:
name: external-service-pod
spec:
automountServiceAccountToken: false
containers:
- name: external-app
image: nginx
このPod(社員)は外部システムと連携するだけで、社内のリソースにアクセスする必要がありません。
トークンが必要な場合
以下のPodは、APIサーバーにアクセスするためトークンをマウントします。
apiVersion: v1
kind: Pod
metadata:
name: api-access-pod
spec:
serviceAccountName: api-access-sa
containers:
- name: api-client
image: busybox
command: ["sh", "-c", "curl https://kubernetes.default.svc"]
このPod(社員)は、社内システム(Kubernetes API)とやり取りするため社員証(トークン)が必要です。
まとめ:トークンのマウントを最適化しよう
automountServiceAccountToken を設定することで、トークンの不要なPodにトークンを配らないようにできます。
セキュリティの向上や運用の最適化に効果的です。
必要なPodと不要なPodを明確に分け、適切に設定することでリスクを最小化できます。
オフィスの社員証に例えると、「必要な人だけに渡す」という考え方で、システムのセキュリティがぐっと強化されます。この設定を活用して、より安全なクラスタ運用を目指しましょう! 😊