サービスアカウントとワークロードアイデンティティ
Service Accounts によって Pod に固有のアイデンティティを与える方法や、トークンの仕組み、最小権限でアクセスを許可する方法を学びます。
「サービスアカウントとワークロードアイデンティティ」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
ワークロードのアイデンティティ
ユーザーはKubernetesに対して認証しますが、Podにもアイデンティティが必要です。そうすることで、APIサーバーと安全に通信できます。そのアイデンティティがService Accountです。
Service Accountとは
ServiceAccountは、ワークロードのアイデンティティを表す名前空間スコープのオブジェクトです。PodはすべていずれかのServiceAccount上で実行され、指定しない場合はdefaultが使用されます。
apiVersion: v1
kind: ServiceAccount
metadata:
name: report-generator
namespace: analyticsPodに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.0RBACで権限を付与する
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チューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「サービスアカウントとワークロードアイデンティティ」で何を学びますか?
Service Accounts によって Pod に固有のアイデンティティを与える方法や、トークンの仕組み、最小権限でアクセスを許可する方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「サービスアカウントとワークロードアイデンティティ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Role-Based Access Control(RBAC)
- 分離のためのNetwork Policy
- Podセキュリティ標準
- サービスアカウントとワークロードアイデンティティ