

 **協助改進此頁面** 

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

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

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

# 使用 EKS Pod 身分目標 IAM 角色存取 AWS 資源
<a name="pod-id-assign-target-role"></a>

在 Amazon Elastic Kubernetes Service (Amazon EKS) 上執行應用程式時，您可能需要存取存在於不同 AWS 帳戶中 AWS 的資源。本指南說明如何使用 EKS Pod Identity 設定跨帳戶存取，這可讓您的 Kubernetes Pod 使用目標角色存取其他 AWS 資源。

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

開始之前，請確保您已完成下列步驟：
+  [設定 Amazon EKS Pod 身分識別代理程式](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) 
+  [建立 EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html) 

## 運作方式
<a name="_how_it_works"></a>

Pod Identity 可讓 EKS 叢集中的應用程式透過稱為角色鏈結的程序跨帳戶存取 AWS 資源。

建立 Pod Identity 關聯時，您可以提供兩個 IAM 角色：與 [EKS 叢集位於相同帳戶中的 EKS Pod Identity 角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)，以及包含您要存取 AWS 之資源的帳戶的目標 IAM 角色 （例如 S3 儲存貯體或 RDS 資料庫）。由於 [IAM PassRole](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_iam-passrole-service.html) 需求，[EKS Pod 身分角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)必須位於 EKS 叢集的帳戶中，而目標 IAM 角色可以位於任何 AWS 帳戶中。PassRole 可讓 AWS 實體將角色假設委派給其他服務。EKS Pod Identity 使用 PassRole 將角色連線至 Kubernetes 服務帳戶，要求角色和傳遞該角色的身分都與 EKS 叢集位於相同的 AWS 帳戶中。當您的應用程式 Pod 需要存取 AWS 資源時，它會向 Pod Identity 請求登入資料。Pod 身分識別隨後可自動依序執行兩項角色擔任：首先擔任 [EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)，然後使用這些憑證來擔任目標 IAM 角色。此程序為您的 Pod 提供暫時登入資料，該登入資料具有目標角色中定義的許可，允許安全存取其他 AWS 帳戶中的資源。

## 快取考量
<a name="_caching_considerations"></a>

由於採用快取機制，對現有 Pod 身分識別關聯中 IAM 角色更新，可能不會在 EKS 叢集上執行的 Pod 中立即生效。Pod 身分識別代理程式可依據擷取憑證時關聯的組態來快取 IAM 憑證。若關聯僅包括 [EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)，而不含目標 IAM 角色，快取憑證則可持續 6 小時。若關聯包括 [EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html) ARN 與目標 IAM 角色，快取憑證則可持續 59 分鐘。修改現有關聯，如更新 [EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html) ARN 或新增目標 IAM 角色，不會對現有快取進行重設。因此，代理程式不會識別更新，直至快取憑證資料重新整理。如需加速套用變更，您可重新建立現有 Pod；否則，您將需要等候快取到期。

## 步驟 1：建立目標 IAM 角色並與之關聯
<a name="_step_1_create_and_associate_a_target_iam_role"></a>

在此步驟中，您將建立並設定目標 IAM 角色，藉此來建立安全的信任鏈。為了示範，我們將建立新的目標 IAM 角色，以在兩個 AWS 帳戶之間建立信任鏈：[EKS 叢集帳戶中的 EKS Pod 身分角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html) （例如 `eks-pod-identity-primary-role`) 取得在您的目標帳戶中擔任目標 IAM 角色 （例如 `eks-pod-identity-aws-resources`) 的許可，以允許存取 Amazon S3 儲存貯體等 AWS 資源。 AWS 

### 建立目標 IAM 角色
<a name="_create_the_target_iam_role"></a>

1. 開啟 [Amazon IAM 主控台](https://console.aws.amazon.com/iam/home)。

1. 在頂端導覽列中，確認您已登入帳戶，其中包含目標 IAM 角色 AWS 的資源 （例如 S3 儲存貯體或 DynamoDB 資料表）。

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 選擇**建立角色**按鈕，然後選擇「可信任實體類型」下的** AWS 帳戶**。

1. 選擇**另一個 AWS 帳戶**，輸入 AWS 您的帳戶號碼 ([EKS Pod 身分角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)所在的帳戶），然後選擇**下一步**。

1. 新增您想要關聯角色的許可政策 (例如 AmazonS3FullAccess)，然後選擇**下一步**。

1. 輸入角色名稱 (例如 `MyCustomIAMTargetRole`)，然後選擇**建立角色**。

### 更新目標 IAM 角色信任政策
<a name="_update_the_target_iam_role_trust_policy"></a>

1. 建立角色之後，您將返回到**角色**清單。尋找並選取您在之前步驟中建立的角色政策 (例如 `MyCustomIAMTargetRole`)。

1. 選取**信任關係**標籤。

1. 點選右側的**編輯信任政策**。

1. 在政策編輯器中，使用您的信任政策來取代預設 JSON。將角色名稱和 IAM 角色 ARN `111122223333`中的預留位置值取代為託管 EKS 叢集 AWS 的帳戶 ID。此外，您亦可選擇在角色信任政策中使用 PrincipalTags，以便僅授權指定叢集與命名空間的特定服務帳戶來擔任目標角色。例如：

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/eks-cluster-arn": "arn:aws:eks:us-east-1:111122223333:cluster/example-cluster",
          "aws:RequestTag/kubernetes-namespace": "ExampleNameSpace",
          "aws:RequestTag/kubernetes-service-account": "ExampleServiceAccountName"
        },
        "ArnEquals": {
          "aws:PrincipalARN": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role"
        }
      }
    }
  ]
}
```

上述政策可讓`eks-pod-identeity-primary-role` AWS 帳戶 111122223333 中具有相關 [EKS Pod Identity Session 標籤](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html)的角色擔任此角色。

若您在 EKS Pod 身分識別中[停用工作階段標籤](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html#pod-id-abac-tags)，EKS Pod 身分識別亦可在擔任目標角色時，利用 Pod 的叢集、命名空間及服務帳戶相關資訊來設定 `sts:ExternalId`。

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "region/111122223333/cluster-name/namespace/service-account-name"
        },
        "ArnEquals": {
          "aws:PrincipalARN": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "sts:TagSession"
    }
  ]
}
```

藉助上述政策，可確保僅預期的叢集、命名空間及服務帳戶擔任目標角色。

### 更新 EKS Pod 身分識別角色的許可政策
<a name="_update_the_permission_policy_for_eks_pod_identity_role"></a>

在此步驟中，您將新增目標 IAM 角色 ARN 作為資源，藉此來更新與 Amazon EKS 叢集關聯的 [EKS Pod 身分識別](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)角色的許可政策。

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

1. 在左側導覽窗格中，選取**叢集**，然後選取 EKS 叢集的名稱。

1. 選擇**存取**索引標籤。

1. 在 **Pod 身分識別關聯**項下，選取 [EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)。

1. 依序選擇**許可**、**新增許可**、**建立內嵌政策**。

1. 在右側選擇 **JSON**。

1. 在政策編輯器中，使用您的許可政策來取代預設 JSON。使用您的目標 IAM 角色，來取代 IAM 角色 ARN 中的角色名稱及 `222233334444` 的預留位置。例如：

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole",
                "sts:TagSession"
            ],
            "Resource": "arn:aws:iam::222233334444:role/eks-pod-identity-aws-resources"
        }
    ]
}
```

## 步驟 2：關聯目標 IAM 角色與 Kubernetes 服務帳戶
<a name="_step_2_associate_the_target_iam_role_to_a_kubernetes_service_account"></a>

在此步驟中，您將在 EKS 叢集中的目標 IAM 角色與 Kubernetes 服務帳戶間建立關聯。

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

1. 在左側導覽窗格中，選取**叢集**，然後選取您想要新增關聯的目標叢集的名稱。

1. 選擇**存取**索引標籤。

1. 在 **Pod 身分識別關聯**中，選擇**建立**。

1. 針對您想要其擔任角色的工作負載，選擇 **IAM 角色**中的 [EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)。

1. 在**目標 IAM 角色**中選擇目標 IAM 角色，將由 [EKS Pod 身分識別角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html)擔任。

1. 在 **Kubernetes 命名空間**欄位，輸入您想要建立關聯的命名空間名稱 (例如 `my-app-namespace`)。這將定義服務帳戶所在的位置。

1. 在 **Kubernetes 服務帳戶**欄位，輸入將會使用 IAM 憑證的服務帳戶名稱 (例如 `my-service-account`)。這將連結 IAM 角色至服務帳戶。

1. （選用） 選取**停用工作階段標籤**，以停用 Pod Identity 在擔任角色時自動新增的預設工作階段標籤。

1. （選用） 切換 **設定工作階段政策**以設定 IAM 政策，將超出連接至**目標 IAM 角色之 IAM 政策中定義之許可的額外限制套用至此 Pod Identity **關聯。
**注意**  
1. 只有在核取**停用工作階段標籤設定時，才能套用工作階段**政策。2. 如果您指定工作階段政策，則政策限制適用於**目標 IAM 角色**的許可，而不是與此 Pod Identity 關聯相關聯的 **IAM 角色**。

1. 選擇**建立**可建立關聯。