

 **協助改進此頁面** 

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

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

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

# 授予 EKS Auto Mode 負載平衡器控制器對特定 Secret 的存取權
<a name="auto-managed-rbac-example"></a>

在本教學課程中，您會授予 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 受管控制器](auto-managed-rbac.md)，您可以在其`Secret`所需的 OIDC `get`上授予受管控制器。

## 先決條件
<a name="_prerequisites"></a>

開始之前，請確定您已：
+ 具有自動建立`AWSServiceRoleForAmazonEKS`存取項目的 Amazon EKS Auto Mode 叢集。
+  `kubectl` 已設定叢集存取。
+ 安裝並設定具有 `aws sts get-caller-identity`和 AWS 許可的 CLI`aws eks describe-access-entry`。
+ 使用`alb.ingress.kubernetes.io/auth-type: oidc`註釋及其`Secret`參考的 Kubernetes `Ingress`的 ALB。

## 步驟 1：識別要新增至允許清單的秘密
<a name="_step_1_identify_the_secret_to_add_to_the_allow_list"></a>

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

此範例的其餘部分使用命名空間`monitoring`和`Secret`名稱 `oidc`。

## 步驟 2：套用命名空間範圍的角色和 RoleBinding
<a name="_step_2_apply_a_namespace_scoped_role_and_rolebinding"></a>

此表單會完全授予`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：確認傳入復原
<a name="_step_3_confirm_the_ingress_recovers"></a>

負載平衡器控制器會在下一次通過`Ingress`時 （通常在幾分鐘內） 重新協調 。授予運作時，先前的`secrets "oidc" is forbidden`錯誤會停止出現在 上，`Ingress`而且負載平衡器會繼續。如果錯誤仍然存在，請重新檢查 `Role’s `namespace`、 `resourceNames`和`RoleBinding`主體。

## 移除授予
<a name="_removing_the_grant"></a>

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

如果您在 上停止使用 OIDC`Ingress`，請移除授予：

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

## 相關資源
<a name="_related_resources"></a>
+  [將其他 Kubernetes RBAC 授予 EKS Auto Mode 受管控制器](auto-managed-rbac.md) — `eks:managed`群組的概念概觀，以及如何限制授予的範圍。
+  [使用 EKS 存取項目授予 IAM 使用者 Kubernetes 的存取權](access-entries.md) — Amazon EKS 存取項目。
+  Kubernetes 文件中的[使用 RBAC 授權](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。