RDS for SQL Server による AWS Managed Active Directory の操作
ユーザーが RDS for SQL Server DB インスタンスに接続する際、AWS Managed Microsoft AD を使用して Windows 認証でユーザーを認証できます。DB インスタンスは、Windows 認証を有効にするために AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD とも呼ばれます) を使用します。ユーザーが、信頼性の高いドメインに接続された SQL Server DB インスタンスを使用して認証を実行すると、AWS Directory Service を使用して作成したドメインディレクトリに認証リクエストが転送されます。
リージョンとバージョンの可用性
Amazon RDS では、Windows Authentication 向けに AWS Managed Microsoft AD のみの使用をサポートしています。RDS は AD Connector の使用をサポートしていません。詳細については、次を参照してください:
バージョンおよびリージョンの可用性の詳細については、「RDS for SQL Server を使用したKerberos 認証」を参照してください。
Windows 認証のセットアップの概要
Amazon RDS は Windows 認証にミックスモードを使用します。この方法では、マスターユーザー (SQL Server DB インスタンスの作成に使用された名前とパスワード) が SQL 認証を使用します。マスターユーザーアカウントは特権を持つ認証情報のため、このアカウントへのアクセスを制限する必要があります。
オンプレミスまたはセルフホスト型の Microsoft Active Directory を使用して Windows 認証を取得するには、フォレストの信頼関係を確立します。信頼は、一方向または双方向にすることができます。AWS Directory Service を使用してフォレストの信頼関係を設定する方法の詳細については、AWS Directory Service 管理ガイドの「信頼関係を作成する場合」を参照してください。
SQL Server DB インスタンスの Windows 認証を設定するには、次のステップに従います。詳細については、「SQL Server DB インスタンスの Windows 認証のセットアップ」を参照してください。
-
AWS Managed Microsoft AD または AWS Management Console API のいずれかから AWS Directory Service を使用して、AWS Managed Microsoft AD ディレクトリを作成します。
-
AWS CLI または Amazon RDS API を使用してSQL Server DB インスタンスを作成する場合は、AWS Identity and Access Management (IAM) ロールを作成します。このロールはマネージド IAM ポリシー
AmazonRDSDirectoryServiceAccess
を使用し、Amazon RDS によるディレクトリへの呼び出しを許可します。SQL Server DB インスタンスの作成にコンソールを使用している場合、AWS は IAM ロールを作成します。ロールによるアクセスを許可するには、AWS Security Token Service (AWS STS) エンドポイントを AWS アカウントの AWS リージョンでアクティベートする必要があります。AWS STS エンドポイントはすべての AWS リージョンでデフォルトでアクティブになっているため、他のアクションを実行することなくエンドポイントを使用することができます。詳細については、IAM ユーザーガイドの 「AWS リージョン での AWS STS の管理」を参照してください。
-
Microsoft Active Directory のツールを使用して、AWS Managed Microsoft AD ディレクトリでユーザーとグループを作成して設定します。Active Directory にユーザーおよびグループを作成する方法の詳細については、AWS Directory Service 管理ガイドの「AWS Managed Microsoft AD でユーザーとグループを管理する」を参照してください。
-
ディレクトリと DB インスタンスを異なる VPC に配置する場合は、クロス VPC トラフィックを有効にします。
-
Amazon RDS を使用して、コンソール、AWS CLI、または Amazon RDS API のいずれかから、新しい SQL Server DB インスタンスを作成します。作成リクエストで、ディレクトリの作成時に生成されたドメイン識別子 (「
d-*
」識別子) と、作成したロールの名称を指定します。DB インスタンスのドメインおよび IAM ロールパラメータを設定して、既存の SQL Server DB インスタンスを Windows 認証を使用するように変更することもできます。 -
Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同じように SQL Server DB インスタンスに接続します。DB インスタンスは AWS Managed Microsoft AD ドメインに参加しているため、ドメイン内の Active Directory ユーザーとグループから SQL Server のログインとユーザーをプロビジョニングできます (これらは、SQL Server の「Windows」ログインとして知られています)。データベースへのアクセス許可は、これらの Windows ログインに付与され無効化されている標準の SQL サーバーのアクセス許可によって管理されています。
Kerberos 認証のエンドポイントの作成
Kerberos に基づく認証では、エンドポイントは「お客様が指定したホスト名、ピリオド、省略なしのドメイン名 (FQDN)」の形式である必要があります。次の例は、Kerberos に基づく認証で使用できるエンドポイントの例です。この例では、SQL Server DB インスタンスのホスト名は ad-test
、ドメイン名は corp-ad.company.com
です。
ad-test.corp-ad.company.com
接続で Kerberos が使用されていることを確認するには、次のクエリを実行します。
SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID;
SQL Server DB インスタンスの Windows 認証のセットアップ
SQL Server DB インスタンスの Windows 認証をセットアップするには、AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD とも呼ばれます) を使用します。Windows 認証を設定するには、次の手順を実行します。
ステップ 1: AWS Directory Service for Microsoft Active Directory を使用してディレクトリを作成する
AWS Directory Service は完全マネージド型の Microsoft Active Directory を AWS クラウドに作成します。AWS Managed Microsoft AD ディレクトリを作成すると、AWS Directory Service がユーザーに代わって 2 つのドメインコントローラーと 2 つのドメインネームサービス (DNS) サーバーを作成します。ディレクトリサーバーは、 VPC 内の 2 つの異なるアベイラビリティーゾーンの 2 つのサブネットで作成されています。この冗長性により、障害が発生してもディレクトリがアクセスできるようになります。
AWS Managed Microsoft AD ディレクトリを作成すると、AWS Directory Service がユーザーに代わって自動的に以下のタスクを実行します。
-
VPC 内に Microsoft Active Directory を設定します。
-
「Admin」のユーザー名と指定されたパスワードを使用して、ディレクトリ管理者アカウントを作成します。このアカウントはディレクトリの管理に使用します。
-
ディレクトリコントローラー用のセキュリティグループを作成する。
AWS Directory Service for Microsoft Active Directory を立ち上げると、AWS は組織単位 (OU) を作成します。OU にはディレクトリのオブジェクトがすべて含まれています。この OU はドメインルートにあります。OU にはディレクトリを作成する際に入力した NetBIOS 名があります。ドメインルートは AWS が所有し、管理します。
AWS Managed Microsoft AD ディレクトリに作成された管理者アカウントには、次のような、OU で最も一般的な管理業務用のアクセス権限があります。
-
ユーザー、グループ、およびコンピュータを作成、更新、または削除する
-
ファイルやプリントサーバーなどのドメインにリソースを追加して、追加したリソースへのアクセス許可を OU のユーザーとグループに割り当てる。
-
追加の OU やコンテナを作成する。
-
権限を委譲する。
-
グループポリシーを作成し、リンクする。
-
削除されたオブジェクトを Active Directory のごみ箱から元に戻す。
-
Active Directory Web Service で AD と DNS Windows PowerShell モジュールを実行する。
管理者アカウントには、ドメイン全体に関係するアクティビティを実行する権限もあります。
-
DNS 設定 (レコード、ゾーン、フォワーダーの追加、削除、または更新) を管理する。
-
DNS イベントログを参照する。
-
セキュリティイベントログを参照する。
AWS Managed Microsoft AD でディレクトリを作成するには
-
AWS Directory Service コンソール
のナビゲーションペインで、[ディレクトリ]、[ディレクトリの設定] の順に選択します。 -
AWS Managed Microsoft AD を選択します。これは Amazon RDS 用に現在サポートされている唯一のオプションです。
-
[Next] を選択します。
-
[ディレクトリ情報の入力] ページに、以下の情報を指定します。
- エディション
-
目的の要件を満たすエディションを選択します。
- ディレクトリの DNS 名
-
ディレクトリの完全修飾名。例:
corp.example.com
。47 文字を超える名前は SQL Server でサポートされていません。 - ディレクトリの NetBIOS 名
-
ディレクトリの短縮名 (例:
CORP
)。 - ディレクトリの説明
-
必要に応じて、ディレクトリの説明。
- 管理者パスワード
-
ディレクトリ管理者のパスワードです。ディレクトリの作成プロセスでは、ユーザー名「Admin」とこのパスワードを使用して管理者アカウントが作成されます。
ディレクトリ管理者のパスワードに「
admin
」の単語を含めることはできません。パスワードは大文字と小文字を区別し、8–64 文字にします。また、以下の 4 つのカテゴリうち 3 つから少なくとも 1 文字を含める必要があります。-
小文字 (a〜z)
-
大文字 A〜Z
-
数字 (0〜9)
-
アルファベットと数字以外の文字 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)
-
- [Confirm password] (パスワードを確認)
-
管理者のパスワードをもう一度入力します。
-
[Next] を選択します。
-
[VPC とサブネットの選択] ページで、以下の情報を指定します。
- VPC
-
ディレクトリ用の VPC を選択します。
注記
ディレクトリと DB インスタンスは異なる VPC に配置できますが、その場合、必ずクロス VPC トラフィックを有効にしてください。詳細については、「ステップ 4: ディレクトリと DB インスタンス間のクロス VPC トラフィックを有効にする」を参照してください。
- Subnets
-
ディレクトリサーバーのサブネットを選択します。2 つのサブネットは、異なるアベイラビリティーゾーンに存在している必要があります。
-
[Next] を選択します。
-
ディレクトリの情報を確認します。変更が必要な場合は、[Previous] を選択します。情報が正しい場合は、[Create directory (ディレクトリの作成)] を選択します。
ディレクトリが作成されるまで、数分かかります。正常に作成されると、[Status] 値が [Active] に変わります。
ディレクトリに関する情報を表示するには、ディレクトリの一覧で、そのディレクトリを選択します。ディレクトリ ID を書き留めます。この値は、SQL Server DB インスタンスを作成または変更するときに必要になります。
ステップ 2: Amazon RDS 用の IAM ロールを作成する
コンソールを使用して SQL Server DB インスタンスを作成する場合、このステップをスキップできます。SQL Server DB インスタンスの作成に CLI または RDS API を使用する場合、AmazonRDSDirectoryServiceAccess
マネージド IAM ポリシーを使用する IAM ロールを作成する必要があります。このロールを使用すると、Amazon RDS で AWS Directory Service への呼び出しを行うことができます。
AWS 管理 AmazonRDSDirectoryServiceAccess
ポリシーではなく、ドメインを結合するためのカスタムポリシーを使用する場合は、ds:GetAuthorizedApplicationDetails
アクションを許可する必要があります。AWS Directory Service API の変更により、この要件は、2019 年 7 月から有効となります。
次の IAM ポリシー AmazonRDSDirectoryServiceAccess
は、AWS Directory Service へのアクセスを提供します。
例 AWS Directory Service へのアクセスを提供する IAM ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ds:DescribeDirectories", "ds:AuthorizeApplication", "ds:UnauthorizeApplication", "ds:GetAuthorizedApplicationDetails" ], "Effect": "Allow", "Resource": "*" } ] }
リソースベースの信頼関係では aws:SourceArn
および aws:SourceAccount
のグローバル条件コンテキストキーを使用して、サービスに付与する特定のリソースへのアクセス許可を制限することをお勧めします。これは、混乱した使節の問題に対する最も効果的な保護方法です。
両方のグローバル条件コンテキストキーを使用し、aws:SourceArn
値にアカウント ID を含めます。この場合は、aws:SourceAccount
値と aws:SourceArn
値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。
-
単一リソースに対するクロスサービスアクセスが必要な場合は
aws:SourceArn
を使用します。 -
そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、
aws:SourceAccount
を使用します。
信頼関係では、aws:SourceArn
グローバル条件コンテキストキーに、必ず、ロールにアクセスするリソースの完全な Amazon リソースネーム (ARN) を使用します。Windows 認証の場合、次の例に示すように DB インスタンスを含めてください。
例 Windows 認証のグローバル条件コンテキストキーとの信頼関係
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": [ "arn:aws:rds:
Region
:my_account_ID
:db:db_instance_identifier
" ] } } } ] }
この IAM ポリシーと信頼関係を使用して IAM ロールを作成します。IAM ロールの作成の詳細については、IAM ユーザーガイドの「カスタマー管理ポリシーの作成」を参照してください。
ステップ 3: ユーザーとグループを作成して設定する
Active Directory ユーザーとコンピューターツールを使用して、ユーザーとグループを作成できます。このツールは、Active Directory Domain Services ツールおよび Active Directory Lightweight Directory Services ツールの 1 つです。ユーザーは、ディレクトリにアクセスできる個別の人またはエンティティを表します。グループは、個別のユーザーごとに権限を付与するのではなく、ユーザーのグループに権限を付与または拒否するために非常に便利です。
AWS Directory Service ディレクトリにユーザーとグループを作成するには、AWS Directory Service ディレクトリのメンバーである Windows EC2 インスタンスに接続する必要があります。また、ユーザーとグループを作成する権限を持つユーザーとしてログインしている必要があります。詳細については、AWS Directory Service 管理ガイドの「ユーザーとグループを追加する (Simple AD および AWS Managed Microsoft AD)」を参照してください。
ステップ 4: ディレクトリと DB インスタンス間のクロス VPC トラフィックを有効にする
同じ VPC 内にディレクトリおよび DB インスタンスを配置する場合は、このステップをスキップして ステップ 5: SQL Server DB インスタンスを作成または変更する に進みます。
ディレクトリと DB インスタンスを別の VPC に配置する場合は、VPC ピア接続または AWS Transit Gateway を使用してクロス VPC トラフィックを設定します。
次の手順では、VPC ピア接続を使用して VPC 間のトラフィックを有効にします。Amazon Virtual Private Cloud ピアリング接続ガイドの「VPC ピア機能とは」の手順に従います。
VPC ピア接続を使用してクロス VPC トラフィックを有効にするには
-
適切な VPC ルーティングを設定し、ネットワークトラフィックが双方向にフローするようにします。
-
DB インスタンスのセキュリティグループが、ディレクトリのセキュリティグループからのインバウンドトラフィックを受信できることを確認します。
-
トラフィックをブロックするネットワークのアクセスコントロールリスト (ACL) ルールがないことを確認します。
別の AWS アカウントがディレクトリを所有している場合は、ディレクトリを共有する必要があります。
AWS アカウント間でディレクトリを共有するには
-
DB インスタンスを作成する AWS アカウントとの間でディレクトリの共有を開始するには、AWS Managed Microsoft AD 管理ガイドの「チュートリアル: AWS Directory Service ディレクトリを共有して、シームレスに EC2 ドメインを結合する」の手順を実行します。
-
DB インスタンスのアカウントを使用して、AWS Directory Service コンソールにサインインし、続行する前にドメインが必ず
SHARED
ステータスであることを確認します。 -
DB インスタンスのアカウントを使用して AWS Directory Service コンソールにサインインしている間に、[ディレクトリ ID] の値を書き留めておきます。このディレクトリ ID は、DB インスタンスをドメインに結合するために使用します。
ステップ 5: SQL Server DB インスタンスを作成または変更する
ディレクトリで使用する SQL Server DB インスタンスを作成または変更します。コンソール、CLI、RDS API を使用して DB インスタンスとディレクトリを関連付けることができます。これには以下の 2 つの方法があります。
-
コンソール、create-db-instance CLI コマンド、または CreateDBInstance RDS API オペレーションを使用して、新しい SQL Server DB インスタンスを作成します。
手順については、「Amazon RDS DB インスタンスの作成」を参照してください。
-
コンソール、modify-db-instance CLI コマンド、または ModifyDBInstance RDS API オペレーションを使用して、既存の SQL Server DB インスタンスを変更します。
手順については、「Amazon RDS DB インスタンスを変更する」を参照してください。
-
コンソール、restore-db-instance-from-db-snapshot CLI コマンド、または RestoreDBInstanceFromDBSnapshot RDS API オペレーションを使用して、DB スナップショットから SQL Server DB インスタンスを復元します。
手順については、「DB インスタンスへの復元」を参照してください。
-
コンソール、restore-db-instance-to-point-in-time CLI コマンド、または RestoreDBInstanceToPointInTime RDS API オペレーションを使用して、SQL Server DB インスタンスをポイントインタイムに復元します。
手順については、「特定の時点への DB インスタンスの復元」を参照してください。
Windows 認証は、VPC 内の SQL Server DB インスタンスにのみサポートされています。
DB インスタンスが、作成したドメインディレクトリを使用できるようにするには、次が必要です。
-
[ディレクトリ] では、ディレクトリの作成時に生成されたドメイン識別子 (
d-
) を選択する必要があります。ID
-
VPC セキュリティグループに、ディレクトリとの通信を DB インスタンスに許可するアウトバウンドルールがあることを確認します。
AWS CLI を使用する場合は、DB インスタンスが、作成したディレクトリを使用できるように、以下のパラメータが必要です。
-
--domain
パラメータには、ディレクトリの作成時に生成されたドメイン識別子 (d-
) を使用します。ID
-
--domain-iam-role-name
パラメータには、マネージド IAM ポリシーAmazonRDSDirectoryServiceAccess
を使用する作成済みのロールを使用します。
例えば、以下の CLI コマンドはディレクトリを使用するように DB インスタンスを変更します。
Linux、macOS、Unix の場合:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --domain d-ID
\ --domain-iam-role-namerole-name
Windows の場合:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --domain d-ID
^ --domain-iam-role-namerole-name
重要
Kerberos 認証を有効化するために DB インスタンスを変更する場合、変更後 DB インスタンスを再起動します。
ステップ 6: Windows 認証の SQL Server ログインを作成する
Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同じように SQL Server DB インスタンスに接続します。DB インスタンスは AWS Managed Microsoft AD ドメインに参加しているため、SQL Server のログインとユーザーをプロビジョニングできます。これは、ドメイン内の Active Directory のユーザーとグループから行われます。データベースへのアクセス許可は、これらの Windows ログインに付与され無効化されている標準の SQL サーバーのアクセス許可によって管理されています。
Active Directory のユーザーが SQL Server で認証するには、ユーザー、またはそのユーザーがメンバーとして含まれているグループに、SQL Server の Windows ログインが存在する必要があります。これらの SQL Server ログインでアクセスを許可したり取り消したりして、細分化されたアクセスコントロールを処理します。SQL Server ログインを持たないユーザー、またはそのようなログインを持つグループに属さないユーザーは、SQL Server DB インスタンスにアクセスできません。
Active Directory の SQL Server ログインを作成するには、ALTER ANY LOGIN 許可が必要です。このアクセス許可を持つログインをまだ作成していない場合は、SQL Server 認証を使用して DB インスタンスのマスターユーザーとして接続します。
次の例のようなデータ定義言語 (DDL) コマンドを実行して、Active Directory ユーザーまたはグループへの SQL Server ログインを作成します。
注記
の形式で Windows 2000 以前のログイン名を使用して、ユーザーまたはグループを指定します。ユーザープリンシパル名 (UPN) を domainName
\login_name
login_name
@
の形式で使用することはできません。DomainName
T-SQL ステートメントを使用することによってのみ、RDS for SQL Server インスタンスで Windows 認証ログインを作成することができます。SQL Server Management Studio を使用して Windows 認証ログインを作成することはできません。
USE [master] GO CREATE LOGIN [
mydomain
\myuser
] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english]; GO
詳細については、Microsoft Developer Network ドキュメントの「ログインの作成 (Transact-SQL)
ドメインのユーザー (人およびアプリケーション) が Windows 認証を使用して、クライアントマシンを結合したドメインから RDS for SQL Server インスタンスに接続できるようになりました。
ドメインの DB インスタンスの管理
コンソール、AWS CLI、または Amazon RDS API を使用して、DB インスタンスおよびドメインとの関係を管理できます。例えば、DB インスタンスをドメイン内、ドメイン外、またはドメイン間で移動させることができます。
例えば、Amazon RDS API を使用して次を実行できます。
-
失敗したメンバーシップのドメイン参加を再試行するには、ModifyDBInstance API オペレーションを使用して、現在のメンバーシップのディレクトリ ID を指定します。
-
メンバーシップの IAM ロール名を更新するには、
ModifyDBInstance
API オペレーションを使用し、現在のメンバーシップのディレクトリ ID と新しい IAM ロールを指定します。 -
ドメインから DB インスタンスを削除するには、
ModifyDBInstance
API オペレーションを使用し、ドメインパラメータとしてnone
を指定します。 -
ドメイン間で DB インスタンスを移動するには、
ModifyDBInstance
API オペレーションを使用し、新しいドメインのドメイン識別子をドメインパラメータとして指定します。 -
各 DB インスタンスのメンバーシップを一覧表示するには、DescribeDBInstances API オペレーションを使用します。
ドメインのメンバーシップを理解する
DB インスタンスを作成または変更した後、そのインスタンスは、ドメインのメンバーになります。AWS コンソールは、DB インスタンスのドメインメンバーシップのステータスを示します。DB インスタンスのステータスは、以下のいずれかです。
-
joined (参加済み) – インスタンスはドメインのメンバーになっています。
-
joining (参加中) – インスタンスは、ドメインのメンバーになる途中です。
-
pending-join (参加保留中) – インスタンスのメンバーシップは保留中です。
-
メンテナンスまで参加保留中 – 次に予定されているメンテナンスウィンドウ中に、AWS がインスタンスをドメインのメンバーにできるよう試みます。
-
pending-removal (削除保留中) – ドメインからのインスタンス削除は保留中です。
-
メンテナンスまで削除保留中 – 次に予定されているメンテナンスウィンドウ中に、AWS がドメインからのインスタンスの削除を試みます。
-
failed (失敗) – 設定の問題により、インスタンスはドメインに参加できませんでした。インスタンスの変更コマンドを再発行する前に、設定を確認して修正してください。
-
removing (削除中) – インスタンスをドメインから削除しています。
ドメインのメンバーになるリクエストは、ネットワーク接続の問題や正しくない IAM ロールが原因で失敗する場合があります。例えば、DB インスタンスを作成した、または既存のインスタンスを変更したが、DB インスタンスをドメインに参加させられない場合があります。この場合、コマンドを再発行して DB インスタンスを作成または変更するか、新しく作成されたインスタンスを変更してドメインに参加させます。
Windows 認証を使用して SQL Server に接続する
Windows 認証を使用して SQL Server に接続するには、ドメインのユーザーとしてドメイン結合されたコンピュータにログインしている必要があります。SQL Server Management Studio の起動後、認証タイプとして Windows 認証を選択します (以下参照)。
SQL Server DB インスタンスを復元してドメインに追加する
SQL Server DB インスタンスの DB スナップショットまたはポイントインタイムリカバリ (PITR) を復元し、ドメインに追加できます。DB インスタンスが復元されたら、「ステップ 5: SQL Server DB インスタンスを作成または変更する」で説明している手順に従ってインスタンスを変更し、DB インスタンスをドメインに追加します。