View a markdown version of this page

EKS Auto Mode のマネージドコントローラーに追加の Kubernetes RBAC を付与する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

EKS Auto Mode のマネージドコントローラーに追加の Kubernetes RBAC を付与する

Amazon EKS Auto Mode は、ロードバランシング、ネットワーキング、コンピューティング、ブロックストレージ、クラスターインサイトの各コントローラーをお客様に代わって管理します。これらのコントローラーは EKS コントロールプレーン上で実行されます。これらは AWSServiceRoleForAmazonEKS サービスにリンクされたロールとしてお客様のクラスターに対して認証を行い、クラスター内でのアクセス許可は、そのアクセスエントリにアタッチされた AWS マネージドアクセスポリシーから付与されます。

マネージドコントローラーの Kubernetes RBAC は、お客様自身で拡張できます。これは、マネージドポリシーが必要なアクセス許可をまだ付与していない場合に役立ちます。例えば、特定の Secret に対する get などです。

Amazon EKS Auto Mode のクラスターでは、AWSServiceRoleForAmazonEKS に対して自動作成されたアクセスエントリが、Kubernetes グループ eks:managed も宣言します。Kubernetes RBAC は付加的です。subjects: に eks:managed グループを指定した RoleBinding (または ClusterRoleBinding) は、マネージドアクセスポリシーに加えて、マネージドコントローラーに追加のアクセス許可を付与します。

仕組み

  • EKS Auto Mode のマネージドコントローラーは、サービスにリンクされたロール AWSServiceRoleForAmazonEKS としてお客様のクラスターに接続します。

  • そのロールに対して自動作成されたアクセスエントリは、kubernetesGroups: ["eks:managed"] を宣言します。

  • 追加のアクセス許可を記述する Role (名前空間スコープ) または ClusterRole (クラスター全体) と、subjects: に eks:managed グループを指定した RoleBinding / ClusterRoleBinding を作成します。

  • Kubernetes RBAC はお客様のバインディングとマネージドアクセスポリシーを組み合わせるため、マネージドコントローラーは両方のアクセス許可を受け取ります。

グループが存在することを確認するには、以下を実行します。

CLUSTER=<your-cluster> REGION=<your-region> ACCT=$(aws sts get-caller-identity --query Account --output text) aws eks describe-access-entry \ --cluster-name "$CLUSTER" --region "$REGION" \ --principal-arn "arn:aws:iam::${ACCT}:role/aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS" \ --query 'accessEntry.kubernetesGroups'

正常な出力:

[ "eks:managed" ]

付与のスコープを厳密にする

eks:managed グループは、すべての EKS Auto Mode のマネージドコントローラーに適用されます。ユースケースで許容される範囲で追加付与するスコープをできるだけ狭め、マネージドコントローラーに必要なものだけを公開するようにします。

  • Role+RoleBinding (名前空間スコープ) を、ClusterRole+ClusterRoleBinding (クラスター全体) よりも優先します。

  • resources、resourceNames、verbs は、ユースケースを妨げない最小限のセットに制限します。例えば、すべての Secret オブジェクトに対する list, watch ではなく、名前を指定した単一の Secret に対する get を付与します。

  • 不要になったら、Role と RoleBinding を削除します。

Amazon EKS Auto Mode の考慮事項

  • この仕組みは、EKS Auto Mode のマネージドコントローラーの Kubernetes RBAC を拡張するだけです。マネージドアクセスポリシーによって付与される AWS IAM アクセス許可は変更しません。

  • eks:managed グループは、サービスにリンクされたロールが AWSServiceRoleForAmazonEKS である EKS Auto Mode のクラスターに存在します。

  • eks:managed へのバインディングは、すべての EKS Auto Mode のマネージドコントローラーに適用されます。実際の影響範囲を小さく抑えるには、resourceNames と名前空間の Role オブジェクトを使用します。これにより、名前を指定したリソースのみが、付与した動詞を通じてのみ公開されます。

  • これは、マネージドアクセスポリシーが必要なアクセス許可をまだカバーしていない場合を対象としたブリッジパターンです。AWS マネージドポリシーが既にそのアクセス許可をカバーしている場合は、代わりにマネージドポリシーを使用します。

例

EKS Auto Mode のロードバランサーコントローラーに、名前を指定した OIDC Secret に対する get を付与する (ALB Ingress の alb.ingress.kubernetes.io/auth-type: oidc 注釈のブロックを解除します) 手順を順を追って説明するチュートリアルについては、「EKS Auto Mode のロードバランサーコントローラーに特定のシークレットへのアクセスを許可する」を参照してください。