このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「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注釈を使用する ALBIngress、およびそれが参照する KubernetesSecret。
ステップ 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
関連リソース
-
EKS Auto Mode のマネージドコントローラーに追加の Kubernetes RBAC を付与する –
eks:managedグループの概念的な概要と、付与のスコープ設定方法。 -
EKS アクセスエントリを使用して Kubernetes へのアクセスを IAM ユーザーに許可する – Amazon EKS アクセスエントリ。
-
Kubernetes ドキュメントの「RBAC 認可を使用する
」。