AWS Managed Microsoft AD Hybrid EditionをAWS CLIで構築してみた
しばたです。
先日AWS Managed Microsoft AD Hybrid Editionを試した記事を書きました。
追加検証のために再度環境を作りなおす必要があり、今度はAWS CLIを使って構築してみたのでその結果を共有したいと思います。
AWS CLIでの構築方法
AWS Managed Microsoft AD Hybrid Editionに関する各種機能はAWS CLI Ver.2.27.63からサポートされています。
AWS Directory Service用のaws dsコマンドにアセスメントおよびディレクトリに対する各種操作が増えています。
今回はAWS Cloud Shellからアセスメントの実施とディレクトリの作成を行っていきます。
AWS CLIのバージョンはVer.2.28.2でした。
# 検証時のAWS CloudShell上のAWS CLIのバージョン
~ $ aws --version
aws-cli/2.28.2 Python/3.13.4 Linux/6.1.144-170.251.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
1. アセスメントの作成
アセスメントの作成はaws ds start-ad-assessmentコマンドで行います。
--assessment-configuration
パラメーターに各種指定項目をJSONにまとめた形で引き渡してやればOKです。
コマンドを実行するとアセスメントIDが返却されます。
# assessment-configuration パラメーターに既存ドメインの情報を設定してやる
assessment_config=$(cat << EOF
{
"CustomerDnsIps": ["xx.xx.xx.xx", "yy.yy.yy.yy"],
"DnsName": "corp.contoso.com",
"VpcSettings": {
"VpcId": "vpc-xxxxxxxxxxxxxxxxx",
"SubnetIds": ["subnet-xxxxxxxxxxxxxxxxx", "subnet-xxxxxxxxxxxxxxxxx"]
},
"InstanceIds": ["i-xxxxxxxxxxxxxxxxx", "i-yyyyyyyyyyyyyyyyy"]
}
EOF
)
assessment_id=$(aws ds start-ad-assessment --assessment-configuration "$assessment_config" --query "AssessmentId" --output text)
echo $assessment_id
実行結果はこんな感じです。
~ $ assessment_id=$(aws ds start-ad-assessment --assessment-configuration "$assessment_config" --query "AssessmentId" --output text)
~ $ echo $assessment_id
da-f080e03cf3f1e54465
作成されたアセスメントの詳細はaws ds describe-ad-assessmentコマンドから確認できます。
aws ds describe-ad-assessment --assessment-id $assessment_id
実行結果はこんな感じ。
アセスメントの基本情報とAssessmentReports
属性に各インスタンスごとのテスト状況・結果が出力されます。
# アセスメントの詳細情報を取得
~ $ aws ds describe-ad-assessment --assessment-id $assessment_id
{
"Assessment": {
"AssessmentId": "da-f080e03cf3f1e54465",
"DnsName": "corp.contoso.com",
"StartTime": "2025-08-10T03:28:28.796000+00:00",
"LastUpdateDateTime": "2025-08-10T03:30:01.410000+00:00",
"Status": "IN_PROGRESS",
"CustomerDnsIps": [
"xx.xx.xx.xx",
"yy.yy.yy.yy"
],
"VpcId": "vpc-xxxxxxxxxxxxxxxxx",
"SubnetIds": [
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-xxxxxxxxxxxxxxxxx"
],
"SelfManagedInstanceIds": [
"i-xxxxxxxxxxxxxxxxx",
"i-yyyyyyyyyyyyyyyyy"
],
"ReportType": "CUSTOMER",
"Version": "v1"
},
"AssessmentReports": [
{
"DomainControllerIp": "xx.xx.xx.xx",
"Validations": [
{
"Category": "preValidationTests",
"Name": "testDnsIpMatch",
"Status": "SUCCESS",
"StartTime": "2025-08-10T03:29:30.005000+00:00",
"LastUpdateDateTime": "2025-08-10T03:30:00.804000+00:00"
},
{
"Category": "preValidationTests",
"Name": "testValidDC",
"Status": "IN_PROGRESS",
"StartTime": "2025-08-10T03:30:01.307000+00:00",
"LastUpdateDateTime": "2025-08-10T03:30:01.307000+00:00"
},
# ・・・省略・・・
{
"Category": "domainTests",
"Name": "testAwsDcNotFsmoOwner",
"Status": "SKIPPED",
"LastUpdateDateTime": "2025-08-10T03:28:29.343000+00:00"
},
{
"Category": "domainTests",
"Name": "testDcDiag",
"Status": "PENDING",
"LastUpdateDateTime": "2025-08-10T03:28:29.343000+00:00"
}
]
}
]
}
2. AWS Managed Microsoft AD Hybrid Editionの作成
AWS Managed Microsoft AD Hybrid Editionディレクトリの作成は専用のaws ds create-hybrid-adコマンドから行います。
アセスメントの指定があるのでaws ds create-microsoft-adコマンドとは別に分けた様です。
このコマンドでは--secret-arn
パラメーターにドメイン管理者の認証情報を保存したSecrets ManagerシークレットのARN、--assessment-id
パラメーターに事前に実施したアセスメントのIDを指定してやります。
# Secrets ManagerシークレットARNの取得
secret_arn=$(aws secretsmanager describe-secret --secret-id "my-aws-managed-microsoft-ad-hybrid-admin" --query "ARN" --output text)
# Hybrid Editionディレクトリの作成
directory_id=$(aws ds create-hybrid-ad --secret-arn $secret_arn --assessment-id $assessment_id --query DirectoryId --output text)
echo $directory_id
実行結果はこんな感じになり、直ちにディレクトリIDが返されます。
~ $ directory_id=$(aws ds create-hybrid-ad --secret-arn $secret_arn --assessment-id $assessment_id --query DirectoryId --output text)
~ $ echo $directory_id
d-9567bfa54c
ディレクトリ作成途中の詳細はaws ds describe-directoriesコマンドから確認できます。
ここは他のディレクトリと同様です。
Hybrid Edition独自の情報はHybridSettings
属性にまとまっています。
# 作成途中のディレクトリ情報を取得
~ $ aws ds describe-directories --directory-ids $directory_id
{
"DirectoryDescriptions": [
{
"DirectoryId": "d-9567bfa54c",
"Name": "corp.contoso.com",
"ShortName": "corp",
"Size": "Large",
"Edition": "Hybrid",
"Alias": "d-9567bfa54c",
"AccessUrl": "d-9567bfa54c.awsapps.com",
"DnsIpAddrs": [],
"Stage": "Creating",
"LaunchTime": "2025-08-10T03:58:24.548000+00:00",
"StageLastUpdatedDateTime": "2025-08-10T03:58:28.911000+00:00",
"Type": "MicrosoftAD",
"VpcSettings": {
"VpcId": "vpc-xxxxxxxxxxxxxxxxx",
"SubnetIds": [
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-xxxxxxxxxxxxxxxxx"
],
"SecurityGroupId": "sg-xxxxxxxxxxxxxxxxx",
"AvailabilityZones": [
"ap-northeast-1a",
"ap-northeast-1c"
]
},
"SsoEnabled": false,
"DesiredNumberOfDomainControllers": 2,
"RegionsInfo": {
"PrimaryRegion": "ap-northeast-1",
"AdditionalRegions": []
},
"OsVersion": "SERVER_2019",
"HybridSettings": {
"SelfManagedDnsIpAddrs": [
"xx.xx.xx.xx",
"yy.yy.yy.yy"
],
"SelfManagedInstanceIds": [
"i-xxxxxxxxxxxxxxxxx",
"i-yyyyyyyyyyyyyyyyy"
]
}
}
]
}
3. Hybrid Editionディレクトリの更新
Hybrid Editionのディレクトリは更新により既存ディレクトリのインスタンスやシークレット情報を変更することができます。
マネジメントコンソールのUIを見る分に、基本的にこの機能は障害時からの復旧を意図している様で実際に利用する機会は少なそうです。
Hybrid Editionディレクトリの更新はaws ds update-hybrid-adコマンドから行えます。
このコマンドでは--hybrid-administrator-account-update
パラメーターにシークレットのARNを、--self-managed-instances-settings
に既存ドメイン環境のインスタンス情報を指定します。
secret_arn=$(aws secretsmanager describe-secret --secret-id "my-aws-managed-microsoft-ad-hybrid-admin" --query "ARN" --output text)
update_config="{\"SecretArn\": \"$secret_arn\" }"
instance_settings=$(cat << EOF
{
"CustomerDnsIps": ["yy.yy.yy.yy", "zz.zz.zz.zz"],
"InstanceIds": ["i-yyyyyyyyyyyyyyy", "i-zzzzzzzzzzzzzzz"]
}
EOF
)
aws ds update-hybrid-ad --directory-id $directory_id \
--hybrid-administrator-account-update "$update_config" \
--self-managed-instances-settings "$instance_settings"
コマンド実行後は対象のディレクトリIDと新たに実施されるアセスメントIDが返されます。
~ $ aws ds update-hybrid-ad --directory-id $directory_id \
> --hybrid-administrator-account-update "$update_config" \
> --self-managed-instances-settings "$instance_settings"
{
"DirectoryId": "d-9567bfa54c",
"AssessmentId": "da-f0820de01a856bc401"
}
そして、ディレクトリの更新中はメンテナンス扱いになります。
今回の検証ではなぜか更新時に「AWS 管理者ユーザー不明テスト」が失敗して動作確認しきれませんでした...
「AWS Managed Microsoft ADの管理者ユーザーを消せ」と言われるが消せるわけがない...
さすがにこれはAWS側の不具合としか言い様がない[1]のでどこかでフィードバックしておこうと思います。
ちなみに既存環境とまったく同じインスタンスを指定するとエラーになります。
# インスタンスが変更されない場合はエラー
~ $ aws ds update-hybrid-ad --directory-id $directory_id \
> --hybrid-administrator-account-update "$update_config" \
> --self-managed-instances-settings "$instance_settings"
An error occurred (InvalidParameterException) when calling the UpdateHybridAD operation: Instance ID [i-xxxxxxxxxxxxx, i-yyyyyyyyyyyyy], DNS IP pairs [xx.xx.xx.xx, yy.yy.yy.yy] already exists on directory d-9567bfa54c. :
4. Hybrid Editionディレクトリの削除
ディレクトリの削除は他エディションと同様にaws ds delete-directoryで行います。
ディレクトリと紐づいているアセスメントも同時に削除されます。
aws ds delete-directory --directory-id $directory_id
ディレクトリと紐づいていないアセスメントを削除するにはaws ds delete-ad-assessmentコマンドを使います。
--assessment-id
パラメーターに削除したいアセスメントを指定するだけです。
# ディレクトリと紐づいていないアセスメントを削除
assessment_id=$(aws ds delete-ad-assessment --assessment-id $assessment_id --query "AssessmentId" --output text)
echo $assessment_id
~ $ assessment_id=$(aws ds delete-ad-assessment --assessment-id $assessment_id --query "AssessmentId" --output text)
~ $ echo $assessment_id
da-f080e03cf3f1e54465
最後に
以上となります。
AWS Managed Microsoft AD Hybrid Editionを扱う機会は少ないかもしれませんが、本記事の内容が誰かの役に立てば幸いです。
既存ドメインの更新なのでAWS側管理者ユーザーがいるのが正解に決まってるので... ↩︎