LDAPS를 통해 인증하도록 Red Hat Ansible Tower를 구성하려고 합니다. LDAPS 설정을 구성하는 웹 GUI가 있지만 이를 테스트하는 유일한 방법은 ldapsearch
CLI 유틸리티를 통하는 것입니다. 이 프로젝트를 시작하기 전에는 LDAPS를 사용해 본 적이 없었습니다.
나생각하다 ldapsearch -x -H ldaps://myldapserver:ldapport -D "CN=ansible,OU=blah,DC=blah" -b "OU=ansiblegroup,DC=blah" -w passwd
다음을 반환합니다.
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntires: 2
솔직히 말해서 이 결과가 무엇을 의미하는지 잘 모르겠지만, 그렇게 말해주기 때문에 효과가 있다고 생각합니다 Success
. "LDAP 서버 URI", "LDAP 바인딩 DN" 및 "LDAP 그룹 유형 매개변수"를 -H
타워 로 "LDAP 그룹 유형 매개변수"로 설정하려고 시도했지만 성공하지 못했습니다.-D
-b
accessgroup
ansiblegroup
실제 사용자(예: user1
및 )를 포함하는 추가 OU 호출이 있지만 user2
이를 이렇게 변경하면 -b "OU=accessgroup,OU=ansiblegroup,DC=blah
다음과 같은 결과를 얻습니다.
search: 2
result: 32 No such object
matchedDN: OU=ansiblegroup,DC=blah"
그럼 어디로 가야하나요? 1,000페이지 분량의 LDAP 매뉴얼 외에 유용할 만한 것이 있나요?
답변1
다음 구성을 가정합니다.
TOWER_URL="tower.example.com";
curl --silent --user "${ACCOUNT}:${PASSWORD}" --location "https://${TOWER_URL}/api/v2/settings/ldap" | jq '.'
출력을 발생시키는 것은
{
"AUTH_LDAP_SERVER_URI": "ldaps://ad.example.com:636",
"AUTH_LDAP_BIND_DN": "CN=tower_ldap,OU=service_accounts,OU=accounts,DC=example,DC=com",
"AUTH_LDAP_BIND_PASSWORD": "$encrypted$",
"AUTH_LDAP_START_TLS": false,
"AUTH_LDAP_CONNECTION_OPTIONS": {
"OPT_REFERRALS": 0,
"OPT_NETWORK_TIMEOUT": 30
},
"AUTH_LDAP_USER_SEARCH": [
"DC=example,DC=com",
"SCOPE_SUBTREE",
"(sAMAccountName=%(user)s)"
],
"AUTH_LDAP_USER_DN_TEMPLATE": null,
"AUTH_LDAP_USER_ATTR_MAP": {
"first_name": "givenName",
"last_name": "sn",
"email": "userPrincipalName"
},
"AUTH_LDAP_GROUP_SEARCH": [
"OU=groups,DC=example,DC=com",
"SCOPE_SUBTREE",
"(objectClass=group)"
],
"AUTH_LDAP_GROUP_TYPE": "NestedActiveDirectoryGroupType",
"AUTH_LDAP_GROUP_TYPE_PARAMS": {},
"AUTH_LDAP_REQUIRE_GROUP": "CN=tower_user,OU=resource_groups,OU=groups,DC=example,DC=com",
"AUTH_LDAP_DENY_GROUP": null,
"AUTH_LDAP_USER_FLAGS_BY_GROUP": {},
"AUTH_LDAP_ORGANIZATION_MAP": {},
"AUTH_LDAP_TEAM_MAP": {},
"AUTH_LDAP_1_SERVER_URI": "",
"AUTH_LDAP_1_BIND_DN": "",
"AUTH_LDAP_1_BIND_PASSWORD": "",
"AUTH_LDAP_1_START_TLS": true,
"AUTH_LDAP_1_CONNECTION_OPTIONS": {
"OPT_REFERRALS": 0,
"OPT_NETWORK_TIMEOUT": 30
},
...
name
다음과 같이 디렉터리를 쿼리할 수 있습니다.
ldapsearch -h ad.example.com -p 389 \
-D "tower_ldap" -x -w "${LDAP_PASSWORD}" \
-b "DC=example,DC=com" \
-s sub "(& (memberOf:1.2.840.113556.1.4.1941:=CN=tower_user,OU=resource_groups,OU=groups,DC=example,DC=com) )" name \
| grep "name:" | cut -d " " -f 2-
cn
로그인 또는 추가 검색이 허용된 사용자의 사용자 이름만 가져오기
... cn | grep "cn:" | cut -d " " -f 2-
... cn | grep "cn:" | cut -d " " -f 2- | wc -l
참고하세요
"AUTH_LDAP_REQUIRE_GROUP": "CN=tower_user,OU=resource_groups,OU=groups,DC=example,DC=com"
역할 그룹을 구성원으로만 포함합니다.
CN=tower_user_role,OU=role_groups,OU=groups,DC=example,DC=com
그래서 쿼리NestedActiveDirectoryGroupType
.
추가 질문과 답변
- LDAP 중첩 그룹 멤버십
1.2.840.113556.1.4.1941
순환 종속성의 경우 구현을 사용해도 안전합니까?- 역할 기반 액세스 제어(RBAC)를 설계하는 방법은 무엇입니까?
추가 문서