本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从 OpenID Connect 身份提供商对集群的用户进行身份验证
Amazon EKS 支持使用 OpenID Connect (OIDC) 身份提供商作为方法,对集群中的用户进行身份验证。OIDC 身份提供商可以与 () 结合使用或作为
AWS Identity and Access Management () IAM的替代方案。有关使用 IAM 的更多信息,请参阅。管理集群的用户或 IAM 角色为集群配置身份验证后,您可以创建 Kubernetes roles
和 clusterroles
以向角色分配权限,然后使用 Kubernetes rolebindings
和 将角色绑定到身份clusterrolebindings
。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权
Considerations
-
您的集群必须运行 Kubernetes 1.16 或更高版本。
-
您可以将一个 OIDC 身份提供商与您的集群关联。
-
Kubernetes 不提供 OIDC 身份提供商。您可以使用现有的公共 OIDC 身份提供商,也可以运行自己的身份提供商。有关认证提供商的列表,请参阅 OpenID 网站上的 OpenID 认证
。 -
OIDC 身份提供商的发布者 URL 必须可公开访问,以便 Amazon EKS 可以发现签名密钥。 Amazon EKS 不支持具有自签名证书的 OIDC 身份提供商。
-
您无法在集群上禁用 AWS IAM 身份验证器,因为在集群中联接节点时仍需要使用该身份验证器。有关更多信息,请参阅 GitHub 上的适用于 Kubernetes 的 AWSIAM
身份验证器。 -
Amazon EKS 集群仍必须由 AWS IAM 用户而非 OIDC 身份提供商用户创建。这是因为集群创建者与 Amazon EKS APIs 而不是 Kubernetes APIs 进行交互。
-
如果为 控制层面打开CloudWatch日志,则 OIDC 身份提供商验证身份用户将列在集群的审核日志中。有关更多信息,请参阅启用和禁用控制层面日志。
-
您不能使用 AWS 管理控制台 OIDC 提供商的账户登录 。您只能使用 View 节点 账户登录 并在 控制台Workloads中执行 AWS 管理控制台 和 AWS Identity and Access Management 操作。
关联 OIDC 身份提供商
您需要先从提供商获取以下信息,然后才能将 OIDC 身份提供商与您的集群关联:
-
发布者 URL – OIDC 身份提供商的 URL,该提供商允许 API 服务器发现用于验证令牌的公有签名密钥。该 URL 必须以 开头
https://
,并且应对应于提供商的 OIDC ID 令牌中的iss
声明。根据 OIDC 标准,路径组件是允许的,但查询参数是不允许的。通常,URL 只包含主机名,如https://server.example.org
或https://example.com
。此 URL 应指向下面的关卡.well-known/openid-configuration
,并且必须通过 Internet 公开访问。 -
客户端 ID(也称为受众) – 向 OIDC 身份提供商发出身份验证请求的客户端应用程序的 ID。
您可以使用 eksctl
或 关联身份提供商AWS 管理控制台。
取消 OIDC 身份提供商与您的集群的关联
如果您取消 OIDC 身份提供商与集群的关联,则提供商中包含的用户将无法再访问集群。但是,您仍然可以使用 AWS IAM 用户访问集群。
使用 取消 OIDC 身份提供商与您的集群的关联 AWS 管理控制台
-
Open the Amazon EKS console at https://console.amazonaws.cn/eks/home#/clusters
. -
在 OIDC Identity Providers (OIDC 身份提供商) 部分中,选择 Disassociate (取消关联),输入身份提供商名称,然后选择
Disassociate
。
示例IAM策略
如果您要阻止 OIDC 身份提供商与集群关联,请创建以下IAM策略并将其与您的 IAM 管理员的 Amazon EKS 账户关联。有关更多信息,请参阅创建 IAM 策略和在 中添加 IAM 身份权限IAM 用户指南和在 Amazon Elastic Kubernetes Service 中为 的操作、资源和条件键Service Authorization Reference。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "denyOIDC", "Effect": "Deny", "Action": [ "eks:AssociateIdentityProviderConfig" ], "Resource": "arn:aws:eks:
us-west-2
:111122223333
:cluster/*" }, { "Sid": "eksAdmin", "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" } ] }
以下示例策略允许 OIDC 身份提供商关联(如果 clientID
为 kubernetes
且 issuerUrl
为 https://cognito-idp.us-west-2.amazonaws.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": "*" } ] }