このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「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 のロードバランサーコントローラーに特定のシークレットへのアクセスを許可する」を参照してください。