Skip to content

sotoiwa/FSx-PoC-Environment

Repository files navigation

FSx-PoC-Environment

インフラ構成

Active Directory構成

関連ドキュメント

前提

  • デプロイは管理者権限を持つIAMユーザーの権限で行うため、IAMユーザーを用意して下さい。
  • あらかじめ、環境をデプロイするリージョンにキーペアを用意して下さい。このキーペアをEC2インスタンスに設定します。
  • 以下のソフウェアがインストール済みであることを確認して下さい。
    aws --version
    python3 --version
    node --version
    npm --version
    git --version
    jq --version
  • 上記環境を整えるのが面倒な場合はCloud9の利用がお奨めです。以下の手順を参考にCloud9をセットアップしてください。

CDKでのベースインフラストラクチャのデプロイ

CDKのインストール

CDKをグローバルにインストールします。

npm install -g aws-cdk

CDKプロジェクトのクローン

CDKプロジェクトをローカルにクローンします。

git clone https://github.com/sotoiwa/FSx-PoC-Environment.git
cd FSx-PoC-Environment

Pythonの準備

Pythonのvirtualenvを作成して有効化します。

python3 -m venv .env
source .env/bin/activate

必要なpipモジュールをインストールします。

pip install -r requirements.txt

環境に合わせたカスタマイズ

cdk.sample.jsoncdk.jsonとしてコピーし、パラメータをいい感じに設定して下さい。

cp cdk.sample.json cdk.json

デプロイ

CDKが使用するバケットを作成します。

cdk bootstrap

VPCと踏み台インスタンスをデプロイします。

cdk deploy *NetworkStack *BastionStack --require-approval never

resource.example.com(Self-managed AD)のセットアップ

ドメインコントローラー用のWindowsインスタンスと、このドメインの管理下に置くメンバー用のWindowsインスタンスをデプロイします。

cdk deploy *ResourceDomainStack --require-approval never

ドメインコントローラーの作成

resource.example.comのドメインを作成します。

踏み台インスタンス(BastionStack/Bastion)を経由してドメインコントローラーインスタンス(ResourceDomainStack/DomainController)にRDPし、PowerShellを起動します。 あるいは、セッションマネージャーでPowerShellを起動します。

ADドメインサービスの機能をインストールします。

Import-Module ServerManager
Get-WindowsFeature
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
Get-WindowsFeature

ドメインコントローラーに昇格させます。セーフモード用のパスワードを聞かれるので入力します。

(ドメインの機能レベル2012R2の場合)

#
# AD DS 配置用の Windows PowerShell スクリプト
#

Import-Module ADDSDeployment
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "Win2012R2" `
-DomainName "resource.example.com" `
-DomainNetbiosName "RESOURCE" `
-ForestMode "Win2012R2" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true

(ドメインの機能レベル2016の場合)

#
# AD DS 配置用の Windows PowerShell スクリプト
#

Import-Module ADDSDeployment
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "WinThreshold" `
-DomainName "resource.example.com" `
-DomainNetbiosName "RESOURCE" `
-ForestMode "WinThreshold" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true

自動的に再起動するのでしばらく待ちます。

メンバーのドメインへの参加

ドメインコントローラーのIPアドレスを確認します。

aws ec2 describe-instances | \
  jq -r '.Reservations[].Instances[] |
           select( .Tags ) | 
           select( [ select( .Tags[].Value | test("ResourceDomain") and test("DomainController") ) ] | length > 0 ) | 
           .PrivateIpAddress'

踏み台インスタンスを経由してメンバーインスタンス(ResourceDomainStack/Member)にRDPし、PowerShellを起動します。 あるいは、セッションマネージャーでPowerShellを起動します。

DNSサーバーを変更します。

Get-NetAdapter | Get-DnsClientServerAddress
Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses <ドメインコントローラのIPアドレス>
Get-NetAdapter | Get-DnsClientServerAddress

ADに参加します。ここで入力するパスワードはマネジメントコンソールでドメインコントローラーインスタンスの「接続」から確認します。

$user = 'resource.example.com\Administrator'
$password = ConvertTo-SecureString -AsPlainText '<パスワード>' -Force
$Credential = New-Object System.Management.Automation.PsCredential($user, $password)
Add-Computer -DomainName resource.example.com -Credential $Credential

変更を反映するためリブートします。

Restart-Computer -Force

メンバーインスタンスへのログイン確認

踏み台インスタンスから、メンバーインスタンスに[email protected]でRDPできることを確認します。 このユーザーのパスワードはドメインコントローラーのAdministratorユーザーのパスワードなので、マネジメントコンソールで確認できます。

japan.example.com(Self-managed AD)のセットアップ

ドメインコントローラー用のWindowsインスタンスをデプロイします。

cdk deploy *JapanDomainStack --require-approval never

ドメインコントローラーの作成

japan.example.comのドメインを作成します。

踏み台インスタンスを経由してドメインコントローラーインスタンス(JapanDomainStack/DomainController)にRDPし、PowerShellを起動します。 あるいは、セッションマネージャーでPowerShellを起動します。

ADドメインサービスの機能をインストールします。

Import-Module ServerManager
Get-WindowsFeature
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
Get-WindowsFeature

ドメインコントローラーに昇格させます。セーフモード用のパスワードを聞かれるので入力します。

(ドメインの機能レベル2012R2の場合)

#
# AD DS 配置用の Windows PowerShell スクリプト
#

Import-Module ADDSDeployment
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "Win2012R2" `
-DomainName "japan.example.com" `
-DomainNetbiosName "JAPAN" `
-ForestMode "Win2012R2" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true

(ドメインの機能レベル2016の場合)

#
# AD DS 配置用の Windows PowerShell スクリプト
#

Import-Module ADDSDeployment
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "WinThreshold" `
-DomainName "japan.example.com" `
-DomainNetbiosName "JAPAN" `
-ForestMode "WinThreshold" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true

自動的に再起動するのでしばらく待ちます。

ユーザーの作成

踏み台インスタンスを経由してドメインコントローラーインスタンスにRDPし、PowerShellを起動します。 あるいは、セッションマネージャーでPowerShellを起動します。

ユーザーを作成します。

Get-ADUser -Filter *
$user = 'user1'
$password = ConvertTo-SecureString -AsPlainText '<パスワード>' -Force
New-ADUser $user -AccountPassword $password -Enabled $true -PasswordNeverExpires $true
Get-ADUser -Filter *

Administratorsグループに追加します。

Get-ADGroup -Filter *
Add-ADGroupMember -Identity Administrators -Members $user
Get-ADGroupMember -Identity Administrators
Get-ADGroup -Filter *

ドメインコントローラーへのログイン確認

踏み台インスタンスから、ドメインコントローラーに[email protected]でRDPできることを確認します。

信頼関係の作成

RESOURCEドメインとJAPANドメインで双方向の信頼関係を結びます。

条件付きフォワーダーの作成

RESOURCEドメイン

resource.example.comのドメインコントローラーで以下の作業を実施します。

Get-DnsServerZone
Add-DnsServerConditionalForwarderZone `
    -Name "japan.example.com" `
    -MasterServers <JAPANのドメインコントローラーのアドレス> `
    -ReplicationScope "Forest"
Get-DnsServerZone

JAPANドメイン

japan.example.comのドメインコントローラーで以下の作業を実施します。

Get-DnsServerZone
Add-DnsServerConditionalForwarderZone `
    -Name "resource.example.com" `
    -MasterServers <RESOURCEのドメインコントローラーのアドレス> `
    -ReplicationScope "Forest"
Get-DnsServerZone

信頼関係の作成

この作業をPowerShellでやるのは難しいのでここはGUIを使います。

RESOURCEドメイン

resource.example.comのドメインコントローラーで以下の作業を実施します。

  1. サーバーマネージャーの右上のツールから「Active Directory ドメインと信頼関係」を開きます。

  2. 左のペインでドメイン名を右クリックしてプロパティを開きます。

  3. 信頼タブで「新しい信頼」を作成します。以下の選択肢がでない場合はしばらく待ってから作業を実施してください。

    項目 備考
    信頼の名前 japan.example.com
    信頼の種類 フォレストの信頼
    信頼の方向 双方向
    信頼を作成する対象 このドメインのみ
    出力方向の信頼認証レベル フォレスト全体の認証
    信頼パスワード (任意)
    出力方向の信頼を確認しますか? 確認しない
    入力方向の信頼を確認しますか? 確認しない

作成した信頼はPowerShellで確認できます。

Get-ADTrust -Filter *

JAPANドメイン

japan.example.comのドメインコントローラーで以下の作業を実施します。

  1. サーバーマネージャーの右上のツールから「Active Directory ドメインと信頼関係」を開きます。

  2. 左のペインでドメイン名を右クリックしてプロパティを開きます。

  3. 信頼タブで「新しい信頼」を作成します。以下の選択肢がでない場合はしばらく待ってみて下さい。

    項目 備考
    信頼の名前 resource.example.com
    信頼の種類 フォレストの信頼
    信頼の方向 双方向
    信頼を作成する対象 このドメインのみ
    出力方向の信頼認証レベル フォレスト全体の認証
    信頼パスワード (任意)
    出力方向の信頼を確認しますか? 確認しない
    入力方向の信頼を確認しますか? 確認しない

作成した信頼はPowerShellで確認できます。

Get-ADTrust -Filter *

メンバーインスタンスでのリモートデスクトップ接続の許可

AD環境であっても、メンバーインスタンスではAdministratorsグループやRemote Desktop Usersグループはローカルグループであり、マシンごとに異なるグループです。 メンバーインスタンスに[email protected]でRDPし、[email protected]のリモートデスクトップ接続を許可します。

  1. スタートボタンを右クリックして「システム」を選択します。
  2. 左のメニューで「リモートの設定」をクリックします。
  3. 「リモート」タブで「ユーザーの選択」をクリックし、[email protected]を追加します。見つからないときはしばらく待ってみて下さい。

メンバーインスタンスへのログイン確認

踏み台インスタンスから、メンバーインスタンスに[email protected]でRDPできることを確認します。

FSxのデプロイ

(ここは以下のようにCDKでもできるが、時間がかかるので、GUIを使った方がよいかも)

resource.example.comに接続するファイルシステムのデプロイにはドメンコントローラーのIPアドレスと、接続に使用するユーザーとパスワードが必要です。 cdk.context.jsonに記載します。本来は権限を絞ったユーザーで接続するべきですが、検証なのでAdministratorを使います。

FSxリソースをデプロイします(かなり時間がかかります)。

cdk deploy *ResourceDomainFSxStack --require-approval never

マウント確認

FSxのファイルシステムのDNS名を確認します。

aws fsx describe-file-systems | \
  jq -r '.FileSystems[] |
           select( .Tags ) | 
           select( [ select( .Tags[].Value | test("ResourceDomainFSxStack") ) ] | length > 0 ) | 
           .DNSName'

メンバーインスタンスに[email protected]でRDPし、FSxのファイルシステムにネットワークドライブを割り当てます。 ¥\の違い(Windows上では同じに見える)でエラーになっていたことがあったので注意。マネジメントコンソールで「Attach」ボタンを押してコマンドを取得した方が確実です。

net use z: \\<DNS名>\share

DFSの設定

JAPANのドメインコントローラーをDFS名前空間サーバーとして設定します。

DFSの構成に必要な機能をインストールします。

Import-Module ServerManager
Get-WindowsFeature
Install-WindowsFeature FS-DFS-Namespace, FS-DFS-Replication, RSAT-DFS-Mgmt-Con
Get-WindowsFeature

DFSルートを作ります。 名前空間サーバー上にある共有フォルダに対してNew-DfsnRootコマンドを実行します。

# 名前空間の作成
$DFSRootPath = '\\japan.example.com\Public'
$DFSRootTarget = 'C:\DFSRoots\Public'
$DFSRootSharedPath = "\\$(hostname)\Public"
# 共有フォルダを作成
mkdir $DFSRootTarget
New-SmbShare –Name 'Public' –Path $DFSRootTarget -FullAccess everyone
# DFSルート作成
New-DfsnRoot -Path $DFSRootPath -Type DomainV2 -TargetPath $DFSRootSharedPath

JAPANのドメインコントローラーにログインして確認します。

Amazon FSx CLIの実行

FSxのPowerShell用のエンドポイントを確認します。

aws fsx describe-file-systems | jq -r '.FileSystems[].WindowsConfiguration.RemoteAdministrationEndpoint'

RESOURCEのドメインコントローラーにAdministratorでログインし、PowerShellを実行します。

enter-pssession -ComputerName amznfsxjcdhtmu2.resource.example.com -ConfigurationName FsxRemoteAdmin -sessionoption (New-PSSessionOption -uiCulture "en-US")

クォータを有効にします。単位はバイトです。

Enable-FSxUserQuotas -Track -DefaultLimit 2000000 -DefaultWarningLimit 1000000
Enable-FSxUserQuotas -Enforce -DefaultLimit 4000000 -DefaultWarningLimit 3000000

設定を確認します。

Get-FSxUserQuotaSettings
[amznfsxjcdhtmu2.resource.example.com]: PS>Get-FSxUserQuotaSettings

DefaultWarningLimit DefaultLimit State
------------------- ------------ -----
            3000000      4000000 Enforce

[email protected]のクオータを設定します。

Set-FSxUserQuotas -Domain "resource.example.com" -Name "user1" -Limit 60000 -WarningLimit 40000
Set-FSxUserQuotas -Domain "resource.example.com" -Name "group1" -Limit 60000 -WarningLimit 40000
Set-FSxUserQuotas -Domain "japan.example.com" -Name "user1" -Limit 60000 -WarningLimit 40000

設定を確認します。

[amznfsxjcdhtmu2.resource.example.com]: PS>Get-FSxUserQuotaEntries


WarningLimit  : 40000
DiskSpaceUsed : 0
QuotaVolume   : Win32_LogicalDisk (DeviceID = "D:")
Limit         : 60000
Status        : OK
User          : Win32_Account (Name = "user1", Domain = "RESOURCE")

WarningLimit  : 40000
DiskSpaceUsed : 61440
QuotaVolume   : Win32_LogicalDisk (DeviceID = "D:")
Limit         : 60000
Status        : Exceeded
User          : Win32_Account (Name = "user1", Domain = "JAPAN")

WarningLimit  : 40000
DiskSpaceUsed : 0
QuotaVolume   : Win32_LogicalDisk (DeviceID = "D:")
Limit         : 60000
Status        : OK
User          : Win32_Account (Name = "group1", Domain = "RESOURCE")

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published