Amazon ChimeをAWS Directory Serviceと連係してActive Directory認証を行う

AWSのオンライン会議サービス「Amazon Chime」をActive Directoryと連係することで、ユーザーの一元管理などいろいろなメリットを享受することができます。
2020.05.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、こんにちは!
AWS事業本部の青柳@福岡オフィスです。

テレワークの需要増加に伴い、AWSのオンライン会議サービスである Amazon Chime にも注目が集まっているのではないかと思います。

Amazon Chimeを利用するには、通常「Amazonアカウント」(ECサイトamazon.comと共通のアカウント) を作成する必要があります。

実は、Amazonアカウントを作成する方法の他に、AWS Directory Service と連係してActive Directoryによる認証を行う方法もあります。

というわけで、実際に試してみました。

Amazon Chimeユーザー管理の基礎知識

実際に試してみる前に、まず、前提となる知識をいくつか確認します。

Basic機能とPro機能

Amazon Chimeの利用には「Basic機能」と「Pro機能」の2つの機能レベルがあります。
各機能の大まかな違いは以下の通りです。

機能 Basic Pro
ビデオ会議 参加のみ可能 主催および参加が可能
音声会議 利用可能 利用可能
チャット 利用可能 利用可能
料金 無償 有償 (※)

※ 「会議の主催」などPro機能を利用した日数に対して1ユーザーあたり3 USD/日の料金が発生します。ただし、1ユーザーあたりの月額料金上限は15 USD/月です。

なお、現在は期間限定 (2020年3月4日~6月30日) で、初めてAmazon Chimeを使用するユーザーであればPro機能が無料となっています。
料金 - Amazon Chime | AWS

Amazon Chime管理アカウント

Amazon ChimeのBasic機能のみを利用する場合には、AmazonアカウントとAmazon Chimeクライアントアプリ (またはWebクライアント) さえあればAmazon Chimeを利用できます。

Pro機能を利用する場合は、AWSマネジメントコンソールから「Amazon Chime管理アカウント」を作成して、Pro機能を利用できるユーザーとして登録する必要があります。

(「Amazon Chime管理アカウント」は個々のユーザーアカウントではなくAmazon Chimeの管理単位を指す概念です)

Amazon Chime管理アカウントには以下の2種類があります。

  • チームアカウント     : 個々のユーザーを招待ベースで登録して管理する
  • エンタープライズアカウント: Active Directory等のIDプロバイダーと連係してユーザー管理を行う

管理アカウントを作成した直後は「チームアカウント」になっています。

Amazon Chimeの管理者 (マネジメントコンソールを操作できる人) は、Pro機能を利用させたいユーザーを予め「招待」して登録する必要があります。
また、ユーザーの認証は一元管理されておらず、各ユーザーがAmazonアカウントを使ってサインインを行います。

管理アカウントを「エンタープライズアカウント」に変更すると、Active Directoryと連係して「Pro機能を利用させるユーザー」「Basic機能のみのユーザー」をグループ単位で管理することができ、サインインの認証もActive Directoryと連係して行われます。

環境を構築する

それでは実際に、Active Directoryと連係したAmazon Chimeの環境を構築していきます。

Eメール用ドメイン名の準備

Amazon ChimeはユーザーのサインインをEメールアドレスで管理しているため、「エンタープライズアカウント」の管理下にあるユーザーを識別するために「Eメールアドレスのドメイン名」をAmazon Chimeに事前登録しておく必要があります。

(ここで言うドメインはActive Directoryのドメインではなく、いわゆるインターネットドメインのことです)

ドメイン名はどこで登録・管理されたものでも問題無いですが、今回はRoute 53を使って新規にドメイン名を登録しました。

※ なお、Eメールアドレスで用いるドメイン名と、Active Directoryで用いるドメイン名は、連続していても、不連続であっても、どちらでも構いません。
例えば、以下のパターンはどちらもOKです。

  • Eメールドメイン名は「kaisha.co.jp」、Active Directoryドメイン名は「sub.kaisha.co.jp」
  • Eメールドメイン名は「kaisha.co.jp」、Active Directoryドメイン名は「kaisha.local」

Directory Serviceの準備

Amazon ChimeをActice Directoryと連係するには、AWS Directory Serviceの「Managed Microsoft AD」または「AD Connector」を使用する必要があります。

オンプレミスのActive Directoryと連係するにはAD Connectorの使用を検討するとよいでしょう。

今回は「お試し」のため、Managed Microsoft ADを使って新規にドメイン環境 (ディレクトリ) を作成しました。

なお、Amazon Chimeと連係するDirectory Serviceは「米国東部 (バージニア北部) リージョン」のみ対応 という制約事項があります。

Directory Service (Managed Microsoft AD) を作成する

下図のような構成を作成します。

上記の図のうちAmazon Chimeを除いたリソースを作成するCloudFormationテンプレートを用意しました。

CloudFormationテンプレート (クリックすると展開します)

vpc-and-dirctoryservice.yaml

---
AWSTemplateFormatVersion: "2010-09-09"
Description: "VPC, EC2 and Directory Sercice (AWS Managed Microsoft AD)"

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: "General Information"
        Parameters:
          - SystemName
      - Label:
          default: "Network Configuration"
        Parameters:
          - CidrBlockVPC
          - CidrBlockSubnetPublic1
          - CidrBlockSubnetPublic2
          - CidrBlockSubnetPrivate1
          - CidrBlockSubnetPrivate2
      - Label:
          default: "EC2 Instance Configuration"
        Parameters:
          - EC2ImageID
          - EC2InstanceType
          - EC2KeyName
          - EC2VolumeType
          - EC2VolumeSize
      - Label:
          default: "Directory Service Configuration"
        Parameters:
          - DomainNameFQDN
          - DomainNameNetBIOS
          - AdminPassword

Parameters:
  SystemName:
    Type: String
    Default: example

  CidrBlockVPC:
    Type: String
    Default: 192.168.0.0/16

  CidrBlockSubnetPublic1:
    Type: String
    Default: 192.168.1.0/24

  CidrBlockSubnetPublic2:
    Type: String
    Default: 192.168.2.0/24

  CidrBlockSubnetPrivate1:
    Type: String
    Default: 192.168.11.0/24

  CidrBlockSubnetPrivate2:
    Type: String
    Default: 192.168.12.0/24

  EC2ImageID:
    Type: AWS::SSM::Parameter::Value<String>
    Default: /aws/service/ami-windows-latest/Windows_Server-2019-Japanese-Full-Base

  EC2InstanceType:
    Type: String
    Default: t3.micro

  EC2KeyName:
    Type: AWS::EC2::KeyPair::KeyName

  EC2VolumeType:
    Type: String
    Default: gp2

  EC2VolumeSize:
    Type: String
    Default: 30

  DomainNameFQDN:
    Type: String
    Default: corp.example.com

  DomainNameNetBIOS:
    Type: String
    Default: CORP

  AdminPassword:
    Type: String
    Default: P@ssw0rd
    NoEcho: true

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref CidrBlockVPC
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-vpc"
        - Key: System
          Value: !Ref SystemName

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-igw"
        - Key: System
          Value: !Ref SystemName

  VPCGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref VPC

  SubnetPublic1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select
        - 0
        - Fn::GetAZs: !Ref AWS::Region
      CidrBlock: !Ref CidrBlockSubnetPublic1
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-public-subnet1"
        - Key: System
          Value: !Ref SystemName

  SubnetPublic2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select
        - 1
        - Fn::GetAZs: !Ref AWS::Region
      CidrBlock: !Ref CidrBlockSubnetPublic2
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-public-subnet2"
        - Key: System
          Value: !Ref SystemName

  SubnetPrivate1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select
        - 0
        - Fn::GetAZs: !Ref AWS::Region
      CidrBlock: !Ref CidrBlockSubnetPrivate1
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-private-subnet1"
        - Key: System
          Value: !Ref SystemName

  SubnetPrivate2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select
        - 1
        - Fn::GetAZs: !Ref AWS::Region
      CidrBlock: !Ref CidrBlockSubnetPrivate2
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-private-subnet2"
        - Key: System
          Value: !Ref SystemName

  NACLPublic:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-public-nacl"
        - Key: System
          Value: !Ref SystemName

  NACLPrivate:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-private-nacl"
        - Key: System
          Value: !Ref SystemName

  NACLEntryPublicIngress:
    Type: AWS::EC2::NetworkAclEntry
    Properties:
        NetworkAclId: !Ref NACLPublic
        Egress: false
        RuleNumber: 100
        Protocol: -1
        CidrBlock: 0.0.0.0/0
        RuleAction: allow

  NACLEntryPublicEgress:
    Type: AWS::EC2::NetworkAclEntry
    Properties:
        NetworkAclId: !Ref NACLPublic
        Egress: true
        RuleNumber: 100
        Protocol: -1
        CidrBlock: 0.0.0.0/0
        RuleAction: allow

  NACLEntryPrivateIngress:
    Type: AWS::EC2::NetworkAclEntry
    Properties:
        NetworkAclId: !Ref NACLPrivate
        Egress: false
        RuleNumber: 100
        Protocol: -1
        CidrBlock: 0.0.0.0/0
        RuleAction: allow

  NACLEntryPrivateEgress:
    Type: AWS::EC2::NetworkAclEntry
    Properties:
        NetworkAclId: !Ref NACLPrivate
        Egress: true
        RuleNumber: 100
        Protocol: -1
        CidrBlock: 0.0.0.0/0
        RuleAction: allow

  NACLAssociationPubclic1:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref SubnetPublic1
      NetworkAclId: !Ref NACLPublic

  NACLAssociationPubclic2:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref SubnetPublic2
      NetworkAclId: !Ref NACLPublic

  NACLAssociationPrivate1:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref SubnetPrivate1
      NetworkAclId: !Ref NACLPrivate

  NACLAssociationPrivate2:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref SubnetPrivate2
      NetworkAclId: !Ref NACLPrivate

  EIPNatGateway:
    DependsOn:
      - VPCGatewayAttachment
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc

  NatGateway:
    DependsOn:
      - EIPNatGateway
      - SubnetPublic1
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt EIPNatGateway.AllocationId
      SubnetId: !Ref SubnetPublic1
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-natgateway"
        - Key: System
          Value: !Ref SystemName

  RouteTablePublic:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-public-rtb"
        - Key: System
          Value: !Ref SystemName

  RouteTablePrivate:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-private-rtb"
        - Key: System
          Value: !Ref SystemName

  RouteIGW:
    DependsOn:
      - VPCGatewayAttachment
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref RouteTablePublic
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  RouteNatGateway:
    DependsOn:
      - VPCGatewayAttachment
      - NatGateway
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref RouteTablePrivate
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref NatGateway

  RouteTableAssociationPublic1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref SubnetPublic1
      RouteTableId: !Ref RouteTablePublic

  RouteTableAssociationPublic2:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref SubnetPublic2
      RouteTableId: !Ref RouteTablePublic

  RouteTableAssociationPrivate1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref SubnetPrivate1
      RouteTableId: !Ref RouteTablePrivate

  RouteTableAssociationPrivate2:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref SubnetPrivate2
      RouteTableId: !Ref RouteTablePrivate

  SecurityGroupMgmtSvr:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: !Sub "${SystemName}-mgmtsvr-sg"
      GroupDescription: "Security group for management server"
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-mgmtsvr-sg"
        - Key: System
          Value: !Ref SystemName

  IAMRoleMgmtSvr:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub "${SystemName}-mgmtsvr-role"
      AssumeRolePolicyDocument: |
        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "ec2.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        }
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
      Path: /

  IAMInstanceProfileMgmtSvr:
    Type: AWS::IAM::InstanceProfile
    Properties:
      InstanceProfileName: !Sub "${SystemName}-mgmtsvr-role"
      Roles: 
        - !Ref IAMRoleMgmtSvr
      Path: /

  EC2InstanceMgmtSvr:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref EC2ImageID
      InstanceType: !Ref EC2InstanceType
      KeyName: !Ref EC2KeyName
      BlockDeviceMappings:
        - DeviceName: /dev/sda1
          Ebs:
            VolumeType: !Ref EC2VolumeType
            VolumeSize: !Ref EC2VolumeSize
      NetworkInterfaces:
        - DeviceIndex: 0
          SubnetId: !Ref SubnetPrivate1
          GroupSet:
            - !Ref SecurityGroupMgmtSvr
      IamInstanceProfile: !Ref IAMInstanceProfileMgmtSvr
      UserData:
        Fn::Base64: !Sub |
          <powershell>
          $computerName = "MGMTSVR"
          Rename-Computer -NewName $computerName -Force -Restart
          </powershell>
      Tags:
        - Key: Name
          Value: !Sub "${SystemName}-mgmtsvr"
        - Key: System
          Value: !Ref SystemName

  ManagedMicrosoftAD:
    Type: AWS::DirectoryService::MicrosoftAD
    Properties:
      Edition: Standard
      Name: !Ref DomainNameFQDN
      ShortName: !Ref DomainNameNetBIOS
      Password: !Ref AdminPassword
      VpcSettings:
        VpcId: !Ref VPC
        SubnetIds:
          - !Ref SubnetPrivate1
          - !Ref SubnetPrivate2

Outputs:
  VPC:
    Value: !Ref VPC
    Export:
      Name: !Sub "${AWS::StackName}::VPC"

  SubnetPublic1:
    Value: !Ref SubnetPublic1
    Export:
      Name: !Sub "${AWS::StackName}::SubnetPublic1"

  SubnetPublic2:
    Value: !Ref SubnetPublic2
    Export:
      Name: !Sub "${AWS::StackName}::SubnetPublic2"

  SubnetPrivate1:
    Value: !Ref SubnetPrivate1
    Export:
      Name: !Sub "${AWS::StackName}::SubnetPrivate1"

  SubnetPrivate2:
    Value: !Ref SubnetPrivate2
    Export:
      Name: !Sub "${AWS::StackName}::SubnetPrivate2"

  IAMRoleMgmtSvr:
    Value: !Ref IAMRoleMgmtSvr
    Export:
      Name: !Sub "${AWS::StackName}::IAMRoleMgmtSvr"

  IAMInstanceProfileMgmtSvr:
    Value: !Ref IAMInstanceProfileMgmtSvr
    Export:
      Name: !Sub "${AWS::StackName}::IAMInstanceProfileMgmtSvr"

  SecurityGroupMgmtSvr:
    Value: !Ref SecurityGroupMgmtSvr
    Export:
      Name: !Sub "${AWS::StackName}::SecurityGroupMgmtSvr"

  EC2InstanceMgmtSvr:
    Value: !Ref EC2InstanceMgmtSvr
    Export:
      Name: !Sub "${AWS::StackName}::EC2InstanceMgmtSvr"

  ManagedMicrosoftAD:
    Value: !Ref ManagedMicrosoftAD
    Export:
      Name: !Sub "${AWS::StackName}::ManagedMicrosoftAD"

マネジメントコンソールから手で作成する場合は、以下のパラメーターで作成してください。

  • VPC
    • サブネット: パブリックx2、プライベートx2
    • NATゲートウェイ: パブリックサブネットに配置
  • Directory Service
    • ディレクトリタイプ: AWS Managed Microsoft AD
    • エディション: Standard
    • ディレクトリのDNS名: corp.example.com
    • ディレクトリのNetBIOS名: CORP
    • Adminパスワード: (ドメイン管理者のパスワードを指定)
    • VPC: (作成したVPCを指定)
    • サブネット: (作成したプライベートサブネットを2つ指定)
  • EC2インスタンス (Active Directory管理用サーバー)
    • プライベートサブネットに配置
    • AMI: Windows Server 2019 日本語版 (AMI名:"Windows_Server-2019-Japanese-Full-Base-2020.04.15")
    • IAMインスタンスプロファイル: AWS管理ポリシー「AmazonSSMManagedInstanceCore」を付与したIAMロールを指定

今回、EC2インスタンスへのリモートデスクトップ接続は、SSMセッションマネージャーのポートフォワーディングを使って行うことを想定しています。

接続手順:

  • AWS CLIのプラグイン「Session Manager Plugin」をインストールしておく
  • 以下のコマンドを実行する
    aws ssm start-session \
      --target <接続先インスタンスのインスタンスID> \
      --document-name AWS-StartPortForwardingSession \
      --parameters '{"portNumber":["3389"],"localPortNumber":["13389"]}'
  • リモートデスクトップ接続を起動してlocalhost:13389へ接続する

※ 他の方法 (パブリックサブネットに踏み台サーバーを設置する等) を用いる場合は、踏み台サーバーの追加やセキュリティグループの設定などを適宜行ってください。

Active Directoryの管理用サーバーの設定を行う

Directory Serviceによって作成されたドメインコントローラーに対して、リモートデスクトップ接続などを使って直接操作を行うことはできません。

そこで、別のWindowsサーバーから「リモートサーバー管理ツール」(RSAT) を使って「ドメインユーザー作成」などの管理を行うことにします。

まず、管理用サーバーをDirectory Service (Managed Microsoft AD) のドメインに参加させます。
ドメインへの参加方法は下記ブログ記事を参考にしてください。

ドメインに参加しましたら、ドメイン管理者アカウント (例:CORP\Admin) でログオンします。

次に、サーバーマネージャーの「役割と機能の追加」より「リモートサーバー管理ツール」の追加を行います。

「役割」のページでは何も指定せず、「機能」のページで以下の項目にチェックを入れます。

  • グループポリシーの管理
  • リモートサーバー管理ツール → 役割管理ツール → AD DSおよびAD LDS管理ツール → AD DSツール
  • リモートサーバー管理ツール → 役割管理ツール → DNSサーバーツール

PowerShellで役割と機能を追加する場合は、以下のコマンドレットを実行します。

Install-WindowsFeature -Name RSAT-ADDS,RSAT-DNS-Server,GPMC

Active Directoryドメイン上にユーザーとグループを作成する

Amazon Chimeの設定を行う前に、テスト用のユーザーを作成しておきます。

サーバーマネージャーの「ツール」メニューより「Active Directoryユーザーとコンピューター」を起動します。

注意点として、Managed Microsoft ADではオブジェクトを作成できる場所に制約があります。
(例えば、ドメイン直下の「Users」は読み取り専用になっているためオブジェクトの作成ができません)

ドメインの直下に「ドメインのNetBIOS名」(今回の例では「CORP」) のOUがありますので、この配下に作成します。

「ドメインのNetBIOS名」直下の「Users」を開いて、メニューから「新規作成」→「ユーザー」を選択します。

ユーザーの情報を入力します。
今回はテスト目的ですので、「ユーザーは次回ログオン時にパスワード変更が必要」のチェックを外して「パスワードを無期限にする」にチェックを入れています。

ユーザーを作成しましたら、ユーザーのプロパティを開きます。
「全般」タブの「電子メール」欄にEメールアドレスを入力して、保存します。

同様の操作を繰り返して、ユーザーをいくつか作成します。

次はグループを作成します。

Amazon Chimeにおいて「Pro機能を利用できるユーザー」「Basic機能を利用できるユーザー」を識別するためのグループをそれぞれ作成します。
なお、グループのスコープは「グローバル」、グループの種類は「セキュリティ」を選択してください。

それぞれのグループにユーザーを所属させます。

これでActive Directory関連の準備はOKです。

Amazon Chimeの設定

管理アカウントを作成する

AWSマネジメントコンソールで「Amazon Chime」を選択します。

初回は「Accounts」画面が表示されますので、「Create new account」をクリックします。

管理アカウントの名前を入力します。
リージョンの選択は、デフォルトの「全ての利用可能なリージョン」にしておきます。

管理アカウントが作成されました。

Amazon ChimeへEメールドメインを登録する

作成した管理アカウント名をクリックして、管理アカウントの設定画面に遷移します。

「Identity」→「Domains」を選択して、「Claim a new domain」をクリックします。

用意したEメール用ドメイン名を入力して、「Verify this domain」をクリックします。

ドメインの所有者を検証するために、DNSに作成すべきTXTレコードの情報が表示されます。

Amazon Chimeの画面をそのままにして、マネジメントコンソールでRoute 53の画面を開きます。

対象となるドメイン名のホストゾーンを選択して、「レコードセットの作成」をクリックします。
Amazon Chimeの画面に表示されているTXTレコードの情報を参照して、レコードセットの設定値に転記します。

  • 名前 : 「Name」欄に表示されている文字列 (「_amazonchime」)
  • タイプ: 「TXT - テキスト」を選択
  • 値  : 「Value」欄に表示されている文字列

TXTレコードが作成されたことを確認します。

※ Route 53以外のDNSの場合も、同様にしてDNS上にTXTレコードを作成してください。

Amazon Chimeの画面に戻ります。

しばらく経過した後、ドメイン名の検証が行われ、ステータス欄の表示が「Pending」から「Verified」に変わることを確認します。

今回試した際には数分で検証が終わりました。
ただし、AWSドキュメントには「DNSの変更とAmazon Chimeによる検証が反映されるまで最大24時間かかります」という記述があるため、留意してください。

Amazon ChimeをActive Directoryへ接続する

「Identity」→「Active Directory」を選択します。

接続するDirectory ServiceのディレクトリIDを選択して、「Connect」をクリックします。

Active Directoryへ接続されると以下のような画面になります。
「Add a new group」をクリックします。

Active Directoryドメイン上に作成した「Pro機能を利用できるユーザー」「Basic機能を利用できるユーザー」の各グループを登録します。
対応する権限を「Pro」「Basic」から選択します。

グループの登録が終わりましたら、Amazon Chimeの全ての準備が完了です。

Amazon Chimeを利用する

Amazon Chimeへのサインイン

Amazon Chimeのクライアントアプリをインストールするか、Webアプリのサイトへアクセスします。
ダウンロード - Amazon Chime | AWS

ユーザーのEメールアドレスを入力して次へ進みます。

入力したEメールアドレスがエンタープライズアカウントに登録されたドメイン名である場合、Amazonアカウントのサインインページではなく、企業アカウント (Active Directory) のサインインページが表示されます。
ユーザー名とパスワードを入力してサインインします。

サインインすることができました。

会議の主催・会議への参加

Pro機能を利用できるユーザーでサインインしていれば、会議を主催することができます。

「Meetings」→「Schedule a meeting」を選択します。

会議の設定が行えますが、ここではとりあえずデフォルトのまま「Next」をクリックします。

参加者へ会議の案内を行います。
「Googleカレンダー」または「Microsoft Outlook」を利用している場合は、「Schedule with Google」(または「Schedule with Outlook」) をクリックすることでカレンダーに会議予定を登録することができます。

それら以外の場合には「Other」を選択して、表示されているテキスト (会議IDなどが記載されている) をコピーして、カレンダーやメールに貼り付けて送信しましょう。

参加者は、送られてきた会議案内に記載されているリンク (https://chime.aws/XXXXXXXXXX) をクリックすることで会議に参加できます。

主催者の場合と同様に、EメールアドレスとActive Directoryのユーザー名・パスワードを入力して、Amazon Chimeにサインインします。

会議へ参加できるユーザーの範囲を制御する

会議を主催する際に、会議へ参加できるユーザーの範囲を指定することができます。

各チェックボックスの意味は以下の通りです。

Attendees outside of my company who are signed in:
参加者と同じ会社 (ドメイン) に所属していないユーザーにも参加を許可する
Anyone with the meeting ID:
会議IDを知っている任意のユーザーに対して参加を許可する

つまり、これらのチェックボックスを両方「オフ」にした場合、社内ドメインに所属しているユーザーのみに会議への参加を許可することになります。

社内ドメインに所属していないユーザー (Amazonアカウントでサインインしたユーザー) で会議に参加しようとすると、以下のように「会議はロックされています」と表示されて、会議への参加が拒否されます。

おわりに

Amazon ChimeをAWS Directory Serviceと連係することで、サインインの認証をActive Directoryで行うことができ、また、社内のユーザーのみに参加者を制限するなどユーザーの管理も行えることが確認できました。

なお、現在のところ、Amazon Chimeと連係できるDirectory Serviceは「米国東部リージョン」に作成したものに限定されます。
したがって、日本国内のオンプレミスデータセンターや拠点オフィスのActive Directoryドメインコントローラーと連係するには、Direct Connect Gatewayを使う等によってリージョン間の接続を行うことになるかと思います。