銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

AAD DSを使って、OpenShiftのLDAP認証先としてAADを参照する

前回の続きとなる記事です。

tech.tanaka733.net

OpenShift はmasterのAPIへのアクセス(Webのポータル画面含む)にいくつかの認証方法を選べます。認証のプロバイダにAADを使いたい場合はOpenID Connectが使えます。ただ、どうしてもAADに定義したグループ、ユーザーを使ってLDAP認証したいという場合は、AAD DSを使えば、LDAPのプロバイダーとなれるので、他のLDAPプロバイダー同様に利用することが可能になります。

Configuring Authentication and User Agent | Installation and Configuration | OpenShift Container Platform 3.5

というわけで、AAD DSを使う場合の設定方法です。

master-config.yamlの設定

AAD DSのIPアドレスがXXX.XX.XX.XX、AAD DSに設定したドメインがexample.onmicrosoft.com、管理ユーザーがadadmin、AADに定義したocpgroupというグループに属するユーザーが利用可能となる設定例です。

  - name: "aad_ds_provider" 
    challenge: true 
    login: true 
    mappingMethod: claim 
    provider:
      apiVersion: v1
      kind: LDAPPasswordIdentityProvider
      attributes:
        id: 
        - dn
        email: 
        - userPrincipalName
        name: 
        - cn
        preferredUsername: 
        - cn
      bindDN: "cn=adadmin,ou=AADDC Users,DC=example,DC=onmicrosoft,DC=com" 
      bindPassword: "<adadminユーザーのパスワード>" 
      insecure: true
      url: "ldap://XXX.XX.XX.XX/OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com?userPrincipalName?sub?(memberof=CN=ocpgroup,OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com)"

bindDNbindPasswordのところにLDAPに接続しにいくユーザーとパスワードを記述します。この書き方だとパスワードが平文としてテキストに記述されますが、環境変数や外部の平文ファイルおよび暗号化された外部の暗号化ファイルに記載することができます。

Master and Node Configuration | Installation and Configuration | OpenShift Container Platform 3.5

他の注意事項としては、前回も記載した通り、AADのユーザーやグループはAADDC Users OUに所属すること、EメールアドレスはuserPrincipalNameで取得できること、特定のグループに属するユーザーを利用できる対象とする場合はLDAP URLのフィルタの部分に記述できること、が挙げられます。

LDAP URLのattributeの部分にuserPrincipalNameを指定しているのでログイン画面ではeメールアドレスを入力してログインできるようになります。実際にLDAPに投げられるクエリはLDAP URLのフィルターとattribute=(ログインフォームのUsernameに入力した値)を組み合わせたクエリになります。

f:id:tanaka733:20170707172245p:plain

あとは要件にあわせて適宜設定ファイルを変更すればいいでしょう。

Syncing Groups with LDAP

ついでに、Syncing GroupsでのAAD DSの設定例もまとめておきます。Syncing Groupsは事前にLDAPのクエリで拾ったグループと属するユーザーをOpenShiftのグループにマッピングしておく機能です。先程と同じ前提で、ocpgroupをOpenShift上ではusergroup1としてマッピングする例です。

kind: LDAPSyncConfig
apiVersion: v1
groupUIDNameMapping:
  "CN=ocpgroup,OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com": usergroup1
url: ldap://XXX.XX.XX.XX
insecure: true
bindDN: "cn=adadmin,ou=AADDC Users,DC=example,DC=onmicrosoft,DC=com"
bindPassword: "<adadminユーザーのパスワード>"
rfc2307:
 groupsQuery:
   baseDN: "OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com"
   scope: sub
   derefAliases: never
   filter: (CN=ocpgroup)
   pageSize: 1000
 groupUIDAttribute: dn
 groupNameAttributes: [ cn ]
 groupMembershipAttributes: [ member ]
 usersQuery:
   baseDN: "OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com"
   scope: sub
   derefAliases: never
   pageSize: 1000
 userUIDAttribute: dn
 userNameAttributes: [ sAMAccountName ]

これでocpgroupに属するユーザーをマッピングさせることができます。

$ oadm groups sync --sync-config=ldapsync.yaml --confirm