授予使用者使用外部OIDC提供者Kubernetes的存取權 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。

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

授予使用者使用外部OIDC提供者Kubernetes的存取權

Amazon EKS 支援使用 OpenID Connect (OIDC) 身分識別提供者做為叢集使用者驗證的方法。 OIDC身分識別提供者可以與 () 搭配使用,也可以作為 AWS Identity and Access Management (IAM) 的替代方案。如需使用的更多資訊IAM,請參閱授與IAM使用者和角色對 Kubernetes 的存取權 APIs。設定叢集身分驗證後,您可以建立 Kubernetes rolesclusterroles 指派許可給角色,然後使用 Kubernetes rolebindingsclusterrolebindings 將角色繫結至身分。如需詳細資訊,請參閱Kubernetes文件中的使用RBAC授權

考量事項
  • 您可以將一個 OIDC 身分提供者與叢集建立關聯。

  • Kubernetes 不提供 OIDC 身分提供者。您可以使用現有的公有 OIDC 身分提供者,也可以執行您自己的身分提供者。如需認證提供商的清單,請參閱 OpenID 網站上的 OpenID 認證

  • OIDC身分提供者URL的發行者必須可公開存取,以便 Amazon EKS 能夠探索簽署金鑰。Amazon EKS 不支援使用自我簽署憑證的OIDC身分識別提供者。

  • 您無法停用叢集的IAM驗證,因為在將節點加入叢集時仍然需要驗證。

  • Amazon EKS 叢集仍必須由 AWS IAM主體建立,而不是OIDC身分識別提供者使用者。這是因為叢集建立者會與 Amazon 互動 EKSAPIs,而不是. Kubernetes APIs

  • OIDC如果開啟控制平面的記錄,則會在叢集的稽核 CloudWatch 記錄檔中列出身分識別提供者驗證的使用者。如需詳細資訊,請參閱啟用或停用控制平面日誌

  • 您無法使用供應OIDC商 AWS Management Console 的帳戶登入。您只能透過 AWS Management Console 使用 AWS Identity and Access Management 帳戶登入來檢視主控台中的Kubernetes資源

關聯 OIDC 身分提供者

在可以將 OIDC 身分提供者與叢集建立關聯之前,您需要提供商的下列資訊:

發行人 URL

允許API服務器發現用於驗證令牌URL的公共簽名密鑰的OIDC身份提供者。URL必須以https://並且應該與提供程序 OIDC ID 令牌中的iss聲明相對應。根據標OIDC準,允許路徑組件,但查詢參數不允許。通常只URL包含主機名稱,例如https://server.example.orghttps://example.com。這URL應該指向以下級別,.well-known/openid-configuration並且必須可以通過互聯網公開訪問。

用戶端 ID (也稱為對象)

向身分識別提供者發出驗證要求的用戶端應用程式OIDC識別碼。

您可以使用 eksctl 或 AWS Management Console關聯身分提供者。

eksctl
使用 eksctl 將 OIDC 身分提供者與您的叢集關聯
  1. 創建一個名為的文件 associate-identity-provider. 山羊 具有以下內容。更換 範例值 用你自己的。identityProviders 區段中的值是從您的 OIDC 身分提供者取得的。值僅對 identityProviders 下的 nametypeissuerUrlclientId 設定為必要項目。

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: your-region-code identityProviders: - name: my-provider type: oidc issuerUrl: https://example.com clientId: kubernetes usernameClaim: email usernamePrefix: my-username-prefix groupsClaim: my-claim groupsPrefix: my-groups-prefix requiredClaims: string: string tags: env: dev
    重要

    請勿指定 system:,或該字串的任何部分,對於 groupsPrefixusernamePrefix

  2. 建立供應商。

    eksctl associate identityprovider -f associate-identity-provider.yaml
  3. 若要讓 kubectl 與叢集和 OIDC 身分提供者搭配使用,請參閱 Kubernetes 文件中的 Using kubectl 一節。

AWS Management Console
使用將OIDC身分識別提供者與叢集建立關聯 AWS Management Console
  1. https://console.aws.amazon.com/eks/家裡 #/集群打開 Amazon EKS 控制台。

  2. 選取您的叢集,然後選取 [存取] 索引標籤。

  3. 在身分OIDC識別提供者區段中,選取關聯身分識別提供者

  4. 關聯 OIDC 身分提供者頁面上,輸入或選取下列選項,然後選取關聯

    • 對於 Name (名稱),輸入提供商的唯一名稱。

    • 對於「發行者」URL,請輸入您URL的提供者的。這URL必須可以通過互聯網訪問。

    • 對於用戶端 ID,輸入 OIDC 身分提供者的用戶端 ID (也稱為受眾)。

    • 對於 Username claim (使用者名稱宣告),輸入要用作使用者名稱的宣告。

    • 對於 Groups claim (群組宣告),輸入要作為使用者群組使用的宣告。

    • (選用) 選取 Advanced options (進階選項),輸入或選取下列資訊。

      • Username prefix (使用者名稱字首):輸入要在使用者名稱宣告前面加上的字首。字首會加入使用者名稱宣告,以防止與現有名稱發生衝突。如果您未提供值,且使用者名稱為以外的值email,則前置詞會預設為「簽者」的值URL。您可以使用值 - 停用所有字首。請勿指定 system: 或該字串的任何部分。

      • Groups prefix (群組字首):輸入要在群組宣告前面加上的字首。字首會加入群組宣告,以防止與現有名稱發生衝突 (例如 system: groups)。例如,值 oidc: 會建立群組名稱,例如 oidc:engineeringoidc:infra。請勿指定 system: 或該字串的任何部分。

      • Required claims (必要宣告):選取 Add claim (新增宣告),然後在用戶端 ID 字符中輸入一或多個描述必要宣告的鍵值對。這些對描述了 ID 令牌中所需的聲明。如果設定,則會驗證每個宣告是否存在於具有相符值的 ID 字符中。

  5. 若要讓 kubectl 與叢集和 OIDC 身分提供者搭配使用,請參閱 Kubernetes 文件中的 Using kubectl 一節。

範例IAM政策

如果要防止OIDC身分識別提供者與叢集建立關聯,請建立以下IAM政策,並將其與 Amazon EKS 管理員的IAM帳戶建立關聯。如需詳細資訊,請參閱IAM使用指南中的建立IAM政策新增IAM身分許可和服務授權參考中的 Amazon Elastic Kubernetes Service 的動作、資源和條件金鑰

{ "Version": "2012-10-17", "Statement": [ { "Sid": "denyOIDC", "Effect": "Deny", "Action": [ "eks:AssociateIdentityProviderConfig" ], "Resource": "arn:aws:eks:us-west-2.amazonaws.com:111122223333:cluster/*" }, { "Sid": "eksAdmin", "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" } ] }

下列範例政策允許 OIDC 身分提供者關聯,如果 clientIDkubernetes 以及 issuerUrlhttps://cognito-idp.us-west-2amazonaws.com/*

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCognitoOnly", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotLikeIfExists": { "eks:issuerUrl": "https://cognito-idp.us-west-2.amazonaws.com/*" } } }, { "Sid": "DenyOtherClients", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotEquals": { "eks:clientId": "kubernetes" } } }, { "Sid": "AllowOthers", "Effect": "Allow", "Action": "eks:*", "Resource": "*" } ] }

合作夥伴驗證的 OIDC 身分提供者

Amazon 與為相容OIDC身分供應商提供支援的合作夥伴網路EKS保持關係。如需如何將身分供應商與 Amazon EKS 整合的詳細資訊,請參閱下列合作夥伴的文件。

合作夥伴 產品 文件

PingIdentity

PingOne 適用於企業

安裝說明

Amazon EKS 旨在為您提供廣泛的選擇來涵蓋所有使用案例。如果您開發的商業支援OIDC相容身分提供者並未列於此處,請透aws-container-partners過 @amazon .com 聯絡我們的合作夥伴團隊以取得更多資訊。