0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EKS の IRSA と Pod Identity

Last updated at Posted at 2025-04-13

はじめに

これまで、Kubernetes のワークロードから AWS のリソースにアクセスする際の OIDC 認証手法として、IRSA(IAM Roles for Service Accounts)が広く利用されていましたが、昨今では、別の認証手段として EKS Pod Identity と呼ばれる仕組みが登場しました。

IRSA と Pod Identity は、どちらも EKS クラスタ上で稼働する Pod が AWS リソースにアクセスするための認証・認可メカニズムですが、認証手続きや仕組みに違いがあります。

EKS IRSA

irsa.png

EKS IRSA は、Kubernetes の Service Account(KSA)に IAM ロールを関連付けて、Pod が AWS リソースにアクセスする仕組みです。

認証フロー

  1. 開発者は、EKS に OIDC Provider を設定
  2. IAM ロールを作成し、信頼ポリシに OIDC Provider と対象の Kubernetes Service Account を指定
  3. Kubernetes で Service Account を作成し、アノテーションに IAM ロール ARN を付与
  4. Pod が起動する際、対応する Service Account を用いる
  5. Pod 内の AWS SDK や CLI は自動的に Web Identity Token(JWT)を取得して /var/run/secrets/eks.amazonaws.com/serviceaccount/token にマウント
  6. SDK は Web Identity Token を用いて STS AssumeRoleWithWebIdentity を呼び出し、IAM ロールの一時的な Credentials を取得
  7. 一時的な Credentials を用いて、Pod から AWS リソースにアクセス

IRSA の詳細な仕組みについては、こちら で詳しく説明しています。

メリット

  • 明確な IAM ロール毎の Pod アクセス管理
  • セキュアかつスケーラブル

制限

  • Web Identity Token のサポートが必要(IAM の制限)
  • STS 呼び出しによる多少のオーバヘッド・遅延が発生

EKS Pod Identity

eks-pod-identity.png

EKS Pod Identity は、IRSA よりもシンプルなセットアップかつ STS 呼び出し不要の IAM ロール付与機能を提供します。

認証フロー

  1. Pod Identity Association を作成して、IAM ロールと Kubernetes Namespace および Service Account をマッピング
  2. EKS が内部的に Pod Identity Agent をノードにインストール
  3. 対応する Pod は Pod Identity を使って自動的に IAM ロールを引き受ける
  4. EKS はノード上に権限管理のインフラを提供して、Web Identity Token や STS を呼び出すことなく、適切な IAM ロールの Credentials を提供
  5. Pod 内の AWS SDK や CLI は、IMDS(Instance Metadata Service)を利用して直接一時的な Credentials を取得

メリット

  • 最小特権:Pod 毎に限定された最小権限を IAM に設定できる
  • 認証情報の分離:Pod やコンテナ毎に IAM 認証情報を分離できる
  • IMDS 経由の権限遮断:EC2 ノードの IAM ロール権限を制御できる
  • 監査対応:AWS CloudTrail で IAM 使用履歴を記録・追跡できる
  • シンプルな認証機構:OIDC Provider の設定が不要、IRSA より導入・運用が容易
  • 運用責任の分離:IAM と KSA をロール毎に明確に分割できる
  • IAM ロールの再利用性:クラスタ毎の OIDC 設定が不要で、IAM プリンシパルの定義が簡素で使い回しもできる

制限

  • AWS Outposts 上の EKS で使用できない
  • Amazon EKS Anywhere(オンプレミス)をサポートしていない
  • Amazon EC2 上に手動で構築した Kubernetes クラスタで使用できない

比較

項目 EKS IRSA EKS Pod Identity
GA 2019 年 9 月 2023 年 11 月
認証方式 Web Identity → STS AssumeRole Pod Identity Agent 経由
認証情報の取得手段 Pod 内の JWT → STS EKS が自動的に Credentials を供給
AWS SDK 設定 自動または手動で設定 IMDS 経由で自動
STS 呼び出し 必要 不要
導入の容易さ 中程度(OIDC 設定等) 簡単(Pod Identity Association のみ)
セキュリティ IAM + Kubernetes RBAC を兼ねる EKS ネイティブでより安全な設計
OIDC Provider 必要 不要

どちらを使うのか

結論:

現時点ではどちらが良い悪いというのは無く、利用する用途によって使い分けます。

ただし、IRSA の場合は、クラスタ毎に Control-Plane の OIDC Provider を使用して IAM ロールの委任(AssumeRoleWithWebIdentity)が必要なため、マルチクラスタの場合は、各 OIDC Provider に対応するように、IAM ロールの信頼ポリシを明示的に変更する必要があります。

その点、Pod Identity の方が融通が効くかと思います。

とは言え、慣れしたしんだ IRSA を引き続き使用することも可能ではあるため、現時点で無理やり Pod Identity へ移行する必要は無いのかなと思います。

Pod Identity の推奨化

2024 年 12 月に発表された EKS Auto Mode では、KSA と IAM ロールを紐付ける方法として Pod Identity がネイティブにサポートされています。

従来の EKS では、Pod Identity を使用するために Addon で Pod Idenitity Agent を追加する必要がありましたが、EKS Auto Mode ではクラスタを作成した時点で DaemonSet(ノード毎に一つの Agent)として追加されます。

AWS は、今後 Pod Identity をデフォルトとして、Pod Identity が使用できない場面で IRSA を使うことを推奨しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?