見出し画像

EC2 はディレクトリと結合する

GW ですね
わが家は世間様より 1 日早く GW 休暇を開始し 愛猫シティボーイこはるくんのお兜さんを飾りました

時間もたっぷりあるので 検証で遊んでみます

AWS Managed Microsoft AD ディレクトリへの EC2 インスタンスの結合 (いわゆるドメイン参加) をユーザーデータスクリプトでやってみます

AWS Managed Microsoft AD ディレクトリはフツーに Active Directory なので フツーに DNS サーバーを設定して 参加するドメイン名を指定して コンピューターを AD ドメインに参加させることができます

コンピューターの AD ドメイン参加は PowerShell でもできます
これを利用して EC2 インスタンス起動時にディレクトリに結合させちゃいます


コンピューターの AD ドメイン参加

スタンドアロン コンピューターを AD ドメインに参加させるには Add-Computer コマンドレットを使用します
使い方はこぉ

Add-Computer -DomainName <ドメイン名>
             -Credential <ドメイン管理者情報>

-Credential にはドメイン管理者情報を PSCredential 型で指定します

PSCredential なるオブジェクトは ユーザー名やパスワードなどのセキュリティ資格情報です
Get-Credential コマンドレットで取得できます

> Get-Credential -credential shou

UserName                     Password
--------                     --------
shou     System.Security.SecureString

この資格情報を変数などに保存して PowerShell スクリプトなどでセキュリティ操作に使用します
しかし このコマンドレットでは情報の取得のためにパスワードの入力が必要です

今回は EC2 起動時に自動的に AD 参加させたいので 非対話型でセキュリティ資格情報をセットしたいわけです
このような場合 パスワードとユーザー名を System.Management.Automation.PSCredential() メソッドに渡します

参考

PowerShell 関数への資格情報サポートの追加
https://learn.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/add-credentials-to-powershell-functions?view=powershell-7.3

パスワードは平文ではなく セキュリティで保護された文字列に変換します
ConvertTo-SecureString コマンドレットでパスワードをセキュリティで保護された文字列に変換できます

ConvertTo-SecureString "<パスワード>" -AsPlainText -Force

このセキュリティで保護されたパスワードとユーザー名を System.Management.Automation.PSCredential() メソッドに渡して Add-Computer コマンドレット で使用するドメイン管理者の認証情報を作成します

$password = ConvertTo-SecureString "<パスワード>" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ("<ドメインの NetBios名>\<ドメイン管理者>", $password)

コレを Add-Computer コマンドレットに渡してやります

Add-Computer -DomainName ad.net -Credential $Cred -Restart

最後に -Restart を付けてやると自動的に再起動します
ドメイン参加したときは再起動が必要ですからね

DNS サーバーの指定


ドメイン参加のためには 参加させるコンピューターの DNS サーバーの IP アドレスを設定する必要があります

DNS サーバーの設定は Set-DnsClientServerAddress コマンドレットを使います

Set-DnsClientServerAddress -InterfaceAlias "<ネットワークインターフェースのエイリアス名>" -ServerAddress "<DNS サーバーの IP>"

DNS サーバーが複数ある場合はカンマ (,) で区切って指定します

Set-DnsClientServerAddress -InterfaceAlias "<ネットワークインターフェースのエイリアス名>" -ServerAddress "<DNS サーバーの IP #1>", "<DNS サーバーの IP #2>"

ユーザーデータスクリプトで EC2 インスタンスをディレクトリ結合!


ユーザーデータスクリプトは EC2 インスタンス起動時に実行するスクリプトです
コレを利用して EC2 インスタンスを起動時に AWS Managed Microsoft AD ディレクトリに結合させちゃいます

ユーザーデータスクリプトを PowerShell で書くときは以下の形式になります

<powershell>
PowerShell コマンド
</powershell>

AD ドメイン参加させるユーザーデータスクリプトは こうなります

<powershell>
Set-DnsClientServerAddress -InterfaceAlias "<ネットワークインターフェースのエイリアス名>" -ServerAddress "<DNS アドレス #1>", "<DNS アドレス #2>"
$password = ConvertTo-SecureString "<admin のパスワード>" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ( "<ディレクトリの NetBios名>\admin", $password )
Add-Computer -DomainName ad.net -Credential $Cred -Restart
</powershell>

DNS アドレスやディレクトリの NetBios名は Directory Service コンソールのディレクトリの詳細で確認できます

ネットワークインターフェースのエイリアス名はコレです

ディレクトリ作成時に作成されるディレクトリ管理者は admin ですが 他にディレクトリに参加させる権限を持つユーザーがいればそのヒトを使うこともできます

EC2 インスタンス起動!


では EC2 インスタンスを起動します

ユーザーデータスクリプトはここの [高度な詳細] を展開します

下の方に [ユーザーデータ] があります
ここに先ほどのスクリプトを入力します

<powershell>
Set-DnsClientServerAddress -InterfaceAlias "<ネットワークインターフェースのエイリアス名>" -ServerAddress "<DNS アドレス #1>", "<DNS アドレス #2>"
$password = ConvertTo-SecureString "<admin のパスワード>" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ( "<ディレクトリの NetBios名>\admin", $password )
Add-Computer -DomainName ad.net -Credential $Cred -Restart
</powershell>

EC2 インスタンスが起動すると Domain はちゃんとディレクトリのドメインになっています

DNS サーバーも設定できていますね

既存の EC2 インスタンスをディレクトリに結合させる時も この PowerShell コマンドでやっちゃえば簡単です

さて 実はディレクトリサービスに EC2 インスタンスを結合する場合 こんなところに設定があったりします

AWS Systems Manager を使用してディレクトリに EC2 インスタンスを結合することもできちゃうのです

こちらの設定は また!


この記事が気に入ったらサポートをしてみませんか?