以前に同じような記事を書きましたが、そのときはAzure AD Domain ServicesはClassic Networkにしか作成できませんでした。
今回ARM VNetに作成できるようになったので試してみました。
作成する前にこのドキュメントを読んでおきます。
単純には、Domain Servicesを有効にしたVNet上にOpenShiftやそのほかAAD DSを参照するサービスを置けば動くはずですが、Domain Servicesに設定するVNetは専用のものを割り当てた方がよいとあるので、それに倣います。あとで、必要なVNetとpeeringして参照できるようにします。リージョン越えて接続する必要がある場合はサイト間VPNが利用できます。
実際に作成する手順はこちらのドキュメントを見て進めます。
特に面倒なところはなく作成まで進みます。ただ、作成を開始してから実際にDomain Servicesを参照するIPアドレスが利用可能になるには30~1時間ほどかかりました。
Domain ServicesのIPアドレスが利用可能になる間に(なってからでもいいですか)、VNet peeringの設定を行います。といっても、ARM VNet同士のpeeringはAzure PortalのVnetブレードから設定できます。注意点としては、双方向でpeeringを設定しないと接続できません。Azure Portalの表示でPEERING STATUSがConnected
になっているところまで確認しましょう。
ここまでできたら、peering相手のVNet上に起動したVMからDomain Servicesが参照できるようになります。VMが起動済みの場合はpeering完了後に再起動しておく必要があります。
OpenShiftの設定をする前にopenldap-clients
をインストールしてLDAP接続を確認しておきましょう。ドメインはexample.onmicrosoft.comを仮定しています。AAD DC Administratorsにadminユーザーが属しており、testというユーザーがocpusersというグループの中にいます。
# yum install openldap-clients # ldapsearch -x -LLL -h <DomainServicesのIPアドレス> -D "cn=<AAD DC管理者ユーザーのを識別するCN>,ou=AADDC Users,DC=example,DC=onmicrosoft,DC=com" -W -b "OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com" //testユーザーの結果のみ表示 dn: CN=test,OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user cn: test distinguishedName: CN=test,OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com instanceType: 4 whenCreated: 20170903140510.0Z whenChanged: 20170905081811.0Z displayName: test uSNCreated: 20496 memberOf: CN=ocpusers,OU=AADDC Users,DC=example,DC=onmicrosoft,DC= com uSNChanged: 29234 name: test objectGUID:: XXXXX userAccountControl: 544 badPwdCount: 1 codePage: 0 countryCode: 0 badPasswordTime: 131490732568021847 lastLogoff: 0 lastLogon: 131490731077979891 pwdLastSet: 131490727552992577 primaryGroupID: 513 objectSid:: XXXXXXXX accountExpires: 9223372036854775807 logonCount: 0 sAMAccountName: test sAMAccountType: 805306368 userPrincipalName: test@example.onmicrosoft.com objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=example,DC=onmicrosoft,DC=com dSCorePropagationData: 16010101000000.0Z lastLogonTimestamp: 131490730911102975 msDS-AzureADObjectId:: XXXXXX msDS-AzureADMailNickname: test //testユーザーのパスワードがDomain Servicesの同期されていることを確認する。パスワードを入れて認証できればOK。 # ldapwhoami -x -D "CN=test,OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com" -h <DomainServicesのIPアドレス> -W Enter LDAP Password: u:EXAMPLE\test
ここまで確認できたら、OpenShiftのmaster configurationをドキュメントに従って変更します。
今回の場合肝心の部分はこんな感じになります。
- name: "aad_ds_provider" challenge: true login: true mappingMethod: claim provider: apiVersion: v1 kind: LDAPPasswordIdentityProvider attributes: id: - dn email: - userPrincipalName name: - cn preferredUsername: - sAMAccountName bindDN: "cn=admin,ou=AADDC Users,DC=example,DC=onmicrosoft,DC=com" bindPassword: "<adminユーザーのパスワード>" insecure: true url: "ldap://<DomainServicesのIPアドレス>/OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com?userPrincipalName?sub?(memberof=CN=ocpusers,OU=AADDC Users,DC=example,DC=onmicrosoft,DC=com)"
変更後、masterサービスを再起動すればLDAP情報でログインできるようになるはずです。ならない場合、詳細なエラーログはログレベルを上げて確認します。/etc/sysconfig/atomic-openshift-master
(single masterの場合)のloglevelを5に変更します。8とかでもいいですが、余計な出力が増えるのでまず5で試すのがいいかと思います。