AWS Directory Service(Simple AD)のみでユーザ管理(OSログイン編)

2015.10.05

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

西澤です。前回の記事AWS Directory Service(Simple AD)のみでユーザ管理(AWS Management Console編)では、AWS Management Consoleへのログイン制御を行いましたが、今回はSimple ADのアカウントを利用してOSログインを一元管理する方法をご紹介したいと思います。

目標

アカウントをAWS Directory Service(Simple AD)で集約することが目標です。OSユーザの作成・削除は行わずに運用できる環境にします。以降の手順は、Simple ADが事前に作成されていることを前提としています。

  • 人間が操作するアカウントは、OSユーザを使わずに、ADアカウントのみで管理する
  • Windows、Linux問わず、ADアカウントのみでログインする

事前準備

下記を用意しておきましょう。前回の記事と同様にAD管理用のWindows環境は必要です。

  • Simple AD: simplead.local
    • ADグループ: WinAdmins(Windowsサーバ管理者用)
    • ADグループ: LinAdmins(Linuxサーバ管理者用)
    • ADユーザ: bob(WinAdmins, LinuxAdminsに所属)

Windowsのドメイン参加(SSM利用)

事前に用意したSimple ADへのドメイン参加を手動で行う手順は、下記記事をご欄ください。今回は、AWS Management ConsoleからEC2をLaunchと同時にドメイン参加させる手順をご紹介します。

SSMはまだ一部のリージョンでしか利用することができません。早く東京リージョンでも使えるようになると良いですね。

  • US East (N. Virginia) region (us-east-1)
  • US West (Oregon) region (us-west-2)
  • EU (Ireland) region (eu-west-1)

IAMロールの準備

SSMを利用する為のIAMロールを事前に用意しておきます。 simple-ad-join

 

今回アタッチした"AmazonSSMFullAccess"の権限は以下の通りです。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData",
        "ds:CreateComputer",
        "ds:DescribeDirectories",
        "ec2:DescribeInstanceStatus",
        "logs:*",
        "ssm:*"
      ],
      "Resource": "*"
    }
  ]
}

AWS Management ConsoleからのSSM利用

こちらは非常に簡単です。SSMが利用可能なリージョンにて、いずれかのWindowsのAMIからEC2をLaunchする時に、下記のように指定します。

simple_ad_win_ssm_join

これだけでAD参加したWindowsサーバの出来上がりです。簡単ですね。

あとはWindowsサーバとしてADベースで権限管理してしまいましょう。ここでは、ドメイン管理者でログインして、AD上に作成したWinAdminsグループをローカルアドミニストレータとして登録しました。

administrators_winadmins

 

WinAdminsグループに所属しているADユーザbobでログインすることができました!

bob-win-login

 

Linuxのドメイン参加

先日LinuxもSimple ADへのドメイン参加がサポートされるようになりました 。

サポートされているディストリビューションは一部の最新のOSのみとなる為、ご注意ください。

  • Amazon Linux AMI 2015.03
  • Red Hat Enterprise Linux 7.1
  • Ubuntu Server 14.04 LTS
  • CentOS 7

リリースされたばかりのAmazon Linux AMI 2015.09でも利用できるか試してみました。手順はドキュメントの通りですが、せっかくなのでユーザデータを利用して一発でドメイン参加までできるかやってみました。ドメイン管理者権限のパスワードがベタ書きとなっていますので、このままでは使わないでください。AWS Directory Serviceへの参照権限がちょうどあったので、DNSサーバの指定をする為にWindows用に作成したIAMロールの権限をインスタンスプロファイルとして利用しています。

#!/bin/bash -ev
# 変数設定
# ドメイン参加権限のある管理者用のパスワードが必要となります
DSNAME=simplead.local
REGION=us-west-2
ADMIN_GROUP=LinAdmins
AD_PASSWORD=Pass1234

# 前提パッケージインストール
yum -y update
yum -y install sssd realmd krb5-workstation

# DNSのDHCPからの更新禁止
# こちらを設定しておかないとDHCPからresolv.confが書き換わってしまいますのでご注意ください
sed -i 's/PEERDNS=yes/PEERDNS=no/g' /etc/sysconfig/network-scripts/ifcfg-eth0
cat /etc/sysconfig/network-scripts/ifcfg-eth0

# DNSサーバ指定
# AWS Directory Serviceで作成されたDNSサーバ情報をAWS CLIで取得しています
DNSIP=($(aws ds describe-directories \
  --query "DirectoryDescriptions[?Name==\`${DSNAME}\`].DnsIpAddrs[]" \
  --region ${REGION} \
  --output text
))
echo "nameserver ${DNSIP[0]}" > /etc/resolv.conf
echo "nameserver ${DNSIP[1]}" >> /etc/resolv.conf
cat /etc/resolv.conf

# パスワードによるSSHログイン有効化
# デフォルトでは無効となっているところをADアカウントのパスワードでログイン許可しておきます
sed -i -e 's/^PasswordAuthentication .*$/PasswordAuthentication yes/g' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config
service sshd restart

# AD参加
# ドメイン参加権限のあるアカウントのパスワードが必要となる為、この初期設定を全自動化する場合は本処理内容が利用者には見えないところに用意する必要がありますのでご注意ください
echo ${AD_PASSWORD} |  realm join -U administrator@${DSNAME} ${DSNAME} --verbose
realm permit --groups ${ADMIN_GROUP}@${DSNAME} --verbose
realm permit --groups "Domain Admins@${DSNAME}" --verbose
realm list

# sudo設定
# ここではDomain Adminsと先に変数で指定したLinAdminsグループはsudoを許可しました
echo "%Domain\ Admins@${DSNAME} ALL=(ALL:ALL) ALL" > /etc/sudoers.d/realm
echo "%${ADMIN_GROUP}@${DSNAME} ALL=(ALL:ALL) ALL" >> /etc/sudoers.d/realm

それではログインしてみましょう。

bash-3.2$ ssh -l 'bob@simplead.local' xxx.xxx.xxx.xxx
bob@simplead.local@xxx.xxx.xxx.xxx's password: 
Last login: Sun Oct  4 23:47:07 2015 from localhost

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

https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/
[bob@simplead.local@ip-172-31-38-147 ~]$ id
uid=1134801602(bob@simplead.local) gid=1134800513(domain users@simplead.local) groups=1134800513(domain users@simplead.local),1134802102(winadmins@simplead.local),1134802106(linadmins@simplead.local)
[bob@simplead.local@ip-172-31-38-147 ~]$ sudo uname -n
[sudo] password for bob@simplead.local: 
ip-172-31-38-147

SSHログイン、sudoできるところまで確認することができました!

まとめ

前回のAWS Management Consoleへのログインと合わせて、OSログインも全てADアカウントでグループ管理するということを目標にやってみました。AWS Managment Consoleと合わせて、Windows/Linuxともに全てのID管理をADで管理することができれば、システム管理もしやすくなりますね。引き続き、セキュリティや認証周りについては、より良い方法を探って行きたいと思います。