本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
授予使用者對 的存取權 Kubernetes 使用外部 OIDC provider (提供者)
Amazon EKS 支援使用 OpenID Connect (OIDC) 身分提供者,作為向叢集驗證使用者的方法。OIDC 身分提供者可以與 Identity and Access Management (IAM) 搭配使用,或作為 AWS 替代。如需使用 IAM 的詳細資訊,請參閱 授予 IAM 使用者和角色對 Kubernetes APIs 的存取權。設定叢集的身分驗證後,您可以建立 Kubernetes roles
和 clusterroles
將許可指派給角色,然後使用 將角色繫結至身分 Kubernetes rolebindings
與 clusterrolebindings
。如需詳細資訊,請參閱中的使用 RBAC 授權
-
您可以建立關聯 OIDC 叢集的身分提供者。
-
Kubernetes 不提供 OIDC 身分提供者。您可以使用現有的公有 OIDC 身分提供者,或者您可以執行自己的身分提供者。如需認證提供商的清單,請參閱 OpenID 網站上的 OpenID 認證
。 -
的發行者 URL OIDC 身分提供者必須可公開存取,Amazon EKS 才能探索簽署金鑰。Amazon EKS 不支援 OIDC 具有自我簽署憑證的身分提供者。
-
您無法停用叢集的 IAM 身分驗證,因為將節點加入叢集時仍需要它。
-
Amazon EKS 叢集仍必須由 IAM 主體建立 AWS ,而不是 OIDC 身分提供者使用者。這是因為叢集建立者與 Amazon EKS 互動APIs,而不是 Kubernetes APIs.
-
OIDC 如果針對控制平面開啟 CloudWatch 日誌,身分提供者驗證的使用者會列在叢集的稽核日誌中。如需詳細資訊,請參閱啟用或停用控制平面日誌。
-
您無法使用 AWS Management Console 帳戶登入 OIDC 提供者。您只能使用 AWS Identity and Access Management 帳戶登入 AWS Management Console 來在 中檢視 Kubernetes 資源 AWS Management Console檢視主控台中的 Kubernetes 資源。
關聯 OIDC 身分提供者
在建立 關聯之前 OIDC 身分提供者與您的叢集,您需要提供者提供下列資訊:
- 發行者URL
-
OIDC 身分提供者URL的 Word,允許 API 伺服器探索用於驗證權杖的公有簽署金鑰。URL 必須以 開頭,
https://
且應與提供者的 OIDC ID 權杖中的iss
宣告對應。根據 OIDC 標準,允許路徑元件,但不允許查詢參數。通常 URL 僅包含主機名稱,例如https://server.example.org
或https://example.com
。此URL應指向以下層級,.well-known/openid-configuration
且必須透過網際網路公開存取。 - 用戶端 ID (也稱為受眾)
-
向 OIDC 身分提供者提出身分驗證請求的用戶端應用程式的 ID。
您可以使用 eksctl
或 AWS Management Console關聯身分提供者。
使用 eksctl 關聯身分提供者
-
建立名為 的檔案
associate-identity-provider.yaml
具有下列內容。取代example values
使用您自己的 。identityProviders
區段中的值可從您的 取得 OIDC 身分提供者。值僅對identityProviders
下的name
、type
、issuerUrl
和clientId
設定為必要項目。--- 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:
或 指定 或該字串的任何部分groupsPrefix
usernamePrefix
。 -
建立供應商。
eksctl associate identityprovider -f associate-identity-provider.yaml
-
使用
kubectl
搭配叢集和 OIDC 身分提供者,請參閱中的使用 kubectlKubernetes 文件中)。
使用 AWS 主控台關聯身分提供者
-
開啟 Amazon EKS 主控台
。 -
選取叢集,然後選取存取標籤。
-
在 中 OIDC 身分提供者區段,選取關聯身分提供者。
-
在關聯上 OIDC 身分提供者頁面,輸入或選取下列選項,然後選取關聯。
-
對於 Name (名稱),輸入提供商的唯一名稱。
-
對於發行者 URL,輸入提供者的 URL。此 URL 必須可透過網際網路存取。
-
針對用戶端 ID,輸入 OIDC 身分提供者的用戶端 ID (也稱為受眾)。
-
對於 Username claim (使用者名稱宣告),輸入要用作使用者名稱的宣告。
-
針對群組宣告,輸入要用作使用者群組的宣告。
-
(選用) 選取 Advanced options (進階選項),輸入或選取下列資訊。
-
Username prefix (使用者名稱字首):輸入要在使用者名稱宣告前面加上的字首。字首會加入使用者名稱宣告,以防止與現有名稱發生衝突。如果您未提供值,且使用者名稱是 以外的值
email
,則字首會預設為發行者 URL 的值。您可以使用值-
停用所有字首。請勿指定system:
或該字串的任何部分。 -
Groups prefix (群組字首):輸入要在群組宣告前面加上的字首。字首會加入群組宣告,以防止與現有名稱發生衝突 (例如
system: groups
)。例如,值oidc:
會建立群組名稱,例如oidc:engineering
和oidc:infra
。請勿指定system:
或該字串的任何部分。 -
Required claims (必要宣告):選取 Add claim (新增宣告),然後在用戶端 ID 字符中輸入一或多個描述必要宣告的鍵值對。這些對描述 ID 權杖中的必要宣告。如果設定,則會驗證每個宣告是否存在於具有相符值的 ID 字符中。
-
使用
kubectl
搭配叢集和 OIDC 身分提供者,請參閱中的使用 kubectlKubernetes 文件中)。
-
-
-
IAM 政策範例
如果您想要防止 OIDC 身分提供者從與叢集建立關聯,請建立下列 IAM 政策,並將其與 Amazon EKS 管理員的 IAM 帳戶建立關聯。如需詳細資訊,請參閱服務授權參考中的 IAMWord 使用者指南和動作中的建立 Word 政策和新增 Word 身分許可IAM。 IAM https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerserviceforkubernetes.html
{ "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 如果 clientID
是 kubernetes
且 issuerUrl
是 ,則表示身分提供者關聯 https://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 EKS 與提供相容支援之合作夥伴網路維持關係 OIDC 身分提供者。如需如何將身分提供者與 Amazon EKS 整合的詳細資訊,請參閱下列合作夥伴的文件。
合作夥伴 | 產品 | 文件 |
---|---|---|
PingIdentity |
Amazon EKS 旨在為您提供廣泛的選項,以涵蓋所有使用案例。如果您開發商業支援的 OIDC 此處未列出的相容身分提供者,請聯絡 aws-container-partners@amazon.com 的合作夥伴團隊