PowerShellでAD構築のハンズオン


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

はじめに

以前のブログではEC2(Windows)でADサーバ構築のハンズオンとして、手打ちでADサーバを構築しましたが、最近学んでいるPowerShellを利用して構築していこうと思います。

ざっくりActiveDirectory(アクティブディレクトリ)

ActiveDirectory(以下、AD)とはWindowsServerの機能の一つです。
ネットワーク上のコンピュータや周辺機器、ユーザーアカウントなどの情報を一元管理する機能で、管理者はネットワーク上の資源や利用者を効率的に管理できます。資源や利用者をグループで管理し、それぞれのグループをを組み合わせて大規模な組織やネットワークを管理することも可能です。

【参考】
IT用語辞典


構成図


ハンズオン

構築のながれ

1.EC2(AD)インスタンス構築(マネジメントコンソール)

2.EC2(AD)インスタンスの設定(リモートデスクトップ接続)


1. EC2(AD)インスタンス構築(マネジメントコンソール)

1.1.EC2(AD)インスタンスをセットアップ

Amazon Web Services (AWS) アカウントにログインし、下記設定値のEC2インスタンスを作成。

項目 設定値
インスタンスタイプ t3.micro
AMI ID ami-0f6816cbdffbdde6c(Windows)
サブネット パブリックサブネット
パブリック IP の自動割り当て

1.2. セキュリティグループの設定

インスタンス作成時にセキュリティグループを設定し、プライベートサブネットからのアクセスのみを開放。

【インバウンド】

タイプ プロトコル ポート範囲 ソース CIDR
RDP 3389 TCP マイIP 【自身のアクセスIP】

【アウトバウンド】

タイプ プロトコル ポート範囲 ソース CIDR
すべてのトラフィック すべて すべて カスタム 0.0.0.0/0

1.3. インスタンスを起動

上記設定後、『インスタンスを起動』を押下


2.EC2(AD)インスタンスの設定(リモートデスクトップ接続)

2.1.デスクトップにADフォルダを作成し config.txtの配置

テキストの内容は今回設定するADに必要な情報を記載します

パラメータ変数名 備考
DomainName tetutetu.com ADのDNS名
DomainNetbiosName tetutetu NetBIOS名
Password P@ssw0rd 管理者・ユーザパスワード

【「config.txt」の中身】

DomainDNSName=tetutetu.com
DomainNetbiosName=tetutetu
Password=P@ssw0rd

2.2.『1-ADDeployment.ps1』』 作成

2.2.1.下記スクリプトをコピー&ペーストして、PowerShellで実行

ActiveDirectoryドメインサービス(AD DS)をインストールして、新規ADフォレストを作成するスクリプト

【「1-ADDeployment.ps1」の中身】

$config = Get-Content -Path "config.txt" | ConvertFrom-StringData

Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
Import-Module ADDSDeployment

$params = @{
    DomainName        = $config.DomainDNSName;
    DomainNetbiosName = $config.DomainNetbiosName;
    ForestMode        = 'WinThreshold';
    DomainMode        = 'WinThreshold';
    DatabasePath      = 'C:\Windows\NTDS';
    LogPath           = 'C:\Windows\NTDS';
    SysvolPath        = 'C:\Windows\SYSVOL';
    SafeModeAdministratorPassword = (ConvertTo-SecureString $config.Password -AsPlainText -Force);
    InstallDns           = $true;
    CreateDnsDelegation  = $false;
    NoRebootOnCompletion = $false;
    Confirm = $false;
    }
Install-ADDSForest @params

2.2.2.再起動

問題なく処理が終わると、再起動を問われるので再起動する

2.2.3.ActiveDirectoryドメインサービス(AD DS)をインストール、新規ADフォレストが構築されていることを確認する

・[Windows] + [R] で 「ファイル名を指定して実行」を起動する
・[dsa.msc]を入力して 「Active Directory ユーザーとコンピューター」を起動する

2.3.『2-AddADConectorUser.ps1』作成

2.3.1.下記スクリプトをコピー&ペーストして、PowerShellで実行

新しいActive Directoryユーザーを作成し、そのユーザーをドメイン管理者グループに追加するスクリプト

$config = Get-Content -Path "config.txt" | ConvertFrom-StringData

$params = @{
    Name                 = 'adconnector';
    UserPrincipalName    = "adconnector@$($config.DomainDNSName)";
    Description          = 'AWS AD Connector service user';
    AccountPassword      = ConvertTo-SecureString -AsPlainText $config.Password -Force;
    Enabled              = $true;
    PasswordNeverExpires = $true;
    }
New-ADUser @params
Add-ADGroupMember -Identity 'Domain Admins' -Members 'adconnector'

2.3.2.adconnectorが作成されていることを確認する

・[Windows] + [R] で 「ファイル名を指定して実行」を起動する
・[dsa.msc]を入力して 「Active Directory ユーザーとコンピューター」を起動する
・手順 2.2.3.で画面を開きっぱなしにして、切り替えても表示されないため、一度画面を閉じて再度開くと反映される

2.4.『3-AddTestUsers.ps1』作成

2.4.1.下記スクリプトをコピー&ペーストして、PowerShellで実行

Active Directoryの組織単位(OU)を作成し、そのOUにテストユーザー(5人)を追加するスクリプト

$config = Get-Content -Path "config.txt" | ConvertFrom-StringData

New-ADOrganizationalUnit -Name 'TestUsers'
$ou = Get-ADOrganizationalUnit -Filter 'Name -eq "TestUsers"'
@(
    [PSCustomObject]@{ Name='user01'; PlainPassword = $config.Password; },
    [PSCustomObject]@{ Name='user02'; PlainPassword = $config.Password; },
    [PSCustomObject]@{ Name='user03'; PlainPassword = $config.Password; },
    [PSCustomObject]@{ Name='user04'; PlainPassword = $config.Password; },
    [PSCustomObject]@{ Name='user05'; PlainPassword = $config.Password; }
) | ForEach-Object {
    $params = @{
        Name                 = $_.Name;
        UserPrincipalName    = ("{0}@$($config.DomainDNSName)" -f $_.Name);
        Description          = ("Test user {0}" -f $_.Name);
        AccountPassword      = ConvertTo-SecureString $_.PlainPassword -AsPlainText -Force;
        PasswordNeverExpires = $true;
        Path = $ou.DistinguishedName;
        Enabled = $true;
     }
     New-ADUser @Params
}

2.4.2.adconnectorが作成されていることを確認する

・[Windows] + [R] で 「ファイル名を指定して実行」を起動する
・[dsa.msc]を入力して 「Active Directory ユーザーとコンピューター」を起動する
・手順 2.3.3.で画面を開きっぱなしにして、切り替えても表示されないため、一度画面を閉じて再度開くと反映される


さいごに

毎回手打ちは、しんどかったので少し楽になりました。
CFnを構築した際に自動化までできればよいのですが、そういった大きな改善にむけての第一歩目という位置付けの構築でした。

Last modified: 2023-05-05

Author