View a markdown version of this page

Amazon EKS 存取項目身分驗證 - AWS Batch

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

Amazon EKS 存取項目身分驗證

Amazon EKS 支援兩種機制來授予 IAM 主體呼叫叢集 Kubernetes API 的許可:舊版 aws-auth ConfigMap 和較新的存取項目 API。存取項目會授予 Kubernetes API 對 IAM 主體的存取權,而不需要您編輯 ConfigMap。 AWS Batch 可以透過任一機制對您的叢集進行身分驗證。

當您ENABLED在運算環境中eksConfiguration.accessEntry.desiredState將 設定為 時, AWS Batch 可以管理叢集上該運算環境的存取項目。您不再需要手動編輯 aws-auth ConfigMap。

是否 AWS Batch 佈建存取項目取決於您的 AWS Batch 運算環境和 Amazon EKS 叢集組態。如需詳細資訊,請參閱 與叢集 的互動 authenticationMode。

的值 accessEntry.desiredState

上的 desiredState 欄位會EksAccessEntry宣告運算環境所需的存取項目狀態。有效的值如下:

ENABLED

AWS Batch 在叢集上為運算環境建立受 AWS Batch管存取項目。只有在叢集上的所有運算環境都desiredState設為 時, AWS Batch 才會建立受 AWS Batch管存取項目 ENABLED(如需詳細資訊如何 AWS Batch 協調desiredState跨運算環境,請參閱 )。

DISABLED

AWS Batch 會刪除叢集的 AWS Batch受管存取項目。只有在叢集上的所有運算環境都desiredState設為 時, AWS Batch 才會刪除受 AWS Batch管存取項目 DISABLED(如需詳細資訊如何 AWS Batch 協調desiredState跨運算環境,請參閱 )。必須透過 ConfigMap aws-auth 設定對叢集的存取。

INHERIT_FROM_CLUSTER

AWS Batch 會延遲至叢集目前的存取項目 status。在身分驗證模式為 的 Amazon EKS 叢集上API, 會 AWS Batch 建立和管理存取項目,因為叢集沒有要返回的 aws-auth ConfigMap。在身分驗證模式為 CONFIG_MAP或 的叢集上API_AND_CONFIG_MAP, AWS Batch 不會新增或移除存取項目。

運算環境也會在 DescribeComputeEnvironments 回應中公開唯讀accessEntry.status欄位。 ACTIVE表示運算環境的 AWS Batch受管存取項目存在於叢集上,並優先於 aws-auth ConfigMap。 INACTIVE表示不存在受 AWS Batch管存取項目。這可能是因為 desiredState 是 DISABLED,因為以叢集為目標的運算環境尚未在 上達成一致desiredState,或是因為項目尚未佈建。如果 accessEntry.status是 INACTIVE,則 Batch 會使用 aws-auth ConfigMap 進行叢集存取。

注意

存取項目會在叢集上存在時ACTIVE立即報告,即使 AWS Batch 尚未完成關聯使其可供使用的存取政策。如果運算環境狀態變更為 ,INVALID而 accessEntry.status為 ACTIVE,請參閱 Amazon EKS 存取項目設定不完整。

注意

如果您省略 accessEntry 欄位, AWS Batch 不會記錄運算環境desiredState的 ,DescribeComputeEnvironments也不會傳回一個。為了佈建存取項目, AWS Batch 的行為與 相同INHERIT_FROM_CLUSTER。

與叢集 的互動 authenticationMode

特定 AWS Batch 的行為desiredState方式取決於叢集的身分驗證模式。下表同時適用於 CreateComputeEnvironment和 UpdateComputeEnvironment。

叢集 authenticationMode

運算環境 accessEntry.desiredState=ENABLED

運算環境 accessEntry.desiredState=DISABLED

運算環境 accessEntry.desiredState=INHERIT_FROM_CLUSTER

CONFIG_MAP

叢集上無法使用存取項目,因此 AWS Batch 不會建立或移除。 AWS Batch 仍會記錄您指定的值。變更叢集的身分驗證模式後,該記錄的值會在您的下一個 CreateComputeEnvironment或指定 的 UpdateComputeEnvironment 呼叫上生效desiredState。

API_AND_CONFIG_MAP

AWS Batch 會比較共用叢集的運算環境中記錄的值,請參閱 如何 AWS Batch 協調desiredState跨運算環境。

保留現有的存取模式。 AWS Batch 不會新增或移除存取項目。

API

在叢集上建立和維護存取項目。

請求會遭到拒絕。此模式中的叢集不支援 aws-auth ConfigMap,而且無法在叢集建立後啟用 ConfigMap 方法,因此 DISABLED會讓運算環境無法進行身分驗證。

在叢集上建立和維護存取項目。當叢集僅限 時API,繼承相當於 ENABLED。

如何 AWS Batch 協調desiredState跨運算環境

由於單一 Amazon EKS 叢集可以支援多個 AWS Batch 運算環境,因此叢集的存取組態是共用資源。 AWS Batch 因此, 會協調或比較和解析這些運算環境中記錄desiredState的值。

當叢集的 authenticationMode為 時API_AND_CONFIG_MAP, 會 AWS Batch 比較以叢集為目標之相同 AWS 帳戶和 AWS 區域中每個運算環境所desiredState記錄的 。 AWS Batch 會使用此比較來判斷是否要新增或移除指定 之每個 CreateComputeEnvironment或 UpdateComputeEnvironment操作的存取項目desiredState。

每個運算環境都有 desiredState=ENABLED

AWS Batch 在叢集上建立存取項目。

每個運算環境都有 desiredState=DISABLED

AWS Batch 如果存在存取項目, 會從叢集中刪除存取項目。

記錄desiredState的值不完全相符

AWS Batch 會保留現有的存取模式。存取項目不會新增或移除。這包括 ENABLED、 DISABLED和 的任何混合INHERIT_FROM_CLUSTER,也包括沒有desiredState記錄的任何運算環境。

注意

若要將身分驗證模式為 API_AND_CONFIG_MAP ConfigMap aws-auth 的叢集轉換為存取項目身分驗證,desiredState=ENABLED請在以叢集為目標的每個 AWS Batch 運算環境中設定 。若要轉返,請在每個轉換desiredState=DISABLED上設定 。

在您的叢集上 AWS Batch 建立的內容

AWS Batch 每個叢集建立一個符合上述條件的存取項目,然後將 AWSBatchClusterPolicy Amazon EKS 存取政策與該存取項目建立關聯。存取項目是每個叢集而非每個運算環境,因此以相同叢集為目標的所有 AWS Batch 運算環境都會共用。

注意

刪除運算環境不會移除存取項目,即使它是叢集上的最後一個 AWS Batch 運算環境。若要移除 AWS Batch受管存取項目,請在每個以叢集為目標的 AWS Batch 運算環境desiredState=DISABLED上呼叫 UpdateComputeEnvironment 與 ,然後再刪除它們。

存取項目本身不足以在叢集上執行任務。如需您必須自行設定的Kubernetes許可和節點存取權,請參閱 您仍然必須提供的叢集組態。

所需的許可

AWS Batch 會使用呼叫 CreateComputeEnvironment或 UpdateComputeEnvironment操作的 IAM 身分憑證來管理存取項目。必須允許該身分執行下列 Amazon EKS 動作:

  • eks:DescribeCluster

  • eks:DescribeAccessEntry

  • eks:CreateAccessEntry

  • eks:AssociateAccessPolicy

  • eks:DeleteAccessEntry

設定存取項目

您可以透過 CreateComputeEnvironment 或 UpdateComputeEnvironment API eksConfiguration.accessEntry的 欄位,在運算環境中設定存取項目。

AWS CLI

在建立運算環境時啟用受 AWS Batch管存取項目

$ aws batch create-compute-environment \ --compute-environment-name my-eks-ce \ --type MANAGED \ --eks-configuration 'eksClusterArn=arn:aws:eks:us-east-1:123456789012:cluster/my-cluster,kubernetesNamespace=my-aws-batch-namespace,accessEntry={desiredState=ENABLED}' \ --compute-resources 'type=EC2,maxvCpus=128,subnets=subnet-a123456b,securityGroupIds=sg-a12b3456,instanceRole=arn:aws:iam::123456789012:instance-profile/my-node-instance-profile'

在現有的運算環境中啟用受 AWS Batch管存取項目

$ aws batch update-compute-environment \ --compute-environment my-eks-ce \ --eks-configuration 'accessEntry={desiredState=ENABLED}'

檢查狀態

$ aws batch describe-compute-environments \ --compute-environments my-eks-ce \ --query "computeEnvironments[0].eksConfiguration.accessEntry"

回應包含desiredState您指定的 和觀察到的 status:

{ "desiredState": "ENABLED", "status": "ACTIVE" }
注意

AWS Batch 會accessEntry.status傳回所有 Amazon EKS 運算環境,且desiredState只有在您已設定時才傳回。您從未指定的運算環境會status單獨accessEntry傳回。

若要 AWS Batch 停止管理存取項目,請DISABLED改為將 desiredState設定為 。執行此作業之前,請檢閱 與叢集 的互動 authenticationMode:在身分驗證模式為 的叢集上DISABLED遭到拒絕API,而在身分驗證模式為存取項目API_AND_CONFIG_MAP的叢集上,只有在以叢集為目標的每個 AWS Batch 運算環境都設定為 後,才會移除存取項目DISABLED。

API

在 CreateComputeEnvironment 或 UpdateComputeEnvironment 請求中使用 eksConfiguration.accessEntry 物件。

使用 AWS Batch受管存取項目建立運算環境

包含在請求內文accessEntry中:

{ "computeEnvironmentName": "my-eks-ce", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster", "kubernetesNamespace": "my-aws-batch-namespace", "accessEntry": { "desiredState": "ENABLED" } }, "computeResources": { "type": "EC2", "maxvCpus": 128, "subnets": ["subnet-a123456b"], "securityGroupIds": ["sg-a12b3456"], "instanceRole": "arn:aws:iam::123456789012:instance-profile/my-node-instance-profile" } }

更新現有運算環境的存取項目

{ "computeEnvironment": "my-eks-ce", "eksConfiguration": { "accessEntry": { "desiredState": "ENABLED" } } }

如需詳細資訊,請參閱 AWS Batch API 參考中的 、EksAccessEntryCreateComputeEnvironment 和 UpdateComputeEnvironment。

您仍然必須提供的叢集組態

存取項目只會控制對叢集進行 AWS Batch 身分驗證的方式。它不會授予執行任務所需的 AWS Batch Kubernetes許可,也不會讓 AWS Batch 啟動 的執行個體加入叢集。無論您使用哪種身分驗證機制,您仍然必須設定下列兩項。

重要

為叢集 (accessEntry.status=ACTIVE) 上的 AWS Batch 服務連結角色建立 AWS Batch受管存取項目後,其優先順序會高於角色的 aws-auth ConfigMap 組態。 AWS Batch 服務連結角色的 ConfigMap 項目未使用,而是改用存取項目進行 AWS Batch 驗證。若要返回 ConfigMap 身分驗證,desiredState=DISABLED請在以叢集為目標的所有運算環境中設定 。這會移除受 AWS Batch管存取項目。

Kubernetes AWS Batch 命名空間的 許可

AWS Batch 需要Kubernetes許可,才能在您在 中指定的命名空間中建立和管理 PodeksConfiguration.kubernetesNamespace。建立 命名空間,然後根據您的身分驗證方法,使用下列其中一種方法設定這些許可:

  • 存取政策關聯 (存取項目 時為必要status=ACTIVE) — 當您desiredState=ENABLED在所有以叢集為目標的運算環境中設定 時, 會使用叢集層級 AWS Batch 建立存取項目AWSBatchClusterPolicy。然後,您必須將命名空間範圍建立關聯AWSBatchNamespacePolicy,以授予 AWS Batch 建立和管理 Pod 的許可。

    存取項目到達 後status=ACTIVE,請使用 建立命名空間政策的關聯 AWS CLI:

    $ aws eks associate-access-policy \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::123456789012:role/aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AWSBatchNamespacePolicy \ --access-scope type=namespace,namespaces=my-aws-batch-namespace

    將 my-aws-batch-namespace 取代為您在 中指定的值eksConfiguration.kubernetesNamespace。

    重要

    如果沒有命名空間範圍政策關聯,任務將保持停滯RUNNABLE狀態。叢集層級政策本身不會授予 Pod 管理許可。

  • Kubernetes 角色和角色繫結 (當存取項目 時status=INACTIVE) — 如果 AWS Batch受管存取項目未處於作用中狀態,請建立授予這些許可Kubernetes的角色和角色繫結,如中所述步驟 2:準備您的 Amazon EKS 叢集 AWS Batch。您可以為每個叢集執行此操作一次。

    注意

    當受 AWS Batch管存取項目處於作用中 (status=ACTIVE) 時,會略過 RBAC Kubernetes 角色。您必須改用存取政策關聯方法。

AWS Batch 不會為您建立這些資源,且 AWS Batch受管存取項目不會取代這些資源。如果遺失,當任務無法啟動VALID時,運算環境仍會變成 。

節點執行個體角色的叢集存取

AWS Batch 啟動的執行個體會使用您在 中指定的執行個體描述檔加入叢集computeResources.instanceRole。該角色需要自己的叢集存取權,而叢集與 AWS Batch受管存取項目分開, AWS Batch 且未設定。

組態方法取決於叢集的 authenticationMode:

  • 在 authenticationMode為 的叢集CONFIG_MAP上 — 您必須使用 aws-auth ConfigMap。這些叢集不支援存取項目。

  • 在 authenticationMode 為 的叢集API_AND_CONFIG_MAP上 — 節點執行個體角色可以使用 aws-auth ConfigMap 或存取項目進行身分驗證。如果執行個體角色已在 ConfigMap 中映射,節點將成功加入,而無需為角色建立存取項目。

  • 在 authenticationMode為 的叢集API上 — 您必須為節點執行個體角色建立存取項目。ConfigMap aws-auth 不會用於這些叢集上的身分驗證。

若要建立節點執行個體角色的存取項目,請使用 AWS CLI:

$ aws eks create-access-entry \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::123456789012:role/my-node-instance-role \ --type EC2_LINUX
$ aws eks associate-access-policy \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::123456789012:role/my-node-instance-role \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSWorkerNodePolicy \ --access-scope type=cluster

如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的建立存取項目。

重要

如果沒有節點執行個體角色的適當叢集存取,EC2 執行個體將無法加入叢集。任務將保持 RUNNABLE 狀態,因為沒有容量向叢集註冊。

在 aws-auth ConfigMap 和存取項目之間進行選擇

存取項目身分驗證是 Amazon EKS 運算環境 AWS Batch 上新 的建議路徑,並提供下列優點:

  • 無需手動編輯 aws-auth ConfigMap 即可授予對叢集的 AWS Batch 存取權。

  • 提供可存取叢集之主體的可稽核 API 驅動記錄。

  • 對於其 authenticationMode為 API且不支援 ConfigMap aws-auth 的叢集為必要。

如果您的叢集authenticationMode是 CONFIG_MAP,則無法使用存取項目,並透過 ConfigMap aws-auth 進行 AWS Batch 驗證。如需說明,請參閱確認 aws-auth ConfigMap 已正確設定。