通过 OpenID Connect 身份提供商对集群的用户进行身份验证
Amazon EKS 支持使用 OpenID Connect (OIDC) 身份提供商作为对您的集群的用户进行身份验证的方法。OIDC 身份提供商可与 Amazon Identity and Access Management (IAM) 一起使用或作为其替代方法。有关使用 IAM 的更多信息,请参阅让 IAM 主体访问您的集群。配置集群身份验证后,您可以创建 Kubernetes roles 和 clusterroles 以将权限分配给角色,然后使用 Kubernetes rolebindings 和 clusterrolebindings 将角色绑定到身份。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权
注意事项
-
您可以将一个 OIDC 身份提供商与您的集群关联。
-
Kubernetes 没有提供 OIDC 身份提供商。您可以使用现有的公共 OIDC 身份提供商,也可以运行您自己的身份提供商。有关经认证提供商的列表,请参阅 OpenID 网站上的 OpenID 认证
。 -
OIDC 身份提供商的发布者 URL 必须可公开访问,以便 Amazon EKS 能够发现签名密钥。Amazon EKS 不支持拥有自签名证书的 OIDC 身份提供商。
-
您不能在集群上禁用 Amazon IAM 身份验证器,因为在将节点加入集群时仍需要使用它。有关更多信息,请参阅 GitHub 上的适用于 Kubernetes 的 Amazon IAM 身份验证器
。 -
Amazon EKS 集群仍必须由 Amazon IAM 主体创建,而不是由 OIDC 身份提供商用户创建。这是因为集群创建者与 Amazon EKS API 进行交互,而不是与 Kubernetes API 进行交互。
-
如果为控制层面启用了 CloudWatch Logs,则将在集群的审核日志中列出经 OIDC 身份提供商验证的用户。有关更多信息,请参阅启用和禁用控制层面日志。
-
您无法使用来自 OIDC 提供商的账户登录 Amazon Web Services Management Console。您只能通过使用 Amazon Identity and Access Management 账户登录 Amazon Web Services Management Console,从而在控制台中查看 Kubernetes 资源。
关联 OIDC 身份提供商
您需要提供商提供以下信息,然后才能将 OIDC 身份提供商与集群关联:
-
发布者 URL – OIDC 身份提供商的 URL,该 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 或 Amazon Web Services Management Console 关联身份提供商。
解除 OIDC 身份提供商与集群的关联
如果您解除 OIDC 身份提供商与集群的关联,则提供商中包含的用户将无法再访问该集群。但是,您仍然可以使用 IAM 主体访问该集群。
使用 Amazon Web Services Management Console 解除 OIDC 身份提供商与集群的关联
-
从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters
。 -
在 OIDC Identity Providers(OIDC 身份提供商)部分中,选择 Disassociate(解除关联),输入身份提供商名称,然后选择
Disassociate。
示例 IAM policy
如果要阻止 OIDC 身份提供商与集群关联,请创建以下 IAM policy 并将其与 Amazon EKS 管理员的 IAM 账户关联。有关更多信息,请参阅 IAM 用户指南中的创建 IAM policy 和添加 IAM 身份权限,以及服务授权参考中的 Amazon Elastic Kubernetes Service 的操作、资源和条件键。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "denyOIDC", "Effect": "Deny", "Action": [ "eks:AssociateIdentityProviderConfig" ], "Resource": "arn:aws:eks:cn-north-1.amazonaws.com.cn:111122223333:cluster/*" }, { "Sid": "eksAdmin", "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" } ] }
如果 clientID 为 kubernetes 而 issuerUrl 为 https://cognito-idp.cn-north-1amazonaws.com.cn/*,则以下示例策略允许进行 OIDC 身份提供商关联。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCognitoOnly", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:cn-north-1:111122223333:cluster/my-instance", "Condition": { "StringNotLikeIfExists": { "eks:issuerUrl": "https://cognito-idp.cn-north-1.amazonaws.com.cn/*" } } }, { "Sid": "DenyOtherClients", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:cn-north-1: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