通过 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