View a markdown version of this page

EKS Auto Mode のロードバランサーコントローラーに特定のシークレットへのアクセスを許可する - Amazon EKS

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

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

EKS Auto Mode のロードバランサーコントローラーに特定のシークレットへのアクセスを許可する

このチュートリアルでは、Amazon EKS Auto Mode のロードバランサーコントローラーに、特定の Kubernetes Secret への読み取りアクセス権を付与します。これにより、ALB Ingress での OIDC 認証が可能になります。eks:managed グループを対象にした、名前空間スコープの Role と RoleBinding を使用します。

このチュートリアルの完了には約 15 分かかります。作成する Kubernetes RBAC オブジェクトには AWS 料金は発生しません。

Amazon EKS Auto Mode のロードバランサーコントローラーは、ALB Ingress オブジェクトでの OIDC 認証をサポートしています。この認証を有効にするには、alb.ingress.kubernetes.io/auth-type: oidc アノテーションを使用します。OIDC 設定を解決するために、コントローラーは alb.ingress.kubernetes.io/auth-idp-oidc 注釈で指定された Kubernetes Secret を読み取ります。現在、そのマネージドアクセスポリシーは Secret オブジェクトに対する get を付与していないため、リコンサイラーは失敗し、次のようなメッセージを受け取ります。

Failed build model due to ingress: <ns>/<name>: secrets "<secret>" is forbidden: User "arn:aws:sts::<acct>:assumed-role/AWSServiceRoleForAmazonEKS/<session>" cannot get resource "secrets" in API group "" in the namespace "<ns>"

EKS Auto Mode のマネージドコントローラーに追加の Kubernetes RBAC を付与する で説明されているメカニズムを使用すると、マネージドコントローラーに、必要な OIDC Secret に対する get のみを付与できます。

前提条件

開始する前に、以下の準備が整っていることを確認します。

  • 自動的に作成された AWSServiceRoleForAmazonEKS アクセスエントリを持つ Amazon EKS Auto Mode クラスター。

  • クラスターアクセスが設定された kubectl。

  • aws sts get-caller-identity と aws eks describe-access-entry のアクセス許可でインストールおよび設定された AWS CLI。

  • alb.ingress.kubernetes.io/auth-type: oidc 注釈を使用する ALB Ingress、およびそれが参照する Kubernetes Secret。

ステップ 1: 許可リストに追加するシークレットを特定する

ALB Ingress 上の OIDC 設定は次のようになります。Secret の名前と Ingress 名前空間を記録します – RBAC オブジェクトは Secret と同じ名前空間に存在する必要があります。

annotations: alb.ingress.kubernetes.io/auth-type: oidc alb.ingress.kubernetes.io/auth-idp-oidc: > { "issuer": "...", "authorizationEndpoint": "...", "tokenEndpoint": "...", "userInfoEndpoint": "...", "secretName": "oidc" }

この例の残りの部分では、名前空間 monitoring と Secret 名 oidc を使用します。

ステップ 2: 名前空間スコープのロールとロールバインディングを適用する

この形式では、1 つの名前空間内の指定された Secret に対して get のみを付与します。次を eks-managed-oidc-secret-reader.yaml として保存します。

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: eks-managed-oidc-secret-reader namespace: monitoring rules: - apiGroups: [""] resources: ["secrets"] resourceNames: ["oidc"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-managed-oidc-secret-reader namespace: monitoring subjects: - kind: Group name: eks:managed apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-managed-oidc-secret-reader apiGroup: rbac.authorization.k8s.io

適用:

kubectl apply -f eks-managed-oidc-secret-reader.yaml

後で許可リストにさらに Secret オブジェクトを追加するには、Role’s `resourceNames リストに名前を追加して再適用します。

ステップ 3: Ingress が復旧したことを確認する

ロードバランサーコントローラーは、次のパス (通常は数分以内) で Ingress を再調整します。付与が機能すると、以前の secrets "oidc" is forbidden エラーが Ingress に表示されなくなり、ロードバランサーの処理が進みます。エラーが解消されない場合は、Role’s `namespace、resourceNames、および RoleBinding サブジェクトを再確認します。

付与を削除する

重要

ALB Ingress が alb.ingress.kubernetes.io/auth-type: oidc を使用している限り、Role と RoleBinding をそのまま保持します。これらを削除すると、Ingress での OIDC 解決が再び機能しなくなります。

Ingress で OIDC の使用を停止する場合は、付与を削除します:

kubectl delete rolebinding eks-managed-oidc-secret-reader -n monitoring kubectl delete role eks-managed-oidc-secret-reader -n monitoring