0Pricing
Kubernetes Basics · レッスン

サービスアカウントとワークロードアイデンティティ

Service Accounts によって Pod に固有のアイデンティティを与える方法や、トークンの仕組み、最小権限でアクセスを許可する方法を学びます。

「サービスアカウントとワークロードアイデンティティ」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。

ワークロードのアイデンティティ

ユーザーはKubernetesに対して認証しますが、Podにもアイデンティティが必要です。そうすることで、APIサーバーと安全に通信できます。そのアイデンティティがService Accountです。

Service Accountとは

ServiceAccountは、ワークロードのアイデンティティを表す名前空間スコープのオブジェクトです。PodはすべていずれかのServiceAccount上で実行され、指定しない場合はdefaultが使用されます。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: report-generator
  namespace: analytics

PodにService Accountを割り当てる

Pod specでserviceAccountNameを設定すると、指定したアイデンティティで実行できます。

apiVersion: v1
kind: Pod
metadata:
  name: reporter
spec:
  serviceAccountName: report-generator
  containers:
  - name: app
    image: reporter:1.0

マウントされるトークン

KubernetesはService Account用の短期間有効なJWTトークンをPod内にマウントし、API呼び出しの認証に使用します。

# inside the Pod
cat /var/run/secrets/kubernetes.io/serviceaccount/token

デフォルトアカウントが危険な理由

default ServiceAccountは、名前空間内のすべてのPodで共有されます。ここに権限を付与すると、すべてのPodが過剰に公開されることになります。ワークロードごとに専用のアカウントを用意してください。

トークンの自動マウントを無効にする

PodがAPIを呼び出さない場合は、トークンのマウントを無効にして攻撃対象領域を小さくしてください。

apiVersion: v1
kind: Pod
metadata:
  name: no-api-pod
spec:
  automountServiceAccountToken: false
  containers:
  - name: app
    image: myapp:1.0

RBACで権限を付与する

Service Accountは、Roleにバインドするまで権限を持ちません。RoleBindingのsubjectにはService Accountを指定します。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: reporter-read
  namespace: analytics
subjects:
- kind: ServiceAccount
  name: report-generator
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

最小権限を実践する

  • ワークロードごとに1つのService Accountを使用します
  • 本当に必要なverbsとresourcesだけを付与します
  • 可能な場合はClusterRoleではなくRoleを使い、名前空間にスコープを限定します

バインドされたProjectedトークン

最新のトークンはprojectedで、短い有効期限を持ち、Podのライフサイクルにバインドされています。自動的にローテーションされるため、トークンが漏えいしても、以前の長期間有効なSecretより危険性が大幅に低くなります。

クラウドでのワークロードアイデンティティ

クラウドプラットフォームは、KubernetesのServiceAccountをクラウドのIAMアイデンティティに対応付けます(例: AWSのIRSA、GKEのWorkload Identity)。これにより、Podは静的な認証情報を保存せずにクラウドリソースへアクセスできます。

metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123:role/report-role

権限を確認する

kubectl auth can-iでService Accountになりすまして、想定どおりのアクセス権だけを持っていることを確認します。

kubectl auth can-i list pods \
  --as=system:serviceaccount:analytics:report-generator \
  -n analytics

理解度チェック

Service Accountについての理解度を確認しましょう。

まとめ

ServiceAccountによって、短期間有効なProjectedトークンを備えたPod独自のアイデンティティが得られることを学びました。ワークロードごとに専用アカウントを用意し、最小権限を適用してください。RBACバインディングでアクセス権を付与し、使用しない場合はトークンのマウントを無効にします。また、アカウントをクラウドIAMに対応付けることで、認証情報を保存せずにアクセスできます。

よくある質問

「サービスアカウントとワークロードアイデンティティ」レッスンは無料ですか?

はい。「サービスアカウントとワークロードアイデンティティ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。

「サービスアカウントとワークロードアイデンティティ」で何を学びますか?

Service Accounts によって Pod に固有のアイデンティティを与える方法や、トークンの仕組み、最小権限でアクセスを許可する方法を学びます。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kubernetes Basicsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「サービスアカウントとワークロードアイデンティティ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKubernetes Basicsレッスンでコードを書いて実行できますか?

はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Role-Based Access Control(RBAC)
  2. 分離のためのNetwork Policy
  3. Podセキュリティ標準
  4. サービスアカウントとワークロードアイデンティティ
← Kubernetes Basicsに戻る