Amazon RDS for SQL ServerでWindows認証を試してみる

2019.09.29

しばたです。
SQL ServerのマネージドサービスであるAmazon RDS for SQL Serverですが、デフォルトでは混合モードによる認証が有効となっており、所定の設定を行うことでWindows認証も利用することができます。

※本日時点で以下を除くすべての AWS リージョンで Windows Authentication for SQL Server がサポートされています。

  • 米国西部 (北カリフォルニア)
  • アジアパシフィック (ムンバイ)
  • 南米 (サンパウロ)
  • AWS GovCloud (米国東部)
  • AWS GovCloud (US-West)

本記事では上記ドキュメントの内容をベースに実際にWindows認証によるアクセスを試してみました。

検証環境

検証環境として以下の構成を考えます。

適当なVPC内にサブネットを2つ用意し、Microsoft ADによるドメイン(corp.contoso.com)とシングルAZのRDS for SQL Server(SQL Server 2017 Standard Edition (14.00.3049.1.v1))を作成します。
接続確認用に適当なSQL Server Management Studio(SSMS)をインストールしたWindows Server 2019 EC2インスタンスを1台用意し、ドメインに参加させておきます。

個々のリソースに対する初期構築手順は割愛します。

RDS for SQL ServerでWindows認証を有効にする

ここからRDS for SQL Serverに対する設定変更を実施していきます。

1. IAMロールの作成と設定

RDSがドメインに参加するためにRDSインスタンスに対してIAMロールを割り当てる必要があります。
必要な権限としては最低限AmazonRDSDirectoryServiceAccessポリシーにある権限が求められます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
            "ds:DescribeDirectories", 
            "ds:AuthorizeApplication", 
            "ds:UnauthorizeApplication",
            "ds:GetAuthorizedApplicationDetails"
        ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

マネジメントコンソールからRDSを作成する場合の設定は下図の様に設定画面が存在しており、

予めMicrosoft AD等のディレクトリを作成しておけば画面から選択するだけでよしなにIAMロール作成し割り当て、ドメインへの参加まで行ってくれます。
AWS CLIやAWS Tools for PowerShellを使ってRDSインスタンスを作成する際は予め個別にIAMロールを作成しておく必要があります。
本記事ではマネジメントコンソールからRDSインスタンスを作成し、IAMロールの割り当てを行っています。

ちなみに、ドメインへの参加状況は「接続とセキュリティ」の「ディレクトリ」および「ディレクトリステータス」で確認することができます。

2. ユーザーとグループを作成

RDSでWindows認証を有効にしても初期状態では"ログイン"情報が無く、"ログイン"は自分で整備してやる必要があります。

(RDSインスタンス作成直後のログイン)

最初は管理者ユーザーでSQL Server認証で接続し、環境に応じたログイン情報を作成してやります。

本記事ではあらかじめcorp.contoso.comに適当なグループsqlusersとこのグループに所属するtarou.yamada(山田太郎)ユーザーを作成し、

(corp.contoso.comにあらかじめWindows認証用のグループを作成しておく)

SSMSからログインを作成します。

(今回は事前作成済みのsampledbデータベースにマップするログイン設定としています。こちらは環境に応じて適宜内容を変更してください)

3. RDS for SQL ServerにWindows認証で接続する

ここまでで必要な設定は完了です。
ログインで設定したsqlusersグループに所属するtarou.yamada(山田太郎)ユーザーでSSMSから接続を試みてみると、

(ちょっと見にくいですが、tarou.yamada(山田太郎)ユーザーでSSMSを起動しRDSへの接続を試みています)

無事接続できました。
以降は通常のSQL Serverに対する操作と同様に扱えます。

最後に

ざっとこんな感じです。
ドメイン環境となるディレクトリがAWSの管理下にある必要がありますが、その他の手順については通常のWindows認証に必要なものと大して変わらない感じとなります。