話題の記事

Windowsを一切使わずDirectory ServiceのSimple ADを使ってLinuxユーザーを一元管理する

2018.03.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「俺は、Linuxユーザーを一元管理・・・したいんやで!!」

AWS Direcoty ServiceのSimple AD、皆さんご利用でしょうか? AWSが提供するフルマネージド型ディレクトリサービスです。設定がむちゃくちゃ簡単でユーザー管理のみのシンプルな利用方法では、非常にお手軽に使えて便利なサービスです。

複数インスタンスにおけるユーザーの統一管理にはディレクトリサービスの利用がベストですが、ディレクトリ管理にはWindowsOSを利用する場合が多いと思います。しかし、Linuxユーザの管理を、わざわざWindowsサーバーを立ててやるのも面倒ですよね。

今回は、AWS上におけるLinuxOSのユーザーをSimple ADで管理するためのディレクトリセットアップ、Linuxインスタンスのドメイン参加方法、ユーザー追加の一連の流れを紹介します。

AWS環境上でのLinuxOSユーザー管理の参考になれば幸いです。ほな、いってみよ。

 __
(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     Simple ADダワッショイ
    |_|_|
    し'´J

構築の流れ

今回の構築の流れを紹介します。

  1. VPCを用意する
  2. Simple ADを利用して、ディレクトリを作成する
  3. VPCのDHCPオプションセットを編集する
  4. Linuxインスタンスをディレクトリに追加する
  5. ディレクトリに任意のユーザーを追加する

手順1「VPCを用意する」

最初に、ディレクトリを適用するためのVPCを用意します。デフォルトVPCでも大丈夫です。今回の構築手順では、hamada-vpcを利用して説明していきます。VPCには、最低2つのAZを含むサブネットを作成しておきます。

また、下記を参考に、VPCのDNSサポートを設定しておいてください。

VPC での DNS の使用 - Amazon Virtual Private Cloud

手順2「Simple ADを利用して、ディレクトリを作成する」

AWSコンソールを利用して、ディレクトリを作成します。

サービス一覧から「Diretory Service」を開き、「ディレクトリのセットアップ」をクリックします。セットアップ対象のなかから、「Simple AD」を選択。

ディレクトリの詳細内容を入力していきます。

  • ディレクトリDNS
    • 任意のディレクトリFQDNを設定
    • ここでは、hamada-dic.com
  • Administratorパスワード
    • ドメイン管理ユーザーのパスワードを設定
    • Admin123!(注意:運用環境では適切なパスワードを設定してください)
  • ディレクトリのサイズ
    • 「スモール」を選択
    • スモールでも2000個までオブジェクトが作成できます
  • VPC
    • ディレクトリを適用するVPCを設定
    • hamada-VPC
  • サブネット
    • VPC内の各AZに設定されているサブネットを2つ選択

一通り入力したら、ディレクトリを作成しましょう。作成が完了するまでしばらく時間がかかります。ステータスがアクティブになったら、ディレクトリIDをクリックし設定されたディレクトリ内容を確認しましょう!

ここで注目なのは、DNSアドレス。この2つのアドレスを、次の手順のDHCPオプションセットに追加する必要があるので、皆さんメモっておきましょう。

手順3「VPCのDHCPオプションセットを編集する」

VPCメニューを開いて、「DHCPオプションセット」から「DHCPオプションセットの作成」をクリック。

DHCPオプションセットを作成していきます。

  • 名前タグ
    • 任意の名前タグを設定
    • hamada-dhcp-opt
  • ドメイン名
    • Simple ADで作成したディレクトリ名を指定
    • hamada-dic.com
  • ドメインネームサーバー
    • Simple ADで作成したディレクトリに割り当てられたDNSアドレスを指定。複数ある場合は、カンマで連結可能
    • 10.0.2.159,10.0.3.25

作成したDHCPオプションセットを、VPCに割り当てます。

VPC一覧から割り当て対象のVPCを選択(ここでは、hamada-vpc)し、「DHCPオプションセットの編集」をクリック。

先程作成した、DHCPオプションセットを選択し、保存します。

手順4「Linuxインスタンスをディレクトリに追加する」

ここまでが前準備でした。いよいよ、Linuxインスタンスを作成し、ディレクトリに追加します。

まずは、VPC内に任意のEC2インスタンスを作成します。今回は、Amazon Linuxの最新AMIを利用します。インスタンスタイプは最小のt2.nanoで構いません。インスタンス作成後、SSHでログインします。

最初に、resolve.confの内容を確認。

$ cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /sbin/dhclient-script
search hamada-dic.com
nameserver 10.0.2.159
nameserver 10.0.3.25

通常デフォルトでは、ネームサーバーはAmazonProvidedDNSが設定されていますが、DHCPオプションセットを指定したVPCで起動したインスタンスには、そこで指定したDNSサーバーのIPアドレスがネームサーバーとして設定されています。

さっき、DHCPオプションセットで指定したDNSサーバーが、ネームサーバーとして設定されていますね。

ここで、「AmazonProvidedDNSの指定がないと、Route 53のプライベートホストゾーンが使えないのでは?」と思う方もいると思います。自分も、むっちゃ不安になりました。でも大丈夫。

Directory Serviceで作成したDNSサーバーは、権威外レコードについては、自動的にAmazonProvidedDNSにフォワーディングします。なので、resolv.confに追加でAmazonProvidedDNSのDNSサーバを指定する必要はありません。

これに関しては、以下の記事が非常に参考になりますので、気になる方は、合わせてご参照ください。

AWS Directory Service(Simple AD)を利用したオンプレミスからのPrivate Hosted Zone名前解決 | Developers.IO

インスタンスを最新化します。

$ sudo yum -y update

ディレクトリを管理するのに必要なパッケージをインストールします。

$ sudo yum -y install sssd realmd krb5-workstation

ディレクトリにインスタンスを参加させます。

sudo realm join -U Administrator@hamada-dic.com hamada-dic.com --verbose

Administratorのパスワードを聞かれるので、ディレクトリ作成時に設定した管理者パスワード(この記事ではAdmin123!)を入力。

最終的に、以下のログが出力されていれば、成功です。

...
 * Successfully enrolled machine in realm

ドメイン参加状況を確認します。

$ sudo realm list
hamada-dic.com
  type: kerberos
  realm-name: HAMADA-DIC.COM
  domain-name: hamada-dic.com
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: oddjob
  required-package: oddjob-mkhomedir
  required-package: sssd
  required-package: adcli
  required-package: samba-common
  login-formats: %U@hamada-dic.com
  login-policy: allow-realm-logins

SSHサービスを設定して、パスワード認証を許可します。sshd_configPasswordAuthenticationをyesに設定します。

/etc/ssh/sshd_config

PasswordAuthentication yes

SSSDサービスを起動します。

$sudo service sssd start

インスタンスを再起動します。

$sudo reboot

再起動後完了後、再接続し、ドメイン管理者をsudoersリストに追加します。

$sudo visudo

以下を、sudoersファイルの最後に追記します。

/etc/sudoers

## Add the "Domain Admins" group from the example.com domain.
%Domain\ Administrator@hamada-dic.com ALL=(ALL:ALL) ALL

ここまでで、設定完了です。試しに、Administratorユーザーで、インスタンスにログインしてみます。Administratorのパスワードを入力し、無事ログインできれば成功です!

$ ssh -l Administrator@hamada-dic.com 127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXX
ECDSA key fingerprint is MD5:e4:cc:XXXXXXXXXXXX
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
Administrator@hamada-dic.com@127.0.0.1's password:
Last login: Thu Mar 15 05:05:42 2018 from 127.0.0.1

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/
[administrator@hamada-dic.com@ip-10-0-2-252 ~]$

お疲れ様でした!

手順5. ディレクトリに任意のユーザーを追加する

前の手順までで、無事LinuxインスタンスをSimple ADで作成したディレクトリに参加させることができました。

最後に、openldapコマンドなどを利用して、ユーザーを追加する手順を紹介します。

ここでは、以下のユーザーを追加していきます。

  • User name: kanpei
  • User password: Amema123!

必要なパッケージを追加します。

$ sudo yum -y install samba-common openldap-clients krb5-workstation adcli

ユーザーを追加します。Administratorのパスワードを聞かれるので入力します。

$ net ads user ADD kanpei Amema123! -C "kanpei" -U Administrator@hamada-dic.com -S hamada-dic.com
Enter Administrator@hamada-dic.com's password:
User kanpei added

kanpeiが追加されました。アヘアヘ

さて、追加した新ユーザーは、パスワードをセットして有効化して初めて使えます。ユーザーアカウントを有効化するために、下記ファイルを作成します。

uac.ldif

dn:CN=kanpei,CN=Users,DC=hamada-dic,DC=com
changetype:modify
replace:userAccountControl
userAccountControl:512

作成したファイルを利用して、openldapクライアントのldapmodifyを利用して、ユーザー情報を変更します。

$ ldapmodify -h hamada-dic.com -p 389 -D "cn=Administrator,cn=Users,dc=hamada-dic,dc=com" -W -f uac.ldif
Enter LDAP Password:
modifying entry "CN=kanpei,CN=Users,DC=hamada-dic,DC=com"

これで、kanpeiユーザーの利用準備が整いました。下記コマンドを利用して、ケルベロス認証情報を取得し、チケット内容を確認します。

$ kinit kanpei
Password for kanpei@HAMADA-DIC.COM:
$ klist
Ticket cache: KEYRING:persistent:500:500
Default principal: kanpei@HAMADA-DIC.COM

Valid starting       Expires              Service principal
2018-03-15T05:34:06  2018-03-16T05:34:01  krbtgt/HAMADA-DIC.COM@HAMADA-DIC.COM
	renew until 2018-03-22T05:34:01

ドメインのユーザー一覧を表示します。ちゃんと、kanpeiが追加されていますね。

$ net ads user -S hamada-dic.com -U Administrator@hamada-dic.com
Enter Administrator@hamada-dic.com's password:
AWSAdminD-9567243566
Administrator
kanpei
krbtgt
Guest

その他、ユーザーグループの作成などについては、下記URLをご参照いただくと、捗るでしょう!

まとめ「マネージドサービスの利点を活かしてシンプルにLinuxユーザーを一元管理するにはうってつけ」

AWS Directory Serviceは、基本的にWindows環境で利用することが多いですが、Simple ADを利用すればOSがLinuxの場合でも、ディレクトリの作成、Linuxインスタンスのドメイン参加、ユーザー管理など、手軽に実施できることがお分かりいただけたかと思います。

複数あるサーバーのLinuxユーザーの一元管理方法として、一つの方法としてご検討いただければと思います。

それでは、今日はこのへんで。濱田(@hamako9999)でした。