Amazon LinuxのOSアカウントをSimple AD(AWS Directory Service)で管理する
西澤です。Windows OSだけでなく、Linux OSもドメイン連携することで、OSアカウントの集約管理が可能です。以前にもご紹介した内容ですが、設定していく上での注意事項がいくつかあるので、まとめてみたいと思います。
- AWS Directory Service(Simple AD)のみでユーザ管理(OSログイン編) | Developers.IO
- Amazon Web Services ブログ: LinuxインスタンスのSimple ADへの参加 (AWS Directory Service)
- Manually Add a Linux Instance (Simple AD and Microsoft AD) - AWS Directory Service
事前準備の注意
Microsoft ADを利用する場合でもドメイン連携の手順はほとんど変わらないと思いますが、アカウント管理のみを利用するのであれば、Simple ADのみで十分なので今回はこちらを利用します。Microsoft ADでも手順をほとんど変えずに利用できると思いますが、未検証ですので悪しからず。
Simple ADとの通信ポート開放
Simple ADとドメイン連携するサーバ間で、必要な通信ポートを開放する必要があります。
- TCP/UDP 53 - DNS
- TCP/UDP 88 - Kerberos authentication
- UDP 123 - NTP
- TCP 135 - RPC
- UDP 137-138 - Netlogon
- TCP 139 - Netlogon
- TCP/UDP 389 - LDAP; note that AWS Directory Service does not support LDAP with SSL (LDAPS)
- TCP/UDP 445 - SMB
- TCP 873 - FRS
- TCP 3268 - Global Catalog
- TCP/UDP 1024-65535 - Ephemeral ports for RPC
詳しくは公式ドキュメントをご確認ください。
Simple ADと同一VPC内のOSをドメイン連携させる場合にはデフォルト設定で問題ありませんが、Internet VPN接続やVPC Peeringを介して接続する必要がある場合には、AWS Directory Service側に割り当てられたSecurity Groupも編集が必要となる場合があります。AWS Directory Serviceの画面には、Security Group設定の画面は存在しないので注意が必要です。用途は異なりますが、下記記事でSimple AD用のSecurity Groupを編集する手順をご紹介していますので、参考にしていただければと思います。
DNSクライアント設定
Simple ADと連携させる為に、各OSのDNSクライアントが参照するDNSサーバを、Simple ADが提供するDNSサーバに向ける必要があります。方法は2種類ありますので、要件に合わせて変更してください。
- DHCP Options set利用
- VPC全体のDNSサーバを変更して問題が無い場合はこちらを利用した方が簡単
- resolv.confを編集
- 各OS上の
/etc/resolv.conf
を編集してDNSサーバを手動指定 - DHCPから上書きされないように、
PEERDNS
オプションをnoに設定することもお忘れなく
PEERDNS
オプションについては、下記記事で詳しく説明されています。
ADユーザ・グループの管理サーバを用意する
ADユーザやADグループを管理する為のサーバを用意します。Windowsサーバをドメイン参加させて、RSAT(Remote Server Administration Tools)を導入しておきましょう。手順は公式ドキュメントにも記載されています。
"AD DS and AD LTS Tools"があれば十分ですが、念の為、"DNSサーバツール"や"グループポリシーの管理"も導入しておくことで、DNS操作やグループポリシー操作(※一部パスワードポリシーのみ変更可能)が可能となります。
AD管理における注意事項
Windows Server 2012 R2のActive Directoryユーザとコンピュータ(ADUC)からは、ユーザ追加ができないという制約がありますので、ご注意ください。
There is an incompatibility between the Simple AD directory and the Active Directory Users and Computers tool on Windows Server 2012 R2 that causes user creation to fail. We are working to correct this incompatibility. You can still use the tools on Windows Server 2012 R2 for other tasks, such as managing group policy. However, you should create your users from a Windows Server 2008 R2 instance.
Installing the Active Directory Administration Tools - AWS Directory Service
また、Simple ADでは、PowerShellコマンドレットからの操作もできません。
- Simple ADでサポートされない機能
- スキーマ拡張
- MFA
- LDAPS通信
- PowerShell ADコマンドレット
- FSMOロール転送
Note that you cannot set up trust relationships between Simple AD and other Active Directory domains. Other common features not supported today by Simple AD include schema extensions, multi-factor authentication, communication over LDAPS, PowerShell AD cmdlets, and the transfer of FSMO roles.
What Is AWS Directory Service? - AWS Directory Service
で、Windows Server 2008をAD管理の為だけに用意するのもいただけないので、他に方法が無いか検証していたところ、Windows Server 2012 R2からもADユーザを追加する手順を見つけました(非公式)。
> set NEWUSER=testuser > net user %NEWUSER% XXPass1234XX /add /domain この要求はドメイン simplead.local のドメイン コントローラーで処理されます。 コマンドは正常に終了しました。
昔ながらのnetコマンドでは互換性の問題が発生しないようです。検証ベースの結果ではありますが、こちらを利用すれば余分なWindowsサーバを構築する必要は無さそうです。また、下記記事ではLinuxからのSimple AD上のアカウント管理手順も紹介されています。アカウントの管理さえできれば良いので、どの方式を採用しても問題はありません。ユーザの改廃やグループへの追加・削除ができるようにしておきましょう。
ドメイン参加作業用のアカウントを用意する
各OSをドメイン参加させる為に、毎度Domain Admins権限を利用するのもいただけません。サーバ構築担当者には、コンピュータオブジェクトの改廃のみ権限を付与し、ユーザオブジェクトの管理とは分離しておきましょう。公式ドキュメントに丁寧な手順が記載されています。以降の手順では、osadmin
というアカウントを用意してドメイン参加手順を説明していきます。
Amazon Linuxをドメイン連携させる
事前の準備が整ったら、Amazon Linuxのアカウントもドメイン連携させましょう。1度この設定をしておけば、アカウントの改廃は原則Simple AD側だけで管理することができるはずです。
前提パッケージをインストール
ドメイン参加するLinuxサーバには下記パッケージ追加が必要です。
$ sudo yum -y install sssd realmd krb5-workstation
パスワード認証でssh接続可能にする
セキュリティ強度が下がってしまいますが、前述の通りSimple ADではスキーマ拡張がサポートされていない為、ユーザのSSH公開鍵を連携することは難しそうです。もう少し調査しようと思っていますので、何かわかればまたブログ 化しようと思います。ひとまずここでは、SSH接続元をSecurity Groupで必要最低限に絞った上で、パスワード認証を許可しておきます。
$ sudo sed -i -e 's/^PasswordAuthentication .*$/PasswordAuthentication yes/g' /etc/ssh/sshd_config $ sudo service sshd restart
ドメイン参加
ドメイン参加は以前の記事でもご紹介した通りです。これまでの手順が全てクリアできていれば、スムーズにドメイン連携できるはずです。
[ec2-user@longhostname0123 ~]$ sudo realm join -U [email protected] simplead.local --verbose * Resolving: _ldap._tcp.simplead.local * Performing LDAP DSE lookup on: 172.31.37.196 * Performing LDAP DSE lookup on: 172.31.23.35 * Successfully discovered: simplead.local [email protected] に対するパスワード: * Required files: /usr/sbin/oddjobd, /usr/libexec/oddjob/mkhomedir, /usr/sbin/sssd, /usr/bin/net * Joining using a truncated netbios name: LONGHOSTNAME012 * LANG=C LOGNAME=root /usr/bin/net -s /var/cache/realmd/realmd-smb-conf.VSI5EY -U [email protected] ads join simplead.local Enter [email protected]'s password:DNS update failed: NT_STATUS_INVALID_PARAMETER Using short domain name -- SIMPLEAD Joined 'LONGHOSTNAME012' to dns domain 'simplead.local' No DNS domain configured for longhostname012. Unable to perform DNS Update. * LANG=C LOGNAME=root /usr/bin/net -s /var/cache/realmd/realmd-smb-conf.VSI5EY -U [email protected] ads keytab create Enter [email protected]'s password: * /sbin/chkconfig sssd on * /sbin/service sssd restart Stopping sssd: cat: /var/run/sssd.pid: No such file or directory [FAILED] Starting sssd: [ OK ] * /bin/sh -c /usr/sbin/authconfig --update --enablesssd --enablesssdauth --enablemkhomedir --nostart && /sbin/chkconfig oddjobd on && /sbin/service oddjobd start getsebool: SELinux is disabled Starting oddjobd: [ OK ] * Successfully enrolled machine in realm
Simple ADは、DNS動的更新を許していない為、DNS更新系のエラーは無視して問題ありません。名前解決も利用したい場合には、DNSツールを導入して手動でレコード登録をしてください(Simple ADのDNSサーバへの手動登録は、Aレコードのみサポート)。
ドメイン参加時の注意
前述のコマンド結果をよく読むとわかりますが、Simple ADと連携する際のOSホスト名は15文字までに切り捨てられてしまいます。Windows関連のサービスとの連携では、未だにOSホスト名を15文字までにしておいた方が安全なようです。重複が無ければ問題はありませんが、先頭15文字までが同じ2台以上のサーバをドメイン参加させようとすると、ドメインコントローラ側が管理しているサーバを特定できず、認証が正しく動作しなくなってしまいます。私が試した環境では、/var/log/messages
に下記のログが多数出力されていました。
Mar 25 20:30:30 longhostname0123 [sssd[krb5_child[15910]]]: Preauthentication failed
任意のNetBIOS名でドメイン連携させる手順
realmコマンド経由ではNetBIOS名を変更することができなかった為、手動での作業が必要でしたが、下記の手順でドメイン参加させることに成功しました。ドメイン名はsimplead.local
としていますので、環境に合わせて変更して試してみてください。smb.conf
のnetbios name
に任意のNetBIOS名を指定します。
$ cat << EOF | sudo tee /etc/samba/smb.conf [global] workgroup = SIMPLEAD client signing = yes client use spnego = yes kerberos method = secrets and keytab log file = /var/log/samba/%m.log realm = SIMPLEAD.LOCAL security = ads netbios name = shortname1 EOF $ cat << EOF | sudo tee /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = SIMPLEAD.LOCAL [realms] SIMPLEAD.LOCAL = { } [domain_realm] simplead.local = SIMPLEAD.LOCAL .simplead.local = SIMPLEAD.LOCAL EOF
この状態で、netコマンドでドメイン連携させます。ここでもDNS更新に関するエラーが出ますが、ドメイン参加には成功しています。
$ sudo net ads join -U osadmin Enter osadmin's password: Using short domain name -- SIMPLEAD Joined 'SHORTNAME1' to dns domain 'simplead.local' No DNS domain configured for shortname1. Unable to perform DNS Update. DNS update failed: NT_STATUS_INVALID_PARAMETER
sssd設定ファイルを編集して、relamコマンドによるドメイン連携時の出力に合わせて、ドメインアカウントと連携してPAM認証できるようにしてあげます。
$ cat << EOF | sudo tee /etc/sssd/sssd.conf [sssd] domains = simplead.local config_file_version = 2 services = nss, pam [domain/simplead.local] ad_domain = simplead.local krb5_realm = SIMPLEAD.LOCAL realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_sasl_authid = shortname1 ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = simple EOF $ sudo chmod 600 /etc/sssd/sssd.conf $ sudo chkconfig sssd on && sudo service sssd start Starting sssd: [ OK ] $ sudo authconfig --update --enablesssd --enablesssdauth --enablemkhomedir --nostart && sudo chkconfig oddjobd on && sudo service oddjobd start getsebool: SELinux is disabled Starting oddjobd:
ログイン可能なADセキュリティグループを登録
realmコマンド経由でAD参加させた場合は、下記コマンドでログイン可能なグループを制限しておきます。デフォルトでは、全てのドメイン上のアカウントがOSログイン可能な状態となってしまいますので、必ずログインできるユーザまたはグループを制限する設定をしておきましょう。
$ sudo realm permit --groups "[email protected]" --verbose * /sbin/service sssd restart Stopping sssd: [ OK ] Starting sssd: [ OK ]
前述のNetBIOS名でAD参加させる手順だと、realm permitがエラーとなってしまったのですが、手動でsssd.confを編集すれば問題ありませんでした。
$ echo "simple_allow_groups = [email protected]" | sudo tee -a /etc/sssd/sssd.conf $ sudo service sssd restart Stopping sssd: [ OK ] Starting sssd: [ OK ]
※必要に応じてコンマ区切りで指定してください
まとめ
Simple ADアカウントによるsshログイン確認は割愛しましたが、Amzon LinuxをSimple ADに連携させる手順の注意事項をまとめてみました。LinuxのAD連携用のパッケージも各種あり、ソフトウェアのバージョン等により、まだ手順が定まっていないような印象があるのも正直なところではあります。Linuxをドメイン連携させる実現手順は他にもありそうなので、良い方法があればぜひご連絡ください。
本記事がどこかの誰かのお役に立てば嬉しいです。