通过 OpenID Connect 身份提供商对集群的用户进行身份验证
Amazon EKS 支持使用 OpenID Connect(OIDC)身份提供者作为对您的集群的用户进行身份验证的方法。OIDC 身份提供者可与 AWS 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 身份提供者。
-
您不能在集群上禁用 IAM 身份验证,因为在将节点加入集群时仍需要使用。
-
Amazon EKS 集群仍必须由 AWS IAM 主体创建,而不是由 OIDC 身份提供者用户创建。这是因为集群创建者与 Amazon EKS API 进行交互,而不是与 Kubernetes API 进行交互。
-
如果为控制面板启用了 CloudWatch 日志,则将在集群的审核日志中列出经 OIDC 身份提供者验证的用户。有关更多信息,请参阅启用和禁用控制层面日志。
-
您无法使用来自 OIDC 提供者的账户登录 AWS Management Console。您只能通过使用 AWS Identity and Access Management 账户登录 AWS 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
或 AWS Management Console 关联身份提供商。
取消 OIDC 身份提供者与集群的关联
如果您取消 OIDC 身份提供者与集群的关联,则提供者中包含的用户将无法再访问该集群。但是,您仍然可以使用 IAM 主体访问该集群。
使用 AWS Management Console 取消 OIDC 身份提供者与集群的关联
-
从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters
。 -
在 OIDC 身份提供者部分中,选择取消关联,输入身份提供者名称,然后选择
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:
us-west-2
.amazonaws.com:
111122223333
:cluster/*" }, { "Sid": "eksAdmin", "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" } ] }
如果 clientID
为 kubernetes
而 issuerUrl
为 https://cognito-idp.us-west-2amazonaws.com/*
,则以下示例策略允许进行 OIDC 身份提供者关联。
{ "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