ldap://host:port/basedn?attribute?scope?filter
配置ldap
身份提供程序以使用简单绑定身份验证,根据 LDAPv3 服务器验证用户名和密码。
默认情况下,集群中只存在kubeadmin
用户。要指定身份提供程序,必须创建一个自定义资源 (CR),该资源描述该身份提供程序并将其添加到集群。
OpenShift Container Platform 不支持包含 |
在身份验证过程中,将搜索 LDAP 目录以查找与提供的用户名匹配的条目。如果找到单个唯一匹配项,则将使用条目的可分辨名称 (DN) 加上提供的密码尝试简单绑定。
以下是采取的步骤
通过将配置的url
中的属性和过滤器与用户提供的用户名组合来生成搜索过滤器。
使用生成的过滤器搜索目录。如果搜索未返回完全一个条目,则拒绝访问。
尝试使用从搜索中检索到的条目的 DN 和用户提供的密码绑定到 LDAP 服务器。
如果绑定不成功,则拒绝访问。
如果绑定成功,则使用配置的属性构建身份,作为身份、电子邮件地址、显示名称和首选用户名。
配置的url
是 RFC 2255 URL,它指定要使用的 LDAP 主机和搜索参数。URL 的语法为
ldap://host:port/basedn?attribute?scope?filter
对于此 URL
URL 组件 | 描述 |
---|---|
|
对于常规 LDAP,使用字符串 |
|
LDAP 服务器的名称和端口。对于 ldap,默认为 |
|
所有搜索都应从中开始的目录分支的 DN。至少,这必须是目录树的顶部,但它也可以指定目录中的子树。 |
|
要搜索的属性。尽管 RFC 2255 允许使用逗号分隔的属性列表,但无论提供多少属性,都将只使用第一个属性。如果未提供属性,则默认为使用 |
|
搜索的范围。可以是 |
|
有效的 LDAP 搜索过滤器。如果未提供,则默认为 |
搜索时,属性、过滤器和提供的用户名会组合起来创建一个类似于以下形式的搜索过滤器:
(&(<filter>)(<attribute>=<username>))
例如,考虑以下URL:
ldap://ldap.example.com/o=Acme?cn?sub?(enabled=true)
当客户端尝试使用用户名bob
连接时,生成的搜索过滤器将为(&(enabled=true)(cn=bob))
。
如果LDAP目录需要身份验证才能进行搜索,请指定用于执行条目搜索的bindDN
和bindPassword
。
要使用身份提供程序,必须定义一个包含bindPassword
字段的OpenShift Container Platform Secret
对象。
创建一个包含bindPassword
字段的Secret
对象。
$ oc create secret generic ldap-secret --from-literal=bindPassword=<secret> -n openshift-config (1)
1 | 包含--from-literal 参数的bindPassword的密钥必须命名为bindPassword 。 |
或者,您可以应用以下YAML来创建密钥:
|
身份提供程序使用openshift-config
命名空间中的OpenShift Container Platform ConfigMap
对象来包含证书颁发机构捆绑包。这些主要用于包含身份提供程序所需的证书捆绑包。
使用以下命令定义一个包含证书颁发机构的OpenShift Container Platform ConfigMap
对象。证书颁发机构必须存储在ConfigMap
对象的ca.crt
密钥中。
$ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
或者,您可以应用以下YAML来创建ConfigMap:
|
以下自定义资源 (CR) 显示了LDAP身份提供程序的参数和可接受的值。
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: ldapidp (1)
mappingMethod: claim (2)
type: LDAP
ldap:
attributes:
id: (3)
- dn
email: (4)
- mail
name: (5)
- cn
preferredUsername: (6)
- uid
bindDN: "" (7)
bindPassword: (8)
name: ldap-secret
ca: (9)
name: ca-config-map
insecure: false (10)
url: "ldaps://ldaps.example.com/ou=users,dc=acme,dc=com?uid" (11)
1 | 此提供程序名称作为前缀添加到返回的用户ID,以形成身份名称。 |
2 | 控制如何在此提供程序的身份和User 对象之间建立映射。 |
3 | 用作身份的属性列表。使用第一个非空属性。至少需要一个属性。如果列出的属性均无值,则身份验证失败。定义的属性将作为原始数据检索,允许使用二进制值。 |
4 | 用作电子邮件地址的属性列表。使用第一个非空属性。 |
5 | 用作显示名称的属性列表。使用第一个非空属性。 |
6 | 为该身份预配用户时用作首选用户名的属性列表。使用第一个非空属性。 |
7 | 在搜索阶段用于绑定的可选DN。如果定义了bindPassword ,则必须设置。 |
8 | 包含bind密码的OpenShift Container Platform Secret 对象的可选引用。如果定义了bindDN ,则必须设置。 |
9 | 可选:包含PEM编码的证书颁发机构捆绑包的OpenShift Container Platform ConfigMap 对象的引用,用于验证为配置的URL验证服务器证书。仅在insecure 为false 时使用。 |
10 | 当为true 时,不会与服务器建立TLS连接。当为false 时,ldaps:// URL使用TLS连接,ldap:// URL升级到TLS。当使用ldaps:// URL时,必须将其设置为false ,因为这些URL始终尝试使用TLS连接。 |
11 | 一个RFC 2255 URL,它指定要使用的LDAP主机和搜索参数。 |
要将用户列入LDAP集成的白名单,请使用 |
有关所有身份提供程序共有的参数(例如mappingMethod
)的信息,请参阅身份提供程序参数。
安装集群后,向其中添加身份提供程序,以便用户可以进行身份验证。
创建一个OpenShift Container Platform集群。
为您的身份提供程序创建自定义资源 (CR)。
您必须以管理员身份登录。
应用已定义的CR。
$ oc apply -f </path/to/CR>
如果CR不存在, |
以身份提供程序中的用户身份登录集群,并在提示时输入密码。
$ oc login -u <username>
确认用户已成功登录,并显示用户名。
$ oc whoami