{DirectoryService}チュートリアル: AWS Managed Microsoft AD とセルフマネージド Active Directory ドメイン間で信頼関係を作成する

 

https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/ms_ad_tutorial_setup_trust.html
https://qiita.com/mksamba/items/a6e93bbd2e0bd80c9393
https://aws.amazon.com/jp/premiumsupport/knowledge-center/enable-active-directory-console-access/
https://aws.amazon.com/jp/blogs/news/how-to-access-the-aws-management-console-using-aws-microsoft-ad-and-your-on-premises-credentials/

https://tooljp.com/language/powershell/html/Windows-AD-domain-join-command.html
https://www.haruru29.net/blog/how-to-configure-dns-server-using-powershell/
https://qiita.com/satoshi_iwashita/items/aec397f8b210efd15666
https://arumumu.hatenablog.com/entry/create-foresttrust-with-powershell

 

前提:
デフォルトセキュリティグループ

インバウンド
172.31.0.0/16 全トラフィック許可
0.0.0.0/0 SSH許可
0.0.0.0/0 RDP許可


アウトバウンド
0.0.0.0/0 全トラフィック許可

 

AZは1Aを使用
VPCはデフォルトを使用


AWS Managed Microsoft ADドメイン:contoso-aws.com
オンプレADドメイン              :contoso-opr.com

AWS Managed Microsoft AD用サブネット
1A 172.31.48.0/20    contoso-aws-1a
1C 172.31.64.0/20    contoso-aws-1c

オンプレAD用サブネット
1A 172.31.80.0/20    contoso-opr-1a

 


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

-- 1.2 jqインストール
sudo yum -y install jq


-- 2. サブネット作成

aws ec2 create-subnet \
--availability-zone ap-northeast-1a \
--cidr-block 172.31.48.0/20 \
--vpc-id vpc-11111111111111111 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=contoso-aws-1a}]'


aws ec2 create-subnet \
--availability-zone ap-northeast-1c \
--cidr-block 172.31.64.0/20 \
--vpc-id vpc-11111111111111111 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=contoso-aws-1c}]'

aws ec2 create-subnet \
--availability-zone ap-northeast-1a \
--cidr-block 172.31.80.0/20 \
--vpc-id vpc-11111111111111111 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=contoso-opr-1a}]'


aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets | {SubnetId,Tags}'

 


-- 3. AWS Managed Microsoft ADの作成
-- 3.1 AWS Managed Microsoft ADの作成


aws ds create-microsoft-ad \
--name contoso-aws.com \
--password 'password' \
--vpc-settings '{
  "VpcId": "vpc-11111111111111111",
  "SubnetIds": ["subnet-22222222222222222", "subnet-33333333333333333"]
}' \
--edition Standard


aws ds describe-directories

 

時間がかかるので、EC2インスタンス作成などのできるところは先にすすめる

 

-- 3.2 AWS Managed Microsoft ADで自動生成されたセキュリティグループ※に下記ルールを追加する

※名前にディレクトリ IDが含まれる

インバウンド
172.31.0.0/16 全トラフィック許可

アウトバウンド
0.0.0.0/0 全トラフィック許可

 


-- 3.3 作業用EC2インスタンス作成

Windows_Server-2016-Japanese-Full-Base-2022.05.25
ami-01beeb30bc905d6a2
t3.medium (2vCPU 4GiB)


aws ec2 run-instances \
--image-id ami-01beeb30bc905d6a2 \
--instance-type t3.medium \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=contoso-aws}]' \
--subnet-id subnet-22222222222222222 \
--associate-public-ip-address

aws ec2 describe-instances

 


-- 3.4 ドメイン参加
作業用EC2インスタンスにAdministratorでログイン

DNSサーバをAWS Managed Microsoft ADのドメインコントローラのIPに変更

Get-NetIPInterface

Set-DnsClientServerAddress -InterfaceAlias "イーサネット 2" -ServerAddress "172.31.57.174","172.31.76.4"


$pass = ConvertTo-SecureString -AsPlainText -Force "password"

$cred = New-Object System.Management.Automation.PSCredential("contoso-aws.com\admin",$pass)

Add-Computer -DomainName "contoso-aws.com" -Credential $cred

Restart-Computer

 


-- 3.5 管理ツール(Active Directory 管理センター)インストール

作業用EC2インスタンスにcontoso-aws.com\adminでログイン

管理者としてPowershell起動

Install-WindowsFeature RSAT-ADDS

 

-- 3.6 ドメインユーザ作成

$pass = ConvertTo-SecureString -AsPlainText -Force "password"

New-ADUser -Name "aws-user" -Accountpassword $pass -Enabled $true -PasswordNeverExpires $true

Add-ADGroupMember -Identity "AWS Delegated Administrators" -Members "aws-user"

 

-- 4. オンプレADの作成
-- 4.1 ドメインコントローラ用EC2インスタンス作成

Windows_Server-2016-Japanese-Full-Base-2022.05.25
ami-01beeb30bc905d6a2
t3.medium (2vCPU 4GiB)

 

aws ec2 run-instances \
--image-id ami-01beeb30bc905d6a2 \
--instance-type t3.medium \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=contoso-opr}]' \
--subnet-id subnet-44444444444444444 \
--associate-public-ip-address


-- 4.2 オンプレAD作成

ドメインコントローラ用EC2インスタンスにAdministratorでログイン


Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools

$pass = ConvertTo-SecureString -AsPlainText -Force "password"

Install-ADDSForest -DomainName contoso-opr.com -SafeModeAdministratorPassword $pass -Force

 


-- 4.3 ドメインユーザ作成


ドメインコントローラ用EC2インスタンスにcontoso-opr.com\administratorでログイン

 

$pass = ConvertTo-SecureString -AsPlainText -Force "password"

New-ADUser -Name "opr-user" -Accountpassword $pass -Enabled $true -PasswordNeverExpires $true

Add-ADGroupMember -Identity "Administrators" -Members "opr-user"

 


-- 5. AWS Managed Microsoft AD と オンプレAD間で、信頼関係を設定
-- 5.1 条件付きフォワーダーの設定[オンプレADでの作業]

 


Add-DnsServerConditionalForwarderZone `
-Name "contoso-aws.com" `
-MasterServers 172.31.57.174,172.31.76.4 `
-ReplicationScope "Forest"

Get-DnsServerZone

 

-- 5.2 信頼関係の設定[オンプレADでの作業]

 

$TargetForestName = "contoso-aws.com"
$TrustPassword = "password"
$TrustDirection = "Bidirectional"
$Forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$Forest.CreateLocalSideOfTrustRelationship($TargetForestName,$TrustDirection,$TrustPassword)

Get-ADTrust -Filter * | Format-Table -Property Direction,Name,ObjectClass,TrustAttributes -AutoSize


-- 5.3 信頼関係の設定[AWS Managed Microsoft ADでの作業]

aws ds create-trust \
--directory-id d-5555555555 \
--remote-domain-name contoso-opr.com \
--trust-password 'password' \
--trust-direction Two-Way \
--trust-type Forest \
--conditional-forwarder-ip-addrs "172.31.85.123" \
--selective-auth Disabled

aws ds describe-trusts

aws ds verify-trust \
--trust-id t-6666666666

 

-- 6. AWSマネージメントコンソールへのログオン時の認証に、AWS Managed Microsoft ADを使用するように設定


-- 6.1 AWS Managed Microsoft ADの アクセス URL を作成
aws ds create-alias \
--directory-id d-5555555555 \
--alias xxxxxxxxxxxx


-- 6.2 IAMロール作成
vim role01.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "ds.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

aws iam create-role \
--role-name role01 \
--assume-role-policy-document file://role01.json

-- 6.3 ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess \
--role-name role01

 

 

-- 6.4 AWS Managed Microsoft AD の AWS マネジメントコンソールアクセスを有効化

 

-- 6.5 Active Directory ユーザーまたはグループを IAM ロールに割り当て

しばらく待つと
コンソールアクセスの委任にIAMロールが表示される


contoso-aws.com\aws-user
contoso-opr.com\opr-user

 


★原因不明のエラー発生
ロールへのオンプレのユーザ追加時下記エラー

リクエストに問題があります。以下の詳細を参照してください。
Directory Error: InvalidTokenException

オンプレでもグループなら追加できる。
その後、このエラーは発生しなくなった。

 


-- 6.6 オンプレADのユーザで、AWSマネージメントコンソールにログインできることを確認


https://xxxxxxxxxxxx.awsapps.com/console


-- 7. クリーンアップ

-- Active Directory ユーザーまたはグループを IAM ロールから割り当て解除


-- AWS Managed Microsoft AD の AWS マネジメントコンソールアクセスを無効化


-- AWS Managed Microsoft ADの削除


aws ds describe-directories

aws ds delete-directory \
--directory-id d-5555555555

 

-- IAMロールの削除
aws iam list-roles | grep role01

aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess

aws iam delete-role --role-name role01

 


-- EC2インスタンスの削除

aws ec2 describe-instances

aws ec2 terminate-instances --instance-ids i-77777777777777777
aws ec2 terminate-instances --instance-ids i-88888888888888888

 

-- サブネットの削除

EC2削除完了後に実施

aws ec2 describe-subnets
aws ec2 describe-subnets | jq -r '.Subnets | {SubnetId,Tags}'

aws ec2  delete-subnet \
--subnet-id subnet-22222222222222222

aws ec2  delete-subnet \
--subnet-id subnet-33333333333333333

aws ec2  delete-subnet \
--subnet-id subnet-44444444444444444