LDAP 정책

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

내용

LDAP 정책은 다음을 제공합니다.

  • 인증: 요청에 제공된 사용자 인증 정보를 LDAP 제공업체의 사용자 인증 정보와 비교하여 검증합니다. LDAP 정책은 인증에 대한 유연성을 제공하므로 원하는 DN 값이 요청에 없는 경우에도 비밀번호와 함께 모든 DN 값을 사용할 수 있습니다. 예를 들어 인증에 이메일 / 비밀번호를 사용해야 한다고 가정해 보겠습니다. 가능한 옵션은 다음과 같습니다.
    • 이메일이 요청에 있는 경우 LDAP 인증을 위한 비밀번호와 함께 사용하면 됩니다.
    • 이메일이 요청에 없고 다른 DN 속성 (예: 전화번호)이 있다면 전화번호를 사용하여 LDAP에서 해당 이메일을 가져온 다음 이메일/비밀번호를 사용하여 인증할 수 있습니다.
  • 고유 이름(DN) 검색: 인증 외에도 LDAP 정책을 사용하여 요청의 사용자 속성(예: 이메일)을 식별하고 해당 사용자에 대해 LDAP에서 다른 DN 속성을 검색하는 쿼리를 수행할 수 있습니다. 검색된 DN은 변수에 저장됩니다.

보호되는 리소스에 대한 액세스를 LDAP 제공업체의 사용자(예: 관리자, 조직 사용자, 개발자)로 제한해야 하는 경우 특히 OAuth 토큰 액세스가 불필요하거나 너무 무거운 경우에 LDAP 정책을 사용하세요. 또한 이 정책은 API 프록시 흐름에서 사용할 도메인 이름 메타데이터를 검색하도록 설계되었습니다.

예를 들어 사용자가 LDAP에 대해 성공적으로 인증된 경우에만 API 호출을 실행하고, 인증이 성공한 후에 사용자의 DN (도메인 이름) 속성을 선택적으로 검색할 수 있습니다.

자세한 내용은 다음을 참조하세요.

샘플

사용자 이름/비밀번호 인증

<Ldap name="4GLdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <UserName ref="request.header.username"/>
       <Password ref="request.header.password"/>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

이 샘플은 LDAP 제공업체에 대한 인증을 제공합니다. 정책은 인증을 위해 요청의 사용자 이름 및 비밀번호를 LDAP로 전달합니다.

DN 속성 인증

<Ldap name="LdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <Password ref="request.header.password"/>
       <SearchQuery>mail={request.header.mail}</SearchQuery>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

이 정책은 요청 헤더에 이메일이 포함된 사용자의 DN을 가져온 다음 요청 헤더에 제공된 비밀번호로 LDAP에 대해 사용자를 인증합니다.

LDAP 검색

<Ldap name="LdapPolicy">
    <!-- using a custom LDAP provider -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
    <LdapResource>MyLdap</LdapResource>
    <Search>
        <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
        <SearchQuery>mail={request.header.mail}</SearchQuery>
        <Attributes>
            <Attribute>address</Attribute>
            <Attribute>phone</Attribute>
            <Attribute>title</Attribute>
        </Attributes>
        <Scope></Scope> <!-- default is ‘subtree’ -->
    </Search>
</Ldap>

이 정책은 맞춤 LDAP 제공업체를 참조합니다. 요청 헤더의 이메일 주소를 사용하여 사용자를 식별한 다음 LDAP에서 사용자의 주소, 전화번호, 직책을 검색합니다. 가져온 DN 속성은 변수에 저장됩니다. '정책별 변수'를 참고하세요.

LDAP를 검색하고 DN 속성을 검색하려면 요청에 관리자 사용자 인증 정보가 포함되어야 합니다.

요소 참조

다음은 LDAP 정책 요소 및 속성에 대한 설명입니다.

요소

설명

Ldap

정책 이름을 입력할 수 있는 이름 속성이 있는 상위 요소입니다.

LdapConnectorClass

커스텀 LDAP 제공업체 (Apigee에서 제공하지 않음)를 통해 LDAP 정책을 사용하는 경우 정규화된 LDAP 커넥터 클래스를 지정합니다. Apigee의 ExternalLdapConProvider 인터페이스를 구현한 클래스입니다.

LdapResource

LDAP 리소스의 환경 이름을 입력합니다. 자세한 내용은 LDAP 리소스 만들기를 참조하세요.

BaseDN

모든 데이터가 존재하는 LDAP의 기본 수준입니다. 예를 들어 Apigee의 LDAP 제공업체에서 모든 데이터가 dc=apigee,dc=com 아래에 있습니다.

  • ref: BaseDN 값이 포함된 흐름 변수(예: apigee.baseDN)를 지정하는 데 사용합니다. ref가 명시적인 BaseDN 값보다 우선 적용됩니다. ref와 값을 모두 지정하면 ref의 우선순위가 지정됩니다. 런타임 시 참조가 확인되지 않으면 값이 사용됩니다.

Scope

  • 객체: 인증 또는 검색이 LDAP의 기본 수준에서만 발생합니다.
  • onelevel: 인증 또는 검색이 기본 수준보다 한 수준 낮은 단계에서 이루어집니다.
  • subtree (기본값): 인증 또는 검색이 기본 수준에서 그리고 기준보다 완전히 재귀적으로 수행됩니다.

인증

Authentication

구현하는 인증 동작의 상위 요소입니다.

UserName

다음 속성 중 하나를 취하는 빈 요소:

  • ref: 요청의 사용자 이름에 대한 참조입니다(예: request.header.username).
  • value: 사용자 이름 자체입니다.

사용자 이름으로 인증하지 않거나 요청에 사용자 이름이 포함되지 않은 경우 이 요소를 포함하지 않아도 됩니다.

요청에 사용자 이름이 있지만 사용자 이름이 아닌 DN 속성(예: 이메일)으로 사용자를 인증하려면 SearchQuery를 포함하여 비밀번호와 연결된 사용자 이메일을 가져옵니다. LDAP 정책은 사용자 이름을 사용하여 해당 이메일 주소의 LDAP 공급자를 쿼리하고 이 주소가 인증에 사용됩니다.

Password

다음 속성 중 하나를 취하는 빈 요소:

  • ref: 요청의 비밀번호에 대한 참조입니다(예: request.header.password).
  • value: 암호화된 비밀번호 자체입니다.

SearchQuery

사용자 이름이 아닌 DN 속성(예: 이메일)을 사용하여 인증하려면 요청에서 DN 속성(예: 사용자 이름)을 가져오도록 LDAP 정책을 구성합니다. 이 속성은 LDAP에서 사용자를 식별하고, 이메일을 검색하고, 사용자를 인증하는 데 사용됩니다.

예를 들어 LDAP에서 이메일 주소 저장을 위해 'mail' 속성을 정의한다고 가정합니다.

<SearchQuery>mail={request.header.mail}</SearchQuery>

검색

Search

구현하는 검색 동작의 상위 요소입니다.

SearchQuery

요청 또는 응답에서 메타데이터로 사용자를 식별하면 이 요소를 사용하여 LDAP에서 사용자의 추가 DN 속성을 검색할 수 있습니다. 예를 들어 요청에 사용자 이메일이 포함되어 있고 LDAP가 사용자 이메일 주소 저장을 위해 mail 속성을 정의하는 경우 다음 설정을 사용합니다.

<SearchQuery>mail={request.header.mail}</SearchQuery>

이 쿼리는 LDAP에서 요청의 이메일과 일치하는 이메일을 검색하고 이제 정책은 속성 요소를 사용하여 해당 사용자의 추가 DN 속성을 검색할 수 있습니다.

Attributes

하나 이상의 <Attribute> 요소를 사용하여 사용자와 관련하여 검색하려는 DN 메타데이터를 식별합니다. 속성이 1개 이상 필요합니다.

예를 들어 다음 예시와 같이 SearchQuery로 사용자를 식별하면 정책에서 주소, 전화번호, 직책과 같은 사용자의 DN 속성을 검색할 수 있습니다.

속성 값은 LDAP에서 정의된 DN 속성 이름입니다.

<Attributes>
  <Attribute>address</Attribute>
  <Attribute>phone</Attribute>
  <Attribute>title</Attribute>
</Attributes>

사용법 참고사항

프라이빗 클라우드용 Apigee Edge를 사용하면 API 호출에 LDAP 제공업체를 활용할 수 있습니다. LDAP 정책을 사용하면 애플리케이션이 LDAP에 저장된 사용자에 대해 사용자 인증 정보를 인증할 수 있으며 LDAP에서 고유 이름 (DN)을 검색할 수 있습니다. 즉, 이메일, 주소, 전화번호 등 각 사용자와 연결된 메타데이터 또는 속성을 검색할 수 있습니다. 반환된 DN은 API 프록시에서 추가로 사용할 수 있도록 변수에 저장됩니다.

LDAP 리소스 만들기

LDAP 정책은 Apigee Edge에서 만든 LDAP 리소스를 활용합니다. LDAP 리소스는 LDAP 저장소에 연결 정보를 제공합니다.

LDAP 리소스를 만들고 관리하려면 다음 API 및 페이로드를 사용합니다.

API

LDAP 리소스 만들기 (POST) 또는 모든 LDAP 리소스 목록 (GET)을 만듭니다.

/v1/organizations/org_name/environments/environment/ldapresources

LDAP 리소스 (GET), 업데이트 (POST) 및 삭제 (DELETE)에 대한 세부정보를 가져옵니다.

/v1/organizations/org_name/environments/environment/ldapresources/ldap_resource_name

페이로드

다음은 사용 의견이 포함된 샘플 XML 페이로드입니다.

<LdapResource name="ldap1">
  <Connection>
    <Hosts>
      <!-- port is optional: defaults to 389 for ldap:// and 636 for ldaps:// -->
      <Host port="636">foo.com</Host>
    </Hosts>
    <SSLEnabled>false</SSLEnabled> <!-- optional, defaults to false -->
    <Version>3</Version> <!-- optional, defaults to 3-->
    <Authentication>simple</Authentication> <!-- optional, only simple supported -->
    <ConnectionProvider>jndi|unboundid</ConnectionProvider> <!-- required -->
    <ServerSetType>single|round robin|failover</ServerSetType> <!-- not applicable for jndi -->
    <!-- If using a custom LDAP provider, the fully qualified class: -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
  </Connection>
  <ConnectPool enabled="true"> <!-- enabled is optional, defaults to true -->
    <Timeout>30000</Timeout> <!-- optional, in milliseconds; if not set, no timeout -->
    <Maxsize>50</Maxsize> <!-- optional; if not set, no max connections -->
    <Prefsize>30</Prefsize> <!-- optional; if not set, no pref size -->
    <Initsize></Initsize> <!-- optional; if not set, defaults to 1 -->
    <Protocol></Protocol> <!-- optional; if not set, defaults to 'ssl plain' -->
  </ConnectPool>
  <Admin>
    <DN>cn=manager,dc=apigee,dc=com</DN>
    <Password>secret</Password>
  </Admin>
</LdapResource>

curl 예: LDAP 리소스 만들기

다음 예에서는 ldap1이라는 LDAP 리소스를 만듭니다.

curl -X POST -H "Content-Type: application/xml" \
  https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/ldapresources \
  -u apigee_email:password -d \
  '<LdapResource name="ldap1">
    <Connection>
      <Hosts>
      <Host>foo.com</Host>
      </Hosts>
      <SSLEnabled>false</SSLEnabled>
      <Version>3</Version>
      <Authentication>simple</Authentication>
      <ConnectionProvider>unboundid</ConnectionProvider>
      <ServerSetType>round robin</ServerSetType>
    </Connection>
    <ConnectPool enabled="true">
      <Timeout>30000</Timeout>
      <Maxsize>50</Maxsize>
      <Prefsize>30</Prefsize>
      <Initsize></Initsize>
      <Protocol></Protocol>
    </ConnectPool>
    <Admin>
      <DN>cn=manager,dc=apigee,dc=com</DN>
      <Password>secret</Password>
    </Admin>
  </LdapResource>'

응답 코드

다음은 정책이 성공 또는 실패 시 반환하는 HTML 응답 코드입니다.

  • 성공: 200
  • 실패: 401

프라이빗 클라우드용 Edge에서 커스텀 LDAP 제공업체 사용

커스텀 LDAP 제공업체 사용

프라이빗 클라우드용 Apigee Edge에는 LDAP 정책과 상호작용하도록 이미 구성된 LDAP 제공업체가 함께 제공됩니다. 하지만 커스텀 LDAP 제공업체를 사용하는 경우 제공업체가 LDAP 정책을 지원할 수 있도록 설정해야 합니다. 방법은 다음과 같습니다.

  1. LDAP 제공자 클래스에서 ExternalLdapConProvider 인터페이스를 구현합니다.
    public interface ExternalLdapConProvider {
      void doAuthentication(LdapBean LlapBean, String userDN, String password, String baseDN);
    
      void doSearchAndAuthentication(LdapBean LlapBean, String password, String baseDN, String query, int scope);
    
      Collection<Map<String, String[]>> doSearch(LdapBean LlapBean, String query,
        String baseDN, Collection<String> requiredAttributes, int scope);
    
      void closeConnections();
    }
  2. 정책 구성의 <LdapConnectorClass> (다음 섹션)에서 커스텀 LDAP 제공업체의 정규화된 클래스 이름을 추가합니다.
  3. custom-ldap.jar_.zip 파일을 다운로드합니다. (마우스 오른쪽 버튼을 클릭하고 다른 이름으로 저장을 선택해야 할 수도 있습니다.)
  4. 압축을 풉니다.
  5. 환경에 custom-ldap.jar 파일을 추가하고 클래스 경로에 있는지 확인합니다.
  6. LDAP 제공업체에 대한 환경 리소스를 만듭니다. LDAP 정책의 <LdapResource> 요소에서 환경 리소스 이름을 사용합니다.

Java용 UnboundID LDAP SDK 사용

UnboundID LDAP SDK를 LDAP 정책과 함께 사용할 수 있지만 먼저 버전 2.3.1을 다운로드하여 메시지 프로세서의 클래스 경로에 추가해야 합니다.

UnboundID LDAP SDK를 LDAP 정책과 함께 사용하려면 다음 안내를 따르세요.

  1. 브라우저를 열고 UnboundID LDAP SDK의 Sourceforge 파일 저장소로 이동합니다.
    https://sourceforge.net/projects/ldap-sdk/files/
  2. SDK 버전 2.3.1 (SE 또는 표준 버전)을 찾아 해당 버전의 ZIP 파일을 다운로드합니다. 예: 'unboundid-ldapsdk-2.3.1-se.zip'
  3. 다음 예에 표시된 것처럼 SDK ZIP 파일에서 JAR 파일을 추출합니다.
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    이 명령어는 JAR 파일만 ~/tmp 디렉터리에 추출합니다. 이 메서드는 선택사항이지만 -j가 포함된 디렉터리 구조를 삭제합니다.

  4. 각 메시지 프로세서 노드에서:
    1. JAR 파일을 메시지 프로세서의 /opt/apigee/edge-gateway/lib/thirdparty 디렉터리에 복사합니다.
    2. 필요한 경우 메시지 프로세서가 액세스할 수 있도록 Apigee 사용자에게 JAR 파일에 대한 권한을 부여합니다.
    3. Edge는 /opt/apigee/edge-gateway/lib/thirdparty 디렉터리의 모든 서드 파티 라이브러리를 클래스 경로에 추가합니다.

    4. 메시지 프로세서를 다시 시작합니다.
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

흐름 변수

다음은 SearchQuery에 의해 채워진 LDAP 정책 변수입니다.

변수

설명

ldap.policyName.execution.success

정책이 실행된 후 이 흐름 변수에는 결과에 따라 'true' 또는 'false' 값이 포함됩니다.

ldap.policyName.search.result[index].
  attribute.attrName[index]=value

이 변수의 유연한 형식, 특히 색인은 여러 값을 갖는 속성뿐 아니라 여러 속성을 감안합니다. index는 1부터 시작하는 숫자입니다. 색인 번호를 제공하지 않으면 기본 색인 번호는 1입니다.

정책에서 주소, 전화번호, 이메일을 반환하면 다음 변수를 사용하여 첫 번째 속성과 값을 검색할 수 있습니다.

ldap.policyName.search.result.attribute.address
ldap.policyName.search.result.attribute.phone
ldap.policyName.search.result.attribute.email

검색결과에서 세 번째 주소 속성을 가져오려면 다음을 사용합니다.

ldap.policyName.search.result[3].attribute.address

한 속성에 여러 값이 있는 경우 (예: 사용자에게 여러 이메일 주소가 있는 경우) 다음과 같이 결과에서 두 번째 이메일 주소를 검색합니다.

ldap.policyName.search.result.attribute.mail[2]

오류 코드

에지 정책에서 반환되는 오류는 오류 코드 참조에 설명된 일관된 형식을 따릅니다.

이 정책은 다음 오류 코드를 사용합니다.

오류 코드 메시지
InvalidAttributeName Invalid attribute name {0}.
InvalidSearchBase Search base can not be empty.
InvalidValueForPassword Invalid value for password field. It can not be empty.
InvalidSearchScope Invalid scope {0}. Allowed scopes are {1}.
InvalidUserCredentials Invalid user credentials.
InvalidExternalLdapReference Invalid external ldap reference {0}.
LdapResourceNotFound Ldap resource {0} not found.
BaseDNRequired Base DN required.
OnlyReferenceOrValueIsAllowed Only value or reference is allowed for {0}.
AttributesRequired At least one attribute required for search action.
UserNameIsNull User name is null.
SearchQueryAndUserNameCannotBePresent Both search query and username can not be present in the authentication action. Please specify either one of them.