Kubernetes 応用コース 解説

EKS Pod IdentityとExternal Secrets — 権限と値を分ける

PodにAWSアクセスキーを置かず、ServiceAccountとIAMロールの関連付けで一時的な認証情報を得ます。External Secrets Operatorはその権限でSecrets Managerの値をKubernetes Secretへ同期します。

TL;DR

  1. Pod IdentityはPodの権限をIAMロールとして与える方式。
  2. ServiceAccountとIAMロールの関連付けが、権限境界の中心になる。
  3. ESOは外部の秘密情報を読み、Kubernetes Secretとして必要な形に同期する。

01秘密そのものを埋め込まない

Pod→Pod Identity Agent→STS/IAM Role→AWSサービスの認証フロー

Pod→Pod Identity Agent→STS/IAM Role→AWSサービスの認証フロー
秘密そのものを埋め込まないを図解

マニフェストやイメージにAWS認証情報を含めず、EKS Pod Identityでワークロードに必要なIAMロールを関連付けます。Podは必要時に一時的な認証情報を得てAWS APIへアクセスします。

押さえること:Pod IdentityはPodの権限をIAMロールとして与える方式。

02ServiceAccountがKubernetes側の窓口

Namespace内のServiceAccountとIAM RoleをAssociationで結ぶ図

Namespace内のServiceAccountとIAM RoleをAssociationで結ぶ図
ServiceAccountがKubernetes側の窓口を図解

KubernetesではServiceAccountをワークロードのアイデンティティとして使います。Pod Identity AssociationがServiceAccountとIAMロールを結び、どのワークロードにどのAWS権限を与えるかを明示します。

押さえること:ServiceAccountとIAMロールの関連付けが、権限境界の中心になる。

03ESOは値を必要な場所へ同期する

Secrets Manager→ESO→ExternalSecret→Kubernetes Secret→Pod

Secrets Manager→ESO→ExternalSecret→Kubernetes Secret→Pod
ESOは値を必要な場所へ同期するを図解

External Secrets Operatorは外部ストアの値を読み、ExternalSecretの定義に従ってKubernetes Secretを作ります。アプリは通常どおりSecretを参照し、値の保管元はSecrets Managerに残します。

押さえること:ESOは外部の秘密情報を読み、Kubernetes Secretとして必要な形に同期する。

結論

  1. Pod IdentityはPodの権限をIAMロールとして与える方式。
  2. ServiceAccountとIAMロールの関連付けが、権限境界の中心になる。
  3. ESOは外部の秘密情報を読み、Kubernetes Secretとして必要な形に同期する。