

 **協助改進此頁面** 

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

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

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

# 將存取政策與存取項目相關聯
<a name="access-policies"></a>

您可以向*類型*為 `STANDARD` 的*存取項目*指派一個或多個存取政策。Amazon EKS 會自動向其他類型的存取項目授予在叢集中正常運作所需的許可。Amazon EKS 存取政策包含 Kubernetes 許可，而不是 IAM 許可。在將存取政策與存取項目關聯之前，請確認您熟悉每個存取政策中包含的 Kubernetes 許可。如需詳細資訊，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。如果沒有一個存取政策符合您的要求，則不要將存取政策與存取項目關聯。而是為存取項目指定一個或多個*群組名稱*，並建立和管理 Kubernetes 角色型存取控制物件。如需詳細資訊，請參閱 [建立存取項目](creating-access-entries.md)。
+ 現有的存取項目。若要建立服務角色，請參閱[建立存取項目](creating-access-entries.md)。
+ 具有下列許可的 AWS Identity and Access Management 角色或使用者：`ListAccessEntries`、`DescribeAccessEntry`、`UpdateAccessEntry`、`ListAccessPolicies`、`AssociateAccessPolicy` 和 `DisassociateAccessPolicy`。如需詳細資訊，請參閱《*服務授權參考*》中的 [Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html#amazonelastickubernetesservice-actions-as-permissions) 定義的動作一節。

在將存取政策與存取項目關聯之前，請考量以下要求：
+ 每個存取項目可以關聯多個存取政策，但只能將每個政策與一個存取項目關聯一次。如果您將一個存取項目與多個存取政策關聯，則該存取項目的 IAM 主體擁有所有關聯的存取政策中包含的所有許可。
+ 您可以將存取政策的適用範圍限定為叢集上的所有資源，或透過指定一個或多個 Kubernetes 命名空間的名稱來限制其適用範圍。您可以將萬用字元用於命名空間名稱。例如，如果要將存取政策的適用範圍限定為以 `dev-` 開頭的所有命名空間，則可以指定 `dev-*` 作為命名空間名稱。確認叢集上存在相應命名空間，並且拼字與叢集上的實際命名空間名稱相符。Amazon EKS 不會確認叢集上命名空間的拼字或命名空間是否存在。
+ 將存取政策關聯到存取項目後，您可以變更存取政策的*存取範圍*。如果您已將存取政策的適用範圍限定為 Kubernetes 命名空間，則可以根據需要新增和移除關聯的命名空間。
+ 如果您將存取政策關聯到也指定了*群組名稱*的存取項目，則相應 IAM 主體擁有所有關聯存取政策中的所有許可。它還擁有在指定群組名稱的任何 `Role` 和 `RoleBinding` 物件中指定的任何 `Role` 或 `ClusterRole` 物件中的所有許可。
+ 如果您執行 `kubectl auth can-i --list` 命令，您不會看到與您在執行該命令時所使用的 IAM 主體的存取項目關聯的存取政策指派的任何 Kubernetes 許可。只有當您已在繫結至為存取項目指定的群組名稱或使用者名稱的 Kubernetes `Role` 或 `ClusterRole` 物件中授予 Kubernetes 許可時，此命令才會顯示相應許可。
+ 如果您在與叢集上的 Kubernetes 物件互動時模擬 Kubernetes 使用者或群組，例如將 `kubectl` 命令與 `--as username ` 或 `--as-group group-name ` 結合使用，則將強制使用 RBAC 授權。因此，相應 IAM 主體沒有與相應存取項目關聯的任何存取政策指派的許可。相應 IAM 主體模擬的使用者或群組擁有的 Kubernetes 許可，僅限於您在繫結到該群組名稱或使用者名稱的 Kubernetes `Role` 或 `ClusterRole` 物件中授予的 Kubernetes 許可。為了讓相應 IAM 主體擁有關聯的存取政策中的許可，請勿模擬 Kubernetes 使用者或群組。相應 IAM 主體還將擁有您在繫結至為存取項目指定的群組名稱或使用者名稱的 Kubernetes `Role` 或 `ClusterRole` 物件中授予的任何許可。如需詳細資訊，請參閱 Kubernetes 文件中的[使用者模擬](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation)一節。

您可以使用 AWS 管理主控台 或 AWS CLI 將存取政策與存取項目關聯。

## AWS 管理主控台
<a name="access-associate-console"></a>

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

1. 選擇要將存取政策關聯到的存取項目所在的叢集的名稱。

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

1. 如果存取項目的類型為**標準**，則可以將 Amazon EKS**存取政策**與之關聯或取消關聯。如果存取項目的類型不為**標準**，則此選項不可用。

1. 選擇**關聯存取政策**。

1. 對於**政策名稱**，選取具有您希望相應 IAM 主體擁有的許可的政策。若要查看每個政策包含的許可，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。

1. 對於**存取範圍**，選擇存取範圍。如果您選擇**叢集**，則該存取政策中的許可將授予相應 IAM 主體對所有 Kubernetes 命名空間中的資源的存取權。如果您選擇 **Kubernetes 命名空間**，則可以選擇**新增命名空間**。在顯示的**命名空間**欄位中，您可以輸入叢集上的 Kubernetes 命名空間的名稱。如果您希望相應 IAM 主體擁有跨多個命名空間的許可，則可以輸入多個命名空間。

1. 選擇**新增存取政策**。

## AWS CLI
<a name="access-associate-cli"></a>

1. 已在裝置或 AWS CloudShell 上安裝和設定 AWS 命令列介面 (AWS CLI) 版本 `2.12.3` 或更新版本，或是版本 `1.27.160` 或更新版本。若要檢查您目前的版本，請使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。如 `yum`、`apt-get` 或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI 落後數個版本之多。若要安裝最新版本，請參閱《*AWS 命令列介面使用者指南*》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)與[使用 aws configure 的快速組態](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)。AWS CloudShell 中安裝的 AWS CLI 版本也可能比最新版本落後數個版本。若要更新，請參閱《*AWS CloudShell 使用者指南*》中的[安裝 AWS CLI 至您的主目錄](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。

1. 檢視可用的存取政策。

   ```
   aws eks list-access-policies --output table
   ```

   範例輸出如下。

   ```
   ---------------------------------------------------------------------------------------------------------
   |                                          ListAccessPolicies                                           |
   +-------------------------------------------------------------------------------------------------------+
   ||                                           accessPolicies                                            ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ||                                 arn                                 |             name              ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSAdminPolicy        |  AmazonEKSAdminPolicy         ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy |  AmazonEKSClusterAdminPolicy  ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSEditPolicy         |  AmazonEKSEditPolicy          ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSViewPolicy         |  AmazonEKSViewPolicy          ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ```

   若要查看每個政策包含的許可，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。

1. 檢視現有的存取項目。使用您叢集的名稱取代 *my-cluster*。

   ```
   aws eks list-access-entries --cluster-name my-cluster
   ```

   範例輸出如下。

   ```
   {
       "accessEntries": [
           "arn:aws:iam::111122223333:role/my-role",
           "arn:aws:iam::111122223333:user/my-user"
       ]
   }
   ```

1. 將存取政策與存取項目關聯。以下範例將 `AmazonEKSViewPolicy` 存取政策與一個存取項目關聯。每當 *my-role* IAM 角色嘗試存取叢集上的 Kubernetes 物件時，Amazon EKS 將授權該角色使用政策中的許可來存取且僅存取 *my-namespace1* 和 *my-namespace2* Kubernetes 命名空間中的 Kubernetes 物件。用您的叢集名稱取代 *my-cluster*，用您的 AWS 帳戶 ID 取代 *111122223333*，並用您想要讓 Amazon EKS 為其授予對 Kubernetes 叢集上物件之存取權的 IAM 角色取代 *my-role*。

   ```
   aws eks associate-access-policy --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role \
       --access-scope type=namespace,namespaces=my-namespace1,my-namespace2 --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy
   ```

   如果您希望相應 IAM 主體擁有適用於整個叢集的許可，請用 `type=cluster` 取代 `type=namespace,namespaces=my-namespace1,my-namespace2 `。如果要將多個存取政策關聯到該存取項目，請多次執行該命令，並每次使用不同的存取政策。每個關聯的存取政策都有自身的適用範圍。
**注意**  
如果您稍後想要變更關聯的存取政策的適用範圍，請再次執行先前的命令並指定新的適用範圍。例如，如果您想要移除 *my-namespace2*，則只需使用 `type=namespace,namespaces=my-namespace1 ` 再次執行命令。如果您想將適用範圍從 `namespace` 變更為 `cluster`，您需要使用 `type=cluster` 再次執行該命令，而不使用 `type=namespace,namespaces=my-namespace1,my-namespace2 `。

1. 確定哪些存取政策與某個存取項目關聯。

   ```
   aws eks list-associated-access-policies --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role
   ```

   範例輸出如下。

   ```
   {
       "clusterName": "my-cluster",
       "principalArn": "arn:aws:iam::111122223333",
       "associatedAccessPolicies": [
           {
               "policyArn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy",
               "accessScope": {
                   "type": "cluster",
                   "namespaces": []
               },
               "associatedAt": "2023-04-17T15:25:21.675000-04:00",
               "modifiedAt": "2023-04-17T15:25:21.675000-04:00"
           },
           {
               "policyArn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy",
               "accessScope": {
                   "type": "namespace",
                   "namespaces": [
                       "my-namespace1",
                       "my-namespace2"
                   ]
               },
               "associatedAt": "2023-04-17T15:02:06.511000-04:00",
               "modifiedAt": "2023-04-17T15:02:06.511000-04:00"
           }
       ]
   }
   ```

   在前面的範例中，相應存取項目的 IAM 主體擁有相應叢集上所有命名空間的檢視許可，以及兩個 Kubernetes 命名空間的管理員許可。

1. 將存取政策與存取項目取消關聯。在此範例中，`AmazonEKSAdminPolicy` 政策與存取項目取消關聯。但是，相應 IAM 主體保留 `AmazonEKSViewPolicy` 存取政策中對 *my-namespace1* 和 *my-namespace2* 命名空間中物件的許可，因為該存取政策並未與該存取項目取消關聯。

   ```
   aws eks disassociate-access-policy --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role \
       --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy
   ```

要列出所有可用的存取政策，請參閱 [檢閱存取政策許可](access-policy-permissions.md)。