AWS Managed Microsoft AD Hybrid EditionをAWS CLIで構築してみた

AWS Managed Microsoft AD Hybrid EditionをAWS CLIで構築してみた

2025.08.10

しばたです。

先日AWS Managed Microsoft AD Hybrid Editionを試した記事を書きました。

https://dev.classmethod.jp/articles/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でした。

CloudShell
# 検証時の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

実行結果はこんな感じです。

CloudShell
~ $ assessment_id=$(aws ds start-ad-assessment --assessment-configuration "$assessment_config" --query "AssessmentId" --output text)
~ $ echo $assessment_id
da-f080e03cf3f1e54465

how-to-create-aws-managed-microsoft-ad-hybrid-edition-by-cli-01

作成されたアセスメントの詳細はaws ds describe-ad-assessmentコマンドから確認できます。

aws ds describe-ad-assessment --assessment-id $assessment_id

実行結果はこんな感じ。
アセスメントの基本情報とAssessmentReports属性に各インスタンスごとのテスト状況・結果が出力されます。

CloudShell
# アセスメントの詳細情報を取得
~ $ 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が返されます。

CloudShell
~ $ directory_id=$(aws ds create-hybrid-ad --secret-arn $secret_arn --assessment-id $assessment_id --query DirectoryId --output text)
~ $ echo $directory_id
d-9567bfa54c

how-to-create-aws-managed-microsoft-ad-hybrid-edition-by-cli-02

ディレクトリ作成途中の詳細はaws ds describe-directoriesコマンドから確認できます。
ここは他のディレクトリと同様です。

Hybrid Edition独自の情報はHybridSettings属性にまとまっています。

CloudShell
# 作成途中のディレクトリ情報を取得
~ $ 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のディレクトリは更新により既存ディレクトリのインスタンスやシークレット情報を変更することができます。

how-to-create-aws-managed-microsoft-ad-hybrid-edition-by-cli-03

マネジメントコンソールのUIを見る分に、基本的にこの機能は障害時からの復旧を意図している様で実際に利用する機会は少なそうです。

how-to-create-aws-managed-microsoft-ad-hybrid-edition-by-cli-04

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が返されます。

CloudShell
~ $ 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"
}

そして、ディレクトリの更新中はメンテナンス扱いになります。

how-to-create-aws-managed-microsoft-ad-hybrid-edition-by-cli-05

今回の検証ではなぜか更新時に「AWS 管理者ユーザー不明テスト」が失敗して動作確認しきれませんでした...

how-to-create-aws-managed-microsoft-ad-hybrid-edition-by-cli-06
「AWS Managed Microsoft ADの管理者ユーザーを消せ」と言われるが消せるわけがない...

さすがにこれはAWS側の不具合としか言い様がない[1]のでどこかでフィードバックしておこうと思います。

ちなみに既存環境とまったく同じインスタンスを指定するとエラーになります。

CloudShell
# インスタンスが変更されない場合はエラー
~ $ 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
CloudShell
~ $ 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を扱う機会は少ないかもしれませんが、本記事の内容が誰かの役に立てば幸いです。

脚注
  1. 既存ドメインの更新なのでAWS側管理者ユーザーがいるのが正解に決まってるので... ↩︎

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.