Posted at

SAP Cloud Connectorの認証にActiveDirectoryを利用してみる


0. はじめに

SAP Cloud Connector をいじっている中で、認証をLDAPで行うことができると判明。

やってみようということで設定してみたが、SAPのドキュメントには純粋LDAPサーバの例しかなく、

Active Directory(以下、AD)の例がなかったので記事を書いてみることにしました。

題名にSAP~とかいてありますが、要はJNDIRealmの話です。


1. そもそも

以下のヘルプを読むと、LDAPの場合こうしなさい的に書いてあるが、具体的にどうすればいいのか全く分からない。。。

SAP Cloud Platform Connectivity - 認証での LDAP の使用

ヘルプを読み解いていくと、設定画面の内、一番大切なのはConfigurationの部分です。

image.png

設定例を見てみると、明らかにJNDIRealmの書き方です。

よって、Avtive Directoryで認証する為にはADに対応したJNDIRealmを書くことがゴールになります。


Configuration設定例

userPattern="uid={0},ou=people,dc=mycompany,dc=com"

roleBase="ou=groups,dc=mycompany,dc=com"
roleName="cn"
roleSearch="(uniqueMember={0})"


余談:JNDIRealmとは

JNDIRealmという言葉は二つの部分からなっています。

1つ目、JNDIとは「Java Naming and Directory Interface」の略です。

名前の通り、ネーミング/ディレクトリサービスからデータを参照する際に利用するAPIを指します。

ネーミング/ディレクトリサービスの実装は「DNS」や「LDAPデータベース」などが該当します。

2つ目、RealmとはTomcatの用語です。

公式ドキュメントを読むと「A Realm is a "database" of usernames and passwords」と明確に定義してあります。

Apache Tomcat 8 - Realm Configuration HOW-TO


A Realm is a "database" of usernames and passwords that identify valid users of a web application (or set of web applications), plus an enumeration of the list of roles associated with each valid user.


よって、まとめると、Java Naming and Directory Interfaceを利用したユーザデータベースということになります。

具体的にはJNDIAPIでディレクトリサービス(ここではAD)にアクセスし、認証、認可を行う為の設定というところでしょうか。


さらに余談:SAP Cloud Connector のサーブレットコンテナ

サーブレットコンテナにはGEMINIプロジェクトのGemini Web を利用しているようです。

当該PJのリリースノートを追っていくと、Apache Tomcat 7.0.56を利用しているようです。

# ls -l /opt/sap/scc/plugins/org.eclipse.gemini.web.tomcat_2.2.6.RELEASE.jar

-rw-r----- 1 sccadmin sccgroup 104537 May 3 21:28 /opt/sap/scc/plugins/org.eclipse.gemini.web.tomcat_2.2.6.RELEASE.jar

https://www.eclipse.org/gemini/web/download/release-notes/2.2.5.RELEASE.php

https://www.eclipse.org/gemini/web/download/release-notes/2.2.6.RELEASE.php


2. Active Directoryで認証する為の設定

JNDIRealmのうち、connection*Configuration以外の項目から自動生成されそうなので、まずはConfigurationに入力する内容を考えます。


2.1 Configuration

結論は以下のようになります。


Configuration

userBase="DC=example,DC=co,DC=jp" 

userRoleName="memberOf"
userSearch="(sAMAccountName={0})"
userSubtree="true"
roleBase="DC=example,DC=co,DC=jp"
roleName="CN"
roleSearch="(member={0})"
roleSubtree="true"

一つ一つ解説していきます。

Apache Tomcat 8 - Realm Configuration HOW-TO


userBase

userBase="DC=example,DC=co,DC=jp" 

ユーザを検索する際の起点となるオブジェクトを指定。


userRoleName

userRoleName="memberOf" 

ユーザオブジェクト内でロールとして扱う属性を指定。

今回はADのグループをロールとして扱うため、memberOf属性を利用する。


userSearch

userSearch="(sAMAccountName={0})"

認証時のユーザIDをAD上のどの属性にマッピングするかを定義する。

ADはsAMAcocountNameという属性がログイン名になっている為、この属性を指定する。

{0}にはWebアプリの認証画面で入力したユーザIDが動的に入る。


userSubtree

userSubtree="true"

userBaseで指定したオブジェクト配下のサブツリーを全て検索対象する場合にtrueを設定する。

※デフォルト値:false


roleBase

roleBase="DC=example,DC=co,DC=jp" 

ロールを検索する際の起点となるオブジェクトを指定。


roleName

roleName="CN"

ロールとして扱う属性を指定する。今回はCommonNameを利用する。


roleSearch

roleSearch="(member={0})" 

ユーザ名とロールを紐づける属性を定義する。

{0}はDistinguished Nameが動的に入る。


roleSubtree

roleSubtree="true"

roleBaseで指定したオブジェクト配下のサブツリーを全て検索対象する場合にtrueを設定する。

※デフォルト値:false


2.2 その他の設定項目

設定項目
概要
設定例

Host
LDAPサーバのIP,PORT
192.168.10.5:398

Secure Host
SSL/TLSのON/OFF
-

Alternate Host
代替LDAPサーバのIP,PORT
-

Secure Alternate Host
SSL/TLSのON/OFF
-

User Name
接続ユーザ名(DN)
CN=sv-scc,OU=system,DC=example,DC=co,DC=jp

Password
接続ユーザのパスワード
****

User Role
ロール名(※)
sg-sccadmins

Monitoring Role

ロール名(※)

※ロールはADのグループとするため、↑の設定だとADグループ「sg-sccadmins」に所属しているADユーザがSAP Cloud Connectorの管理画面にログインできるようになる。

※ブランクの場合、「admin」もしくは「sccadmin」というグループ名がハードコーディングされている為利用される。


3. まとめ

以上の設定をまとめると、以下のような形になる。

image.png

Saveボタンを押下すると自動的に再起動が実行される。


4. テスト

再起動完了後、管理画面にアクセスし、ADユーザのアカウント名/パスワードを入力する。

image.png

ログインできることを確認する。(右上のメニューボタンにユーザ名が表示されている)

image.png

以上です!

あくまで設定例なので、参考まで。