AWS Managed Microsoft ADのユーザー・グループ操作をAWS CLIから試してみた

AWS Managed Microsoft ADのユーザー・グループ操作をAWS CLIから試してみた

Clock Icon2024.12.13

しばたです。

9月中旬ごろからAWS Managed Microsoft ADで管理するドメインユーザーとグループの操作をAWS上で行える様になりました。
基本的な内容については弊社まるとによる次の記事をご覧ください。

https://dev.classmethod.jp/articles/aws-directory-service-for-managed-microsoft-ad-direct-crud/

本記事ではこの操作をAWS CLIから試してみました。

AWS Directory Service Data API

AWS Managed Microsoft ADのユーザーとグループの操作はAWS Directory Service Data APIと言う形で通常のAWS Directory Service APIとは別れた形で定義されています。

サービスのIDと名前空間はds-dataとなり、AWS CLIもaws ds-dataコマンドを使う形になっています。

現時点ではAWS Managed Microsoft AD専用のAPIですが、将来的には他のディレクトリもサポートしたいのかもしれません。

試してみた

ここからは実際に動作確認していきます。

0. 検証環境

今回は私の検証用AWSアカウントにStandardエディションのディレクトリを用意しました。
ドメイン名はcorp.contoso.comにしています。

how-to-use-aws-cli-ds-data-commands-01

ディレクトリの構築手順は割愛します。

各種操作はAWS CloudShellから行います。
本日時点でのAWS CLIのバージョンはVer.2.22.12でした。

CloudShell
$ aws --version 
aws-cli/2.22.12 Python/3.12.6 Linux/6.1.115-126.197.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023

1. グループ管理機能の有効・無効化

最初にグループ管理機能を有効にする必要があり、aws ds enable-directory-data-accessコマンドで可能です。
無効にする場合はaws ds disable-directory-data-accessコマンドを使います。
現在の状態を取得するにはaws ds describe-directory-data-accessを使います。

# グループ管理機能の状態を取得する
aws ds describe-directory-data-access --directory-id "ディレクトリID"

# グループ管理機能を有効にする
aws ds enable-directory-data-access --directory-id "ディレクトリID"

# グループ管理機能を無効にする
aws ds disable-directory-data-access --directory-id "ディレクトリID"

これらのコマンドはAWS Directory Service API側の機能のためaws dsコマンドとなっています。

今回作成したcorp.contoso.comドメイン(ディレクトリID : d-95674af4a8)で動作確認すると以下の様になります。

CloudShell
# デフォルトではグループ管理は無効 (Disabled)
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
    "DataAccessStatus": "Disabled"
}

# グループ管理機能の有効化は直ちに終了し、状態が Enabling となる
$ aws ds enable-directory-data-access --directory-id d-95674af4a8
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
    "DataAccessStatus": "Enabling"
}

# しばらく待つと状態が Enabled となり完了する
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
    "DataAccessStatus": "Enabled"
}

# グループ管理機能の無効化は直ちに終了し、状態が Disabling となる
$ aws ds disable-directory-data-access --directory-id d-95674af4a8
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
    "DataAccessStatus": "Disabling"
}

# 最終的に Disabled に戻って完了する
$ aws ds describe-directory-data-access --directory-id d-95674af4a8
{
    "DataAccessStatus": "Disabled"
}

2. グループ操作

グループの操作は以下のコマンドで行います。

  • aws ds-data create-group
  • aws ds-data delete-group
  • aws ds-data describe-group
  • aws ds-data list-groups
  • aws ds-data search-groups
  • aws ds-data update-group

基本的に名前通りの操作が可能です。

グループの作成はaws ds-data create-groupコマンドで行い、最低限sAMAccountNameを指定する必要があります。
大抵の場合においてsAMAccountNameは単純にグループ名と考えて大丈夫です。

その他にグループのスコープとタイプを指定できますが、グループの階層は1階層のみとなっています。

aws ds-data create-group --directory-id "ディレクトリID" \
    --sam-account-name "グループ名(sAMAccountName)" \
    --group-scope "DomainLocal or Global or Universal or BuiltinLocal" \
    --group-type "Distribution or Security"

例えばMyGroupと言う名前のグローバルセキュリティグループを作成する場合は次の様になります。

CloudShell
$ aws ds-data create-group --directory-id d-95674af4a8 \
>     --sam-account-name "MyGroup" \
>     --group-scope "Global" \
>     --group-type "Security"
{
    "DirectoryId": "d-95674af4a8",
    "SAMAccountName": "MyGroup",
    "SID": "S-1-5-21-2658377969-2508436387-3075584147-1168"
}

how-to-use-aws-cli-ds-data-commands-02

このコマンドでグループが作成されるのは既定のUsers OU直下となります。

作成したグループ情報はaws ds-data describe-groupコマンドで取得できます。
このコマンドでは識別名の取得も可能でした。

CloudShell
$ aws ds-data describe-group --directory-id d-95674af4a8 --sam-account-name "MyGroup"
{
    "DirectoryId": "d-95674af4a8",
    "DistinguishedName": "CN=MyGroup,OU=Users,OU=corp,DC=corp,DC=contoso,DC=com",
    "GroupScope": "Global",
    "GroupType": "Security",
    "Realm": "corp.contoso.com",
    "SAMAccountName": "MyGroup",
    "SID": "S-1-5-21-2658377969-2508436387-3075584147-1168"
}

aws ds-data update-groupコマンドで既存グループのスコープとタイプや各種属性を更新できます。
各種属性は--other-attributeパラメーターでMap形式で記述します。
例えばDescriptionを変えたい場合は以下の様なコマンドを実行します。

CloudShell
$ aws ds-data update-group --directory-id d-95674af4a8 \
>     --sam-account-name "MyGroup" \
>     --other-attributes "Description={S=テスト用グループ}

how-to-use-aws-cli-ds-data-commands-03

変更可能な属性は以下のドキュメントから確認できます。

グループの検索はaws ds-data list-groupsaws ds-data search-groupsコマンドから可能です。
これらのコマンドでは既存のグループも検索可能でした。

CloudShell
# BuiltinLocalグループも検索できる
$ aws ds-data list-groups --directory-id d-95674af4a8 --query "Groups[?SAMAccountName == 'Administrators']"
[
    {
        "GroupScope": "BuiltinLocal",
        "GroupType": "Security",
        "SAMAccountName": "Administrators",
        "SID": "S-1-5-32-544"
    }
]

# 特定属性の値を検索可能
$ aws ds-data search-groups --directory-id d-95674af4a8 --search-attributes sAMAccountName --search-string Administrators
{
    "Groups": [
        {
            "GroupScope": "BuiltinLocal",
            "GroupType": "Security",
            "SAMAccountName": "Administrators",
            "SID": "S-1-5-32-544"
        }
    ],
    "DirectoryId": "d-95674af4a8",
    "Realm": "corp.contoso.com"
}

最後にグループの削除はaws ds-data delete-groupで可能です。

CloudShell
$ aws ds-data delete-group --directory-id d-95674af4a8 --sam-account-name MyGroup

3. ユーザー操作 (基本)

ユーザーの操作は以下のコマンドで行います。

  • aws ds-data create-user
  • aws ds-data delete-user
  • aws ds-data describe-user
  • aws ds-data disable-user
  • aws ds-data list-users
  • aws ds-data search-users
  • aws ds-data update-user

だいたいグループの操作と同様ですが、ユーザーの状態管理が少し特殊なので解説していきます。

aws ds-data create-userコマンドでユーザーを作成しますが、初期状態でユーザーは無効状態となっています。
aws ds reset-user-passwordコマンドでパスワードリセットをすることで有効な状態になります。

# aws ds-data create-user コマンドの基本的なパラメーターを紹介
aws ds-data create-user --directory-id "ディレクトリID" \
    --sam-account-name "ユーザー名(sAMAccountName)" \
    --surname "姓" --given-name "名" \
    --email-address "メールアドレス"

# ユーザーは初期状態で無効なのでパスワードリセットをして有効にする
aws ds reset-user-password --directory-id "ディレクトリID" \
    --user-name "ユーザー名(sAMAccountName)" \
    --new-password "新しいパスワード"

実際の動作はこんな感じになります。

CloudShell
$ aws ds-data create-user --directory-id d-95674af4a8 \
>     --sam-account-name "kurameso.tarou" \
>     --surname "クラメソ" --given-name "太郎" \
>     --email-address "tarou@example.com"
{
    "DirectoryId": "d-95674af4a8",
    "SAMAccountName": "kurameso.tarou",
    "SID": "S-1-5-21-2658377969-2508436387-3075584147-1170"
}

how-to-use-aws-cli-ds-data-commands-04
初期状態ではユーザーは無効

CloudShell
# ユーザーは初期状態で無効なのでパスワードリセットをして有効にする
$ aws ds reset-user-password --directory-id d-95674af4a8 \
>     --user-name "kurameso.tarou" \
>     --new-password "P@ssword"

how-to-use-aws-cli-ds-data-commands-05
パスワードリセットして有効にする

ちなみにこのコマンドで追加されたユーザーは一般的なドメインユーザー同様にDomain Usersグループ所属となります。

作成されたユーザーはaws ds-data describe-userコマンドで参照可能です。

CloudShell
$ aws ds-data describe-user --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
{
    "DirectoryId": "d-95674af4a8",
    "DistinguishedName": "CN=kurameso.tarou,OU=Users,OU=corp,DC=corp,DC=contoso,DC=com",
    "EmailAddress": "tarou@example.com",
    "Enabled": true,
    "GivenName": "太郎",
    "Realm": "corp.contoso.com",
    "SAMAccountName": "kurameso.tarou",
    "SID": "S-1-5-21-2658377969-2508436387-3075584147-1170",
    "Surname": "クラメソ",
    "UserPrincipalName": "kurameso.tarou@CORP.CONTOSO.COM"
}

aws ds-data update-userコマンドで既存ユーザー情報を更新できます。
更新可能な情報はパラメーターで指定可能な項目に加えてグループの時と同様にOther Attributeな属性も選択可能です。

CloudShell
$ aws ds-data update-user --directory-id d-95674af4a8 \
>    --sam-account-name kurameso.tarou \
>    --other-attributes "Description={S=テスト用ユーザー}"

ユーザーの検索はaws ds-data list-usersaws ds-data search-usersコマンドから可能です。
これらのコマンドもグループの時と概ね同じです。

CloudShell
# Builtinユーザーも検索できる
$ aws ds-data list-users --directory-id d-95674af4a8 --query "Users[?SAMAccountName == 'Administrator']"
[
    {
        "Enabled": true,
        "SAMAccountName": "Administrator",
        "SID": "S-1-5-21-2658377969-2508436387-3075584147-500"
    }
]

# 特定属性の値を検索可能
$ aws ds-data search-users --directory-id d-95674af4a8 --search-attributes sAMAccountName --search-string Administrator
{
    "Users": [
        {
            "Enabled": true,
            "SAMAccountName": "Administrator",
            "SID": "S-1-5-21-2658377969-2508436387-3075584147-500"
        }
    ],
    "DirectoryId": "d-95674af4a8",
    "Realm": "corp.contoso.com"
}

既存のユーザーを無効にしたい場合はaws ds-data disable-userコマンドを使います。
再度有効にしたい場合はパスワードリセットが必要です。

CloudShell
$ aws ds-data disable-user --directory-id d-95674af4a8 --sam-account-name kurameso.tarou

最後にユーザーの削除はaws ds-data delete-groupで可能です。

CloudShell
$ aws ds-data delete-group --directory-id d-95674af4a8 --sam-account-name kurameso.tarou

4. ユーザー操作 (グループ参加)

ユーザーが所属するグループを確認・変更するには

  • aws ds-data add-group-member
  • aws ds-data list-group-members
  • aws ds-data list-groups-for-member
  • aws ds-data remove-group-member

コマンドを使います。

aws ds-data add-group-memberコマンドで指定のグループにメンバーを追加します。

CloudShell
# 追加例 : MyGroup に kurameso.tarou を追加
$ aws ds-data add-group-member --directory-id d-95674af4a8 --group-name MyGroup --member-name kurameso.tarou

特定グループに所属するメンバーを確認するにはaws ds-data list-group-membersコマンドを使います。

CloudShell
$ aws ds-data list-group-members --directory-id d-95674af4a8 --sam-account-name MyGroup
{
    "Members": [
        {
            "MemberType": "USER",
            "SAMAccountName": "kurameso.tarou",
            "SID": "S-1-5-21-2658377969-2508436387-3075584147-1170"
        }
    ],
    "DirectoryId": "d-95674af4a8",
    "MemberRealm": "corp.contoso.com",
    "Realm": "corp.contoso.com"
}

逆にメンバーから所属グループを確認するにはaws ds-data list-groups-for-memberコマンドを使います。

CloudShell
$ aws ds-data list-groups-for-member --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
{
    "Groups": [
        {
            "GroupScope": "Global",
            "GroupType": "Security",
            "SAMAccountName": "MyGroup",
            "SID": "S-1-5-21-2658377969-2508436387-3075584147-1169"
        },
        {
            "GroupScope": "Global",
            "GroupType": "Security",
            "SAMAccountName": "Domain Users",
            "SID": "S-1-5-21-2658377969-2508436387-3075584147-513"
        }
    ],
    "DirectoryId": "d-95674af4a8",
    "MemberRealm": "corp.contoso.com",
    "Realm": "corp.contoso.com"
}

最後にグループからメンバーを除外するにはaws ds-data remove-group-memberコマンドを使います。

CloudShell
# MyGroup から kurameso.tarou を除外
$ aws ds-data remove-group-member --directory-id d-95674af4a8 --group-name MyGroup --member-name kurameso.tarou

# MyGroup から離脱済みであることを確認
$ aws ds-data list-groups-for-member --directory-id d-95674af4a8 --sam-account-name kurameso.tarou
{
    "Groups": [
        {
            "GroupScope": "Global",
            "GroupType": "Security",
            "SAMAccountName": "Domain Users",
            "SID": "S-1-5-21-2658377969-2508436387-3075584147-513"
        }
    ],
    "DirectoryId": "d-95674af4a8",
    "MemberRealm": "corp.contoso.com",
    "Realm": "corp.contoso.com"
}

最後に

以上となります。

殆どのコマンドは名前から直感的に操作できるかと思います。
AWS CLI(およびREST API)からだと新規作成したユーザーは初期状態が無効でパスワードリセットによる有効化が必要になる点が特徴的なので押さえておくと良いでしょう。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.