View a markdown version of this page

授予 EKS Auto Mode 負載平衡器控制器對特定 Secret 的存取權 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

授予 EKS Auto Mode 負載平衡器控制器對特定 Secret 的存取權

在本教學課程中,您會授予 Amazon EKS Auto Mode 負載平衡器控制器對特定 Kubernetes 的讀取存取權Secret。這會解除封鎖 ALB 上的 OIDC 身分驗證Ingress。您可以使用以eks:managed群組為RoleBinding目標Role的命名空間範圍。

本教學課程大約需要 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註釋中Secret名為 的 Kubernetes。其受管存取政策目前未get授予Secret物件,因此對帳程式失敗,並顯示類似如下的訊息:

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>"

使用中所述的機制將其他 Kubernetes RBAC 授予 EKS Auto Mode 受管控制器,您可以在其Secret所需的 OIDC get上授予受管控制器。

先決條件

開始之前,請確定您已:

  • 具有自動建立AWSServiceRoleForAmazonEKS存取項目的 Amazon EKS Auto Mode 叢集。

  • kubectl 已設定叢集存取。

  • 安裝並設定具有 aws sts get-caller-identity和 AWS 許可的 CLIaws eks describe-access-entry

  • 使用alb.ingress.kubernetes.io/auth-type: oidc註釋及其Secret參考的 Kubernetes Ingress的 ALB。

步驟 1:識別要新增至允許清單的秘密

ALB 上的 OIDC 組態Ingress如下所示。記錄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" }

此範例的其餘部分使用命名空間monitoringSecret名稱 oidc

步驟 2:套用命名空間範圍的角色和 RoleBinding

此表單會完全授予get一個命名空間Secret中名為 的 。將下列項目儲存為 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時 (通常在幾分鐘內) 重新協調 。授予運作時,先前的secrets "oidc" is forbidden錯誤會停止出現在 上,Ingress而且負載平衡器會繼續。如果錯誤仍然存在,請重新檢查 Role’s `namespaceresourceNamesRoleBinding主體。

移除授予

重要

只要 ALB Ingress使用 ,請將 Role和 保持在RoleBinding原位alb.ingress.kubernetes.io/auth-type: oidc。移除它們會重新中斷 上的 OIDC 解析度Ingress

如果您在 上停止使用 OIDCIngress,請移除授予:

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