

 **協助改進此頁面** 

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

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

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

# 為您的叢集建立 IAM OIDC 身分提供者
<a name="enable-iam-roles-for-service-accounts"></a>

您的叢集具有與其相關聯的 [OpenID Connect](https://openid.net/connect/) (OIDC) 發行者 URL。若要針對服務帳戶使用 AWS Identity and Access Management (IAM) 角色，叢集的 OIDC 發行者 URL 必須存在 IAM OIDC 供應商。

## 先決條件
<a name="_prerequisites"></a>
+ 現有 Amazon EKS 叢集。若要部署叢集，請參閱 [開始使用 Amazon EKS](getting-started.md)。
+ 在您的裝置或 AWS CloudShell 上安裝和設定的 AWS 命令列界面 (AWS CLI) 版本 `1.27.160` `2.12.3`或更新版本。若要檢查您目前的版本，請使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。適用於 macOS 的 `yum`、 `apt-get`或 Homebrew 等套件管理員通常是最新版本 CLI AWS 後面的幾個版本。若要安裝最新版本，請參閱《 * AWS 命令列界面使用者指南*》中的使用 aws 設定[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和快速組態。 [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)在 AWS CloudShell 中安裝的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它，請參閱《CloudShell [AWS 使用者指南》中的將 CLI 安裝到您的主目錄](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。 * AWS CloudShell *
+ `kubectl` 命令列工具安裝在您的裝置或 AWS CloudShell 上。版本可以與您的叢集 Kubernetes 版本相同，或是為最多比該版本更舊一版或更新一版的次要版本。例如，如果您的叢集版本為 `1.29`，則可以搭配使用 `kubectl` `1.28`、`1.29` 或 `1.30` 版。若要安裝或升級 `kubectl`，請參閱 [設定 `kubectl` 和 `eksctl`](install-kubectl.md)。
+ 包含叢集組態的現有 `kubectl` `config` 檔案。若要建立 `kubectl` `config` 檔案，請參閱[透過建立 kubeconfig 檔案將 kubectl 連線至 EKS 叢集](create-kubeconfig.md)。

您可以使用 `eksctl` 或 AWS 管理主控台為叢集建立 IAM OIDC 提供商。

## 建立 OIDC 提供商 (eksctl)
<a name="_create_oidc_provider_eksctl"></a>

1. 裝置或 AWS CloudShell 上安裝的`eksctl`命令列工具版本 `0.215.0`或更新版本。如需有關安裝或更新 `eksctl` 的指示，請參閱 `eksctl` 文件中的[安裝](https://eksctl.io/installation)一節。

1. 確定叢集的 OIDC 發行者 ID。

   擷取叢集的 OIDC 發行者 ID 並將其存放在變數中。使用您自己的值取代 `<my-cluster>`。

   ```
   cluster_name=<my-cluster>
   oidc_id=$(aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
   echo $oidc_id
   ```

1. 判斷您的帳戶中是否已經有擁有叢集發行者 ID 的 IAM OIDC 提供商。

   ```
   aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
   ```

   如果有輸出傳回，則表示您已經有叢集 IAM OIDC 提供商，且可以略過下一步驟。如果未傳回任何輸出，則您必須為叢集建立 IAM OIDC 提供商。

1. 使用下列命令為您的叢集建立 IAM OIDC 身分提供者。

   ```
   eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
   ```
**注意**  
如果您已啟用 EKS VPC 端點，則無法從該 VPC 內部存取 EKS OIDC 服務端點。因此，您的作業 (例如在 VPC 利用 `eksctl` 建立 OIDC 提供商) 將無法運作，並且會導致逾時。以下是範例錯誤訊息：  

   ```
   ** server cant find oidc.eks.<region-code>.amazonaws.com: NXDOMAIN
   ```

   若要完成此步驟，您可以在 VPC 外部執行 命令，例如 in AWS CloudShell 或連接至網際網路的電腦。或者，您可以在 VPC 中建立水平分割條件式解析程式，例如 Route 53 Resolver，以針對 OIDC 發行者 URL 使用不同的解析程式，而不為其使用 VPC DNS。如需 CoreDNS 中條件式轉送的範例，請參閱 GitHub 上的 [Amazon EKS 功能請求](https://github.com/aws/containers-roadmap/issues/2038)。

## 建立 OIDC 供應商AWS （主控台）
<a name="create_oidc_provider_shared_aws_console"></a>

1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 在左側窗格中，選取 **Clusters** (叢集)，然後在 **Clusters** (叢集) 頁面上選取您的叢集名稱。

1. 在 **Overview** (概觀) 標籤的 **Details** (詳細資訊) 區段中，記下 **OpenID Connect provider URL** (OpenID Connect 供應商 URL) 的值。

1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇 **Access management** (存取管理) 下的 **Identity Providers** (身分提供者)。如果列出的**提供商**與您叢集的 URL 相符，則表示您已經擁有叢集提供商。如果沒有列出符合叢集 URL 的提供商，則您必須建立一個。

1. 若要建立供應商，請選擇 **Add provider** (新增供應商)。

1. 對於**提供商類型**，選取 **OpenID Connect**。

1. 對於 **Provider URL** (提供商 URL)，輸入叢集的 OIDC 提供商 URL。

1. 對於 **Audience** (對象)，輸入 `sts.amazonaws.com`。

1. (選用) 新增任何標籤，例如可識別適用於此提供商的叢集的標籤。

1. 選擇 **Add provider** (新增提供者)。

後續步驟：[將 IAM 角色指派給 Kubernetes 服務帳戶](associate-service-account-role.md)