根據標籤授予 Pod 對 AWS 資源的存取權 - Amazon EKS

協助改進此頁面

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

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

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

根據標籤授予 Pod 對 AWS 資源的存取權

屬性型存取控制 (ABAC) 透過結合屬性的政策,來向使用者授予權限。EKS Pod 身分識別會將標籤連接至具有叢集名稱、命名空間與服務帳戶名稱等屬性的每個 Pod 的臨時憑證。這些角色工作階段標籤可讓管理員撰寫單一角色,以根據相符的標籤存取 AWS 資源,跨服務帳戶運作。透過新增對角色工作階段標籤的支援,您可以在叢集之間和叢集內的工作負載之間強制執行更嚴格的安全界限,同時重複使用相同的 IAM 角色和 IAM 政策。

使用標籤的範例政策

下面是一個 IAM 政策範例,該政策在對應物件以 EKS 叢集名稱標記時授予 s3:GetObject 許可。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/eks-cluster-name": "${aws:PrincipalTag/eks-cluster-name}" } } } ] }

啟用或停用工作階段標籤

EKS Pod 身分識別會在擔任角色時,新增一組預先定義的工作階段標籤。這些工作階段標籤可讓管理員撰寫單一角色,允許根據相符標籤存取 AWS 資源,以跨資源運作。

啟用工作階段標籤

工作階段標籤可透過 EKS Pod 身分識別自動啟用,您無須執行任何操作。EKS Pod 身分識別預設會將預先定義的標籤集連接至工作階段。如需在政策中參考這些標籤,可在標籤索引鍵後使用語法 ${aws:PrincipalTag/。例如 ${aws:PrincipalTag/kubernetes-namespace}

  • eks-cluster-arn

  • eks-cluster-name

  • kubernetes-namespace

  • kubernetes-service-account

  • kubernetes-pod-name

  • kubernetes-pod-uid

停用工作階段標籤

AWS 會將內嵌工作階段政策、受管政策 ARNs 和工作階段標籤壓縮為具有個別限制的封裝二進位格式。如果您收到 PackedPolicyTooLarge 錯誤,指出封裝二進位格式超過大小限制,您可嘗試停用 EKS Pod 身分識別新增的工作階段標籤來縮減該大小。如需停用這些工作階段標籤,遵循以下步驟操作:

  1. 開啟 Amazon EKS 主控台

  2. 在左側導覽窗格中,選取叢集,然後選取您想要修改的叢集名稱。

  3. 選擇存取索引標籤。

  4. Pod 身分識別關聯中,選擇您想要在關聯 ID 中修改的關聯 ID,然後選擇編輯

  5. 工作階段標籤項下,選擇停用工作階段標籤

  6. 選擇儲存變更

跨帳戶標籤

EKS Pod 身分識別新增的所有工作階段標籤都可轉移;標籤金鑰和值會傳遞至工作負載用於將角色切換至其他帳戶的任何 AssumeRole 動作。您可以在其他帳戶的政策中使用這些標籤,以限制跨帳戶情況中的存取。如需詳細資訊,請參閱《IAM 使用者指南》中的使用工作階段標籤鏈結角色

自訂標籤

EKS Pod 身分識別無法將其他自訂標籤新增至其執行的 AssumeRole 動作。不過,您套用至 IAM 角色的標籤永遠都可以使用,但格式相同:${aws:PrincipalTag/ 後面是金鑰,例如 ${aws:PrincipalTag/MyCustomTag}

注意

在發生衝突的情況下,透過 sts:AssumeRole 請求新增至工作階段的標籤具有優先順序。舉例來說,假設:

  • EKS 擔任客戶角色時,Amazon EKS 將鍵 eks-cluster-name 和值 my-cluster 新增至工作階段,並且

  • 您將 eks-cluster-name 標籤新增至具有值 my-own-cluster 的 IAM 角色。

在這種情況下,前者優先,eks-cluster-name 標籤的值會是 my-cluster