RDS Custom for SQL Server インスタンスの Windows 認証のセットアップ - Amazon Relational Database Service

RDS Custom for SQL Server インスタンスの Windows 認証のセットアップ

AD ドメインに参加している RDS Custom for SQL Server DB インスタンスを所有するすべての AWS アカウント アカウントで、専用の OU とその OU を対象としたサービス認証情報を作成することをお勧めします。OU とサービス認証情報を専用にすることで、アクセス許可の競合を回避し、最小特権の原則に従うことができます。

Active Directory レベルのグループポリシーは、AWS のオートメーションやアクセス許可と競合する可能性があります。RDS Custom for SQL Server 用に作成した OU にのみ適用される GPO を選択することをお勧めします。

  • セルフマネージド AD またはオンプレミス AD で、OU ドメインユーザーや AD ドメインユーザーを作成するには、ドメインコントローラーをドメイン管理者として接続できます。

  • ユーザーとグループを AWS Directory Service ディレクトリに作成するには、管理インスタンスに接続していること、およびユーザーとグループを作成する権限を持つユーザーとしてログインしていることが必要です。詳細については、「AWS Directory Service 管理ガイド」の「AWS Managed Microsoft AD でユーザーとグループを管理する」を参照してください。

  • Amazon EC2 Windows Server インスタンスから Active Directory を管理するには、EC2 インスタンスに Active Directory ドメインサービスと Active Directory Lightweight Directory サービスツールをインストールする必要があります。詳細については、「AWS Directory Service 管理ガイド」の「AWS Managed Microsoft AD の Active Directory 管理ツールをインストールする」を参照してください。

  • これらのツールは、管理しやすいように、RDS Custom for SQL Server DB インスタンスではなく、別の管理用の EC2 インスタンスにインストールすることをお勧めします。

AD ドメインサービスアカウントの要件は以下のとおりです。

  • コンピュータをドメインに参加させるために、委任されたアクセス許可を持つサービスアカウントが AD ドメインに必要です。ドメインサービスアカウントは、特定のタスクを実行するアクセス許可を委任された AD 内のユーザーアカウントです。

  • RDS Custom for SQL Server インスタンスを参加させる組織単位のドメインサービスアカウントに以下のアクセス許可を委任します。

    • DNS ホスト名への書き込みを検証する機能

    • サービスプリンシパル名への書き込みを検証する機能

    • コンピュータオブジェクトを作成および削除する

  • セルフマネージド AD およびオンプレミス AD の場合、ドメインサービスアカウントは「AWS 委任されたドメイン名システム管理者」グループのメンバーである必要があります。

  • AWS Managed Microsoft AD の場合、ドメインサービスアカウントは「DnsAdmins」グループのメンバーである必要があります。

これらは、コンピュータオブジェクトをセルフマネージド AD および AWS Managed Microsoft AD に参加させるために必要な最小限のアクセス許可のセットです。詳細については、Microsoft Windows Server ドキュメントの「エラー: 制御が委任された管理者以外のユーザーがコンピューターをドメインに参加しようとすると、アクセスが拒否される」を参照してください。

重要

DB インスタンスの作成後に RDS Custom for SQL Server が組織単位 (OU) に作成したコンピュータオブジェクトを移動しないでください。関連オブジェクトを移動すると、RDS Custom for SQL Server DB インスタンスが誤って設定される可能性があります。Amazon RDS で作成したコンピュータオブジェクトを移動する必要がある場合は、ModifyDBInstance アクションを使用して、コンピュータオブジェクトの目的の場所でドメインパラメータを変更します。

ステップ 1: AD に組織単位 (OU) を作成する

AD に組織単位を作成するには、次の手順を実行します。

AD に OU を作成する
  1. ドメイン管理者としてドメイン AD に接続します。

  2. [Active Directory ユーザーとコンピュータ] を開き、OU を作成するドメインを選択します。

  3. ドメインを右クリックし、[新規][組織単位] の順に選択します。

  4. OU の名前を入力します。

    [誤って削除されないようにコンテナを保護] を有効にします。

  5. [OK] を選択します。新しい OU がドメインの下に表示されます。

AWS Managed Microsoft AD の場合、この OU の名前は、ディレクトリの作成時に入力した NetBIOS 名に基づきます。この OU は AWS が所有し、AWS 関連のディレクトリオブジェクトをすべて含んでいます。ユーザーは、これらのオブジェクトに対して完全な制御権を付与されます。デフォルトでは、この OU の下に 2 つの子 OU (Computers および Users) が存在します。RDS Custom が作成する新しい OU は、NetBIOS に基づく OU の子です。

ステップ 2: AD に AD ドメインユーザーを作成する

ドメインユーザーの認証情報は Secrets Manager のシークレットに使用されます。

AD に AD ドメインユーザーを作成する
  1. [Active Directory ユーザーとコンピュータ] を開き、ユーザーを作成するドメインと OU を選択します。

  2. [ユーザー] オブジェクトを右クリックして、[新規] を選択し、[ユーザー] を選択します。

  3. ユーザーの姓名とログイン名を入力します。[次へ] をクリックします。

  4. ユーザーのパスワードを入力します。[ユーザーは次回のログイン時にパスワードを変更する必要があります] または [アカウントは無効になっています] を選択しないでください。[次へ] をクリックします。

  5. [OK] をクリックします。新しいユーザーがドメインの下に表示されます。

ステップ 3: セルフマネージドまたは AWS Managed Microsoft AD で AD ユーザーに制御を委任する

ドメイン内の AD ドメインユーザーに制御を委任するには
  1. [Active Directory ユーザーとコンピュータ] MMC スナップインを開き、ドメインを選択します。

  2. 前に作成した OU を右クリックし、[制御を委任] を選択します。

  3. [委任制御ウィザード] で、[次へ] を選択します。

  4. [ユーザーまたはグループ] セクションで、[追加] をクリックします。

  5. [ユーザー、コンピューター、またはグループを選択] で、作成した AD ユーザーを入力し、[名前を確認] をクリックします。AD ユーザーのチェックが成功したら、[OK] をクリックします。

  6. [ユーザーまたはグループ] セクションで、AD ユーザーが追加されたことを確認し、[次へ] をクリックします。

  7. [委任するタスク] セクションで、[委任するカスタムタスクを作成] を選択し、[次へ] をクリックします。

  8. [Active Directory オブジェクトタイプ] セクションで、次の操作を行います。

    [フォルダ内の次のオブジェクトのみ] を選択します。

    [コンピュータオブジェクト] を選択します。

    [このフォルダに選択したオブジェクトを作成] を選択します。

    [このフォルダ内の選択したオブジェクトを削除] を選択し、[次へ] をクリックします。

  9. [アクセス許可] セクションで、次の操作を行います。

    [全般] を選択したままにします。

    [DNS ホスト名への検証済み書き込み] を選択します。

    [サービスプリンシパル名への検証済み書き込み] を選択し、[次へ] をクリックします。

  10. [制御の委任を完了ウィザード] で、設定を確認して [完了] をクリックします。

ステップ 4: シークレットを作成する

シークレットは、アクティブディレクトリに含める RDS Custom for SQL Server DB インスタンスがある同じ AWS アカウントおよびリージョンに作成します。「ステップ 2: AD に AD ドメインユーザーを作成する」で作成した AD ドメインユーザーの認証情報を保存します。

Console
  • AWS Secrets Manager で、[新しいシークレットを保存] を選択します。

  • [Secret type] (シークレットタイプ) で、[Other type of secret] (他の種類のシークレット) を選択します。

  • [キー/値のペア] で、2 つのキーを追加します。

    • 最初のキー SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME で、値として AD ユーザーの名前を入力します。

    • 2 番目のキーとして SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD を入力し、ドメインの AD ユーザーのパスワードを入力します。

  • [暗号化キー] に、RDS Custom for SQL Server インスタンスの作成に使用したのと同じ AWS KMS キーを入力します。

  • [シークレット名] で、do-not-delete-rds-custom- で始まるシークレット名を選択し、このシークレットにアクセスすることをインスタンスプロファイルに許可します。シークレットに別の名前を選択する場合は、RDSCustomInstanceProfile を更新して [シークレット名] にアクセスします。

  • (オプション) [説明] に、シークレット名の説明を入力します。

  • タグとして Key="AWSRDSCustom",Value="custom-sqlserver" を追加します。

  • [保存][次へ] の順にクリックします。

  • [ローテーションの設定] は、デフォルト値のままにして、[次へ] を選択します。

  • シークレットの設定を確認し、[保存] をクリックします。

  • 新しく作成したシークレットを選択し、[シークレット ARN] の値をコピーします。この値は、次のステップで Active Directory を設定するときに使用します。

CLI

シークレットを作成するには、CLI で次のコマンドを実行します。

# Linux based aws secretsmanager create-secret \ --name do-not-delete-rds-custom-DomainUserCredentails \ --description "Active directory user credentials for managing RDS Custom" \ --secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" \ --kms-key-id <RDSCustomKMSKey> \ --tags Key="AWSRDSCustom",Value="custom-sqlserver" # Windows based aws secretsmanager create-secret ^ --name do-not-delete-rds-custom-DomainUserCredentails ^ --description "Active directory user credentials for managing RDS Custom" ^ --secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" ^ --kms-key-id <RDSCustomKMSKey> ^ --tags Key="AWSRDSCustom",Value="custom-sqlserver"

ステップ 5: RDS Custom for SQL Server DB インスタンスを作成または変更する

ディレクトリで使用する RDS Custom for SQL Server DB インスタンスを作成または変更します。コンソール、CLI、RDS API を使用して DB インスタンスとディレクトリを関連付けることができます。これには以下の 2 つの方法があります。

注記

RDS Custom for SQL Server インスタンスを既に手動で AD に参加させている場合は、ネットワーク設定ポートルールネットワーク検証の設定を確認し、ステップ 1 からステップ 4 までを完了します。--domain-fqdn--domain-ou--domain-auth-secret-arn を AD に更新して、ドメイン参加の認証情報と設定を RDS Custom に登録し、モニタリング、CNAME の登録、復旧アクションの実行ができるようにします。

AWS CLI を使用する場合は、DB インスタンスが、作成したディレクトリを使用できるように、以下のパラメータが必要です。

  • --domain-fqdn パラメータには、セルフマネージド AD の完全修飾ドメイン名を使用します。

  • --domain-ou パラメータには、セルフマネージド AD で作成した OU を使用します。

  • --domain-auth-secret-arn パラメータには、作成したシークレット ARN の値を使用します。

重要

DB インスタンスを変更してセルフマネージド AD ドメインや AWS Managed Microsoft AD に参加させたり、これらから削除したりする場合、変更を有効にするには DB インスタンスを再起動する必要があります。変更をすぐに適用するか、次のメンテナンスウィンドウまで待つかを選択できます。[すぐに適用] オプションを選択すると、シングル AZ DB インスタンスのダウンタイムが発生します。マルチ AZ DB クラスターは、再起動を完了する前にフェイルオーバーを実行します。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。

次の CLI コマンドは、新しい RDS Custom for SQL Server DB インスタンスを作成し、それをセルフマネージドドメインまたは AWS Managed Microsoft AD ドメインに参加させます。

Linux、macOS、Unix の場合:

aws rds create-db-instance \ --engine custom-sqlserver-se \ --engine-version 15.00.4312.2.v1 \ --db-instance-identifier my-custom-instance \ --db-instance-class db.m5.large \ --allocated-storage 100 --storage-type io1 --iops 1000 \ --master-username my-master-username \ --master-user-password my-master-password \ --kms-key-id my-RDSCustom-key-id \ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \ --domain-fqdn "corp.example.com" \ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \ --db-subnet-group-name my-DB-subnet-grp \ --vpc-security-group-ids my-securitygroup-id \ --no-publicly-accessible \ --backup-retention-period 3 \ --port 8200 \ --region us-west-2 \ --no-multi-az

Windows の場合:

aws rds create-db-instance ^ --engine custom-sqlserver-se ^ --engine-version 15.00.4312.2.v1 ^ --db-instance-identifier my-custom-instance ^ --db-instance-class db.m5.large ^ --allocated-storage 100 --storage-type io1 --iops 1000 ^ --master-usernamemy-master-username ^ --master-user-password my-master-password ^ --kms-key-id my-RDSCustom-key-id ^ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^ --domain-fqdn "corp.example.com" ^ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^ --db-subnet-group-name my-DB-subnet-grp ^ --vpc-security-group-ids my-securitygroup-id ^ --no-publicly-accessible ^ --backup-retention-period 3 ^ --port 8200 ^ --region us-west-2 ^ --no-multi-az
重要

AWS Managed Microsoft AD の NetBIOS が corpexample である場合は、それが OU 自体として表示されます。以前に作成した新しい OU は、ネストされた OU として表示されます。AWS Managed Microsoft AD の場合、--domain-ou"OU=RDSCustomOU,OU=corpexample,DC=corp,DC=example,DC=com" に設定します。

次のコマンドは、Active Directory ドメインを使用するように既存の RDS Custom for SQL Server DB インスタンスを変更します。

Linux、macOS、Unix の場合:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --domain-fqdn "corp.example.com" \ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \

Windows の場合:

aws rds modify-db-instance ^ --db-instance-identifier my-custom-instance ^ --domain-fqdn "corp.example.com" ^ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^

次の CLI コマンドは、Active Directory ドメインから RDS Custom for SQL Server DB インスタンスを削除します。

Linux、macOS、Unix の場合:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --disable-domain

Windows の場合:

aws rds modify-db-instance ^ --db-instance-identifier my-custom-instance ^ --disable-domain

コンソールを使用してインスタンスを作成または変更する場合は、[Microsoft SQL Server Windows 認証を有効にする] をクリックして、次のオプションを表示します。

Microsoft SQL Server の Windows 認証ディレクトリ

ドメイン FQDN がドメインコントローラーの IP アドレスに解決されていることを確認するのはお客様の責任です。ドメインコントローラー IP が解決されない場合、ドメイン参加オペレーションは失敗しますが、RDS Custom for SQL Server インスタンスの作成は成功します。トラブルシューティング情報については、「Active Directory のトラブルシューティング」を参照してください。

ステップ 6: Windows 認証の SQL Server ログインを作成する

Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同じように SQL Server DB インスタンスに接続します。DB インスタンスは AD ドメインに参加しているため、SQL Server のログインとユーザーをプロビジョニングできます。これは、AD ドメインの AD ユーザーとグループユーティリティから行います。データベースへのアクセス許可は、これらの Windows ログインに付与され無効化されている標準の SQL サーバーのアクセス許可によって管理されています。

AD ユーザーが SQL Server で認証するには、AD ユーザーまたはそのユーザーがメンバーになっている Active Directory グループに SQL Server Windows ログインが必要です。これらの SQL Server ログインでアクセスを許可したり取り消したりして、細分化されたアクセスコントロールを処理します。AD ユーザーが SQL Server ログインを持っていないか、そのようなログインを持つ AD グループに属していない場合、SQL Server DB インスタンスにアクセスすることはできません。

AD SQL Server ログインを作成するには、ALTER ANY LOGIN アクセス許可が必要です。このアクセス許可を持つログインをまだ作成していない場合は、SQL Server 認証を使用して DB インスタンスのマスターユーザーとして接続し、マスターユーザーのコンテキストで AD SQL Server ログインを作成します。

AD ユーザーまたは AD グループの SQL Server ログインを作成するには、次に示すようなデータ定義言語 (DDL) コマンドを実行できます。

USE [master] GO CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english]; GO

以上により、ドメインのユーザー (人とアプリケーションの両方) は Windows 認証を使用して、ドメインに参加しているクライアントマシンから RDS Custom for SQL Server インスタンスに接続できます。

ステップ 7: Kerberos または NTLM 認証の使用

RDS エンドポイントを使用した NTLM 認証

各 Amazon RDS DB インスタンスにはエンドポイントがあり、各エンドポイントには DB インスタンスの DNS 名とポート番号があります。SQL クライアントアプリケーションを使用して DB インスタンスに接続するには、DB インスタンスの DNS 名とポート番号が必要です。NTLM 認証を使用して認証するには、RDS エンドポイントに接続する必要があります。

計画されたデータベースメンテナンス時や計画外のサービス中断時に、Amazon RDS は自動的に最新のセカンダリデータベースにフェイルオーバーするため、オペレーションは手動の介入なしで速やかに再開できます。プライマリインスタンスおよびセカンダリインスタンスは、同じエンドポイントを使用し、エンドポイントの物理ネットワークアドレスは、フェイルオーバープロセスの一環としてセカンダリに移行します。フェイルオーバーが発生した場合、アプリケーションを再構成する必要はありません。

Kerberos 認証

RDS Custom for SQL Server の Kerberos ベースの認証では、特定のサービスプリンシパル名 (SPN) に接続する必要があります。ただし、フェイルオーバーイベント後、アプリケーションは新しい SPN を認識しない場合があります。これに対処するために、RDS Custom for SQL Server には Kerberos ベースのエンドポイントが用意されています。

Kerberos ベースのエンドポイントは、特定の形式に従います。RDS エンドポイントが rds-instance-name.account-region-hash.aws-region.rds.amazonaws.com である場合、対応する Kerberos ベースのエンドポイントは rds-instance-name.account-region-hash.aws-region.awsrds.fully qualified domain name (FQDN) になります。

例えば、RDS エンドポイントが ad-test.cocv6zwtircu.us-east-1.rds.amazonaws.com で、ドメイン名が corp-ad.company.com である場合、Kerberos ベースのエンドポイントは ad-test.cocv6zwtircu.us-east-1.awsrds.corp-ad.company.com になります。

この Kerberos ベースのエンドポイントを使用すると、プライマリ SQL Server インスタンスの新しい SPN を指すようにエンドポイントが自動的に更新されるため、フェイルオーバーイベント後でも、Kerberos を使用して SQL Server インスタンスで認証できます。

CNAME の検索

CNAME を検索するには、ドメインコントローラーに接続し、[DNS マネージャー] を開きます。[前方参照ゾーン] と FQDN に移動します。

awsrdsaws-region、および [アカウントとリージョン固有のハッシュ] をナビゲートします。

RDS Custom EC2 インスタンスを接続し、CNAME を使用してデータベースにローカルに接続しようとすると、接続では Kerberos の代わりに NTLM 認証を使用します。

リモートクライアントから CNAME を接続した後に NTLM 接続が返された場合は、必要なポートが許可リストに登録されているかどうかを確認します。

接続で Kerberos を使用しているかどうかを確認するには、次のクエリを実行します。

SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SSPID;