Amazon Web Services ブログ

Amazon RDS for SQL Server のセルフマネージド型 Active Directory への参加

この投稿では、Amazon Relational Database Service (Amazon RDS) for SQL Server をセルフマネージド型の Active Directory と統合する方法を説明します。以前は、RDS for SQL Server インスタンスは AWS Managed Microsoft AD ディレクトリにしか接続できませんでした。次の図に示すように、AWS Managed Microsoft AD とオンプレミス AD 間の信頼関係を結んでオンプレミス AD を接続することができます。

セルフマネージド型 Active Directory サポートの開始により、RDS for SQL Server インスタンスをホストされている場所に関係なくセルフマネージド型 AD ドメインに直接参加させることができます。AD は、企業のデータセンター、Amazon Elastic Compute Cloud (Amazon EC2)、またはその他のクラウドプロバイダーでホストできます。次の図は、セルフマネージド型の AD に参加する場合のシナリオを示しています。お客様環境と VPC 間のトラフィック用にAWS Direct Connect または VPN を設定できます。

ソリューション概要

セルフマネージド型 Active Directory で RDS for SQL Server を実装するには、まず Active Directory に次の 3 つのオブジェクトを作成する必要があります。

  • Amazon RDS for SQL Server をデプロイするための組織単位 (OU)
  • Amazon RDS for SQL Server をデプロイと管理するための AD サービスアカウント
  • 権限が制限された AD サービスアカウントの OU への委任

RDS for SQL Server インスタンスをデプロイするたびに、新しい OU と AD サービスアカウントを作成することをお勧めします。そうすることで、セキュリティの境界が広がります。

次の図は、ソリューションアーキテクチャを示しています。

AD オブジェクトの設定を簡単にするために、オブジェクトを作成して適切な権限を設定するための PowerShell スクリプトを作成しました。このスクリプトはここからダウンロードできます。

以下のセクションでは、AD OU と AD サービスアカウントを作成し、AWS Secrets ManagerAWS Key Management Service (AWS KMS) キーとシークレットを作成して Amazon RDS AD サービスアカウントの認証情報を保存する手順について説明します。

まず、Amazon RDS for SQL Server をセルフマネージド型の Microsoft AD と統合するために必要な AD オブジェクトを作成します。Amazon RDS for SQL Server をデプロイする前に、PowerShell スクリプトを使用して前提条件をすべて作成します。具体的には、このスクリプトは以下を作成します。

  • RDS-MSSQL (または任意の名前) という名前の Amazon RDS for SQL Server 用の OU
  • RDSServiceAccount (または任意の名前) という名前の Amazon RDS for SQL Server 用の AD サービスアカウントで、適切な最小権限権限が付与されている AD サービスアカウント

次に、サービスアカウント情報を保存する新しい Secrets Manager シークレットとシークレットを暗号化するための新しい KMS キーを作成します。サービスアカウント情報を保存したら、シークレットのリソース権限を更新して Amazon RDS サービスプリンシパルに GetSecretValue 権限を付与します。

最後に、RDS サブネットグループを作成してセルフマネージド型 AD と統合された RDS for SQL Server インスタンスをデプロイしてデプロイを検証します。

この記事で紹介したリソースの見積もり

独自のディレクトリを使用する場合は、必ず環境に合った情報を使用してください。

us-west-2 リージョンでは、リソースを 24 時間実行するための推定総コストは 29.54 USD です。次の表は、料金の詳細をまとめたものです。

Service Count Price per Hour (USD) Region Estimated 24 Hour Cost (USD) Calculations
Secrets Manager secret 2 $0.00056 us-west-2 $0.03 = 0.00056 * 2 * 24
t3.large EC2 Windows instance 1 $0.1108 us-west-2 $2.66 = 0.1108 *24
t3.medium EC2 Windows instance 1 $0.06 us-west-2 $1.44 = 0.06 * 24
Amazon EBS General Purpose SSD (gp3) – storage 90 $0.08 GB-Month us-west-2 $0.24 = .08 * 90 * 86400 / 2,592,000
KMS service key 1 $0.0014 us-west-2 $0.03 = 0.0014 * 24
Amazon RDS for SQL Server Standard (single AZ – db.t3.xlarge) 1 $1.044 us-west-2 $25.06 = 1.044 *24
Amazon RDS database storage (General Purpose (SSD) storage) 20 $0.115 GB-Month us-west-2 $0.08 = .115 * 20 * 86400 / 2,592,000

前提条件

この記事では、以下のリソースをデプロイする必要があります。

  • Active Directory (セルフマネージド型または AWS Managed Microsoft AD を使用)。どちらも実装ステップと連携します。この記事では、corp.example.com というドメイン名の単一ドメインコントローラーのセルフマネージド型 AD を使用します。この投稿では EC2 インスタンス上でブートストラップされたセルフマネージド型 AD を使用しているため、実稼働目的では使用しないでください。別のドメイン名を使用している場合は、必要に応じて更新してください。
  • EC2 Windows Server インスタンス (この投稿では MGMT EC2 インスタンスと呼びます) は、Active Directory 管理ツールと SQL Server Management Studio (SSMS) がインストールされた状態で AD に参加します。

新しい VPC に前提条件をデプロイするのに役立つ AWS CloudFormation テンプレートを提供しています。テンプレートはここからダウンロードできます。

CloudFormation テンプレートをデプロイ

CloudFormation テンプレートをデプロイするには、以下の手順を実行します。

  1. AWS CloudFormation コンソールで、[スタックの作成] を選択します。
  2. [テンプレートファイルのアップロード] を選択し、[ファイルを選択] を選択します。
  3. ダウンロードした CloudFormation テンプレートを参照し、[次へ] を選択します。
  4. [スタック名] に RDS-Self-AD と入力します。
  5. パラメータ」セクションはデフォルトのままにします。
  6. スタックオプションの設定」ページで、デフォルトのままにして [次へ] を選択します。
  7. スタックの確認」ページで、「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。」をチェックして、[送信] を選択します。

Active Directory OU とサービスアカウントの作成

Active Directory OU とサービスアカウントを設定するには、次の手順を実行します。

  1. Secrets Manager コンソールで、OnPremAdministratorSecret シークレットに移動します。
  2. シークレット詳細ページで [シークレットの値を取得する] を選択します。
  3. 後で使用できるように、パスワードのキー値を書き留めておきます。
  4. AWS Systems Manager Fleet Manager のリモートデスクトップコンソールを開きます。
  5. [新しいセッションを追加] を選択し、次に MGMT EC2 インスタンスノードを選択して [追加] を選択します。
  6. ユーザー認証情報を選択し、以下を入力します。
    1. 「ユーザー名」には Administrator と入力します。
    2. 「パスワード」には、OnPremAdministratorSecret シークレットから取得した値を入力します。
  7. [接続] を選択します。
  8. OU とサービスアカウントを作成する PowerShell スクリプトをここからダウンロードします。
  9. [スタート] を選択 (右クリック) し、[Windows PowerShell (管理者)] を選択します。
  10. Windows PowerShell ウィンドウで、スクリプトをダウンロードしたディレクトリにいることを確認し、次のコードを実行します (これを独自の環境にデプロイする場合は、$RDSDeployment ハッシュテーブル変数を適切な値に更新してください)。
$RDSDeployment = @{
    RdsOUBaseDn       = 'DC=corp,DC=example,DC=com'
    RdsOUName         = 'RDS-MSSQL'
    RdsSvcAccountName = 'RdsServiceAccount'
    RdsSvcAccountPw   = Get-Credential -Message 'Please provide a password for the RDS Service Account RdsServiceAccount' -User 'RdsServiceAccount' -ErrorAction Stop | Select-Object -ExpandProperty 'Password'
}

.\Set-RDSAdObjects.ps1 @RDSDeployment

スクリプトの出力は以下のようになるはずです。

PS C:\temp> .\Set-RDSAdObjects.ps1 @RDSDeployment
Getting AD domain information.
Getting RootDSE information.
Getting computer SchemaNamingContext.
Getting ExtendedRightsMap.
Creating OU RDS-MSSQL.
Creating RDS Service Account RdsServiceAccount.
Getting RdsServiceAccount SID.
Creating ACL object S-1-5-21-1232016207-3383558643-744262169-1104 CreateChild, DeleteChild Allow bf967a86-0de6-11d0-a285-00aa003049e2 
All 00000000-0000-0000-0000-000000000000.
Getting ACL for OU=RDS-MSSQL,DC=corp,DC=example,DC=com and adding new rule.
Setting ACL for OU=RDS-MSSQL,DC=corp,DC=example,DC=com.
Creating ACL object S-1-5-21-1232016207-3383558643-744262169-1104 Self Allow f3a64788-5306-11d1-a9c5-0000f80367c1 Descendents bf967a86
-0de6-11d0-a285-00aa003049e2.
Getting ACL for OU=RDS-MSSQL,DC=corp,DC=example,DC=com and adding new rule.
Setting ACL for OU=RDS-MSSQL,DC=corp,DC=example,DC=com.
Creating ACL object S-1-5-21-1232016207-3383558643-744262169-1104 Self Allow 72e39547-7b18-11d1-adef-00c04fd8d5cd Descendents bf967a86
-0de6-11d0-a285-00aa003049e2.
Getting ACL for OU=RDS-MSSQL,DC=corp,DC=example,DC=com and adding new rule.
Setting ACL for OU=RDS-MSSQL,DC=corp,DC=example,DC=com.

Amazon RDS サービスアカウント認証情報を保存するための KMS キーとシークレットの作成

適切な委任でターゲット OU とサービスアカウントを作成したので、次は Secrets Manager シークレットにサービスアカウント情報を保存する必要があります。

KMS キーのセットアップ

KMS キーを設定するには、次の手順を実行します。

  1. AWS KMS コンソールのナビゲーションペインで [カスタマー管理型のキー] を選択します。
  2. [キーの作成] を選択します。
  3. キーのタイプで [対称] を選択します。
  4. キーの使用で [暗号化および復号化] を選択します。
  5. 詳細オプション」セクションのキーマテリアルオリジンで [KMS] を選択します。
  6. リージョンごとには、[単一リージョンキー] を選択します。
  7. [次へ] を選択します。
  8. ラベルを追加」ページで、エイリアスを入力し (この投稿では RDS-Self-Ad と入力します)、[次へ] を選択します。
  9. キーの管理アクセス許可を定義」ページで、IAM ユーザーまたはロールを選択し、[次へ] を選択します。
  10. キーの使用アクセス許可を定義」ページで IAM ユーザーまたはロールを選択し、[次へ] を選択します。
  11. レビュー」ページで、選択内容を確認し、[完了] を選択します。
  12. AWS KMS コンソールで、作成したキーのエイリアスを選択します。
  13. [キーポリシー] タブで [ポリシービューへの切り替え] を選択し、[編集] を選択します。
  14. キーポリシーに以下を追加し、[変更の保存] を選択します。
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "rds.amazonaws.com"
    ]
  },
  "Action": "kms:Decrypt",
  "Resource": "*"
}

注意 : 暗号化キーには、AWS のデフォルト KMS キーを使用しないでください。AWS KMS キーは、セルフマネージド型 AD に参加させたい RDS for SQL Server DB インスタンスと同じ AWS アカウントで作成してください。

サービスアカウントの認証情報を Secrets Manager シークレットへ保存

認証情報を Secrets Manager シークレットに保存するには、以下の手順を実行します。

  1. Secrets Manager コンソールで、[新しいシークレットを保存する] を選択します。
  2. シークレットのタイプで [その他のシークレットのタイプ] を選択します。
  3. キー / 値のペアの場合は、以下のキーペアを追加します。
    1. キーには CUSTOMER_MANAGED_ACTIVE_DIRECTORY_USERNAME と入力します。
    2. 値には PowerShell スクリプトの RdsSvcAccountName パラメータに設定した名前を入力します。
  4. [+ 行を追加] を選択し、別のキーペアを追加します。
    1. キーには CUSTOMER_MANAGED_ACTIVE_DIRECTORY_PASSWORD と入力します。
    2. 値には PowerShell スクリプトの RdsSvcAccountPw パラメーターに設定したパスワードを入力します。
  5. 暗号化キーには、先ほど作成したキーを選択します。
  6. [] を選択します。
  7. シークレット名前には名前を入力します (この投稿では RDS-Self を使用します)。
  8. リソースのアクセス許可セクションで、[許可を編集] を選択します。
  9. 次のリソースポリシーを入力し、[保存] を選択します。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "rds.amazonaws.com"
            ]
          },
          "Action": "secretsmanager:GetSecretValue",
          "Resource": "*",
          "Condition":
          {
              "StringEquals":
              {
                  "aws:sourceAccount": "123456789012"
              },
                  "ArnLike":
              {
                  "aws:sourceArn": "arn:aws:rds:us-west-2:123456789012:db:*"
              }
          }
        }
      ]
    }


    注意 :このブログで使用されている AWS アカウント ID は、デモンストレーションのみを目的としています。読者は AWS アカウント ID を適宜変更する必要があります。

  10. ローテーションの設定 – オプション」ページで、デフォルトのままにし、[] を選択します。
  11. レビュー」ページで選択内容を確認し、[保存] を選択します。
  12. Secrets Manager コンソールでリフレッシュアイコンをクリックし、先ほど作成したシークレット名を選択します。
  13. シークレットの詳細」ページで、RDS for SQL Server インスタンスをデプロイするときに使用するシークレットの ARN を書き留めておきます。

RDS サブネットグループの作成

このステップでは、DB サブネットグループを作成します。DB サブネットグループは、DB インスタンス用に指定する VPC 内のサブネットの集まりです。各 DB サブネットグループには、特定のリージョンの少なくとも 2 つのアベイラビリティーゾーンにサブネットが必要です。VPC に DB インスタンスを作成するときは、DB サブネットグループを選択します。Amazon RDS は DB サブネットグループから、DB インスタンスに関連付けるサブネットとそのサブネット内の IP アドレスを選択します。DB はサブネットを含むアベイラビリティーゾーンを使用します。

  1. Amazon RDS コンソールのナビゲーションペインで [サブネットグループ] を選択します。
  2. [DB サブネットグループの作成] を選択します。
  3. 名前に名前を入力します (この投稿では RDS-Self-Ad と入力します)。
  4. 説明には説明を入力します (この投稿では RDS-Self-Ad と入力します)。
  5. VPC では、RDS インスタンスをデプロイしたいサブネットを含む VPC を選択します。
  6. アベイラビリティーゾーンでは、RDS インスタンスをデプロイしたいサブネットを含むアベイラビリティーゾーンを選択します。
  7. サブネットでは、RDS インスタンスをデプロイしたいサブネットを選択します。
  8. [作成] を選択します。

セルフマネージド型 AD と統合された RDS for SQL Server インスタンスのデプロイ

このステップでは、RDS for SQL Server インスタンスをデプロイし、セルフマネージド型 AD に参加させます。RDS for SQL Server インスタンスをデプロイするプロセス全体を説明するわけではなく、RDS for SQL Server インスタンスを AD に参加させるために必要な構成設定についてのみ説明します。デプロイ手順の詳細については、「DB インスタンスの作成」を参照してください。

  1. Amazon RDS コンソールのナビゲーションペインで [データベース] を選択します。
  2. [データベースを作成] を選択します。
  3. [Microsoft SQL Server Windows 認証を有効化] をチェックします。
  4. Windows authentication type には、[セルフマネージド型の Microsoft Active Directory] を選択します。
  5. Fully qualified domain name には、RDS インスタンスが使用するドメインの名前を入力します (この記事では corp.example.com を使用します)。
  6. Domain organizational unit には、Amazon RDS AD オブジェクトの場所を入力します (この投稿では OU=RDS-MSSQL、DC=corp、DC=Example、DC=com と入力します)。
  7. Authorization secret ARN には、作成したサービスアカウント認証情報を含むシークレットの ARN を入力します。
  8. Primary DNS には、セルフマネージド型 AD を解決できる DNS サービスの DNS リゾルバー IP を入力します。
  9. Secondary DNS には、セルフマネージド型 AD を解決できる DNS サービスの DNS リゾルバー IP を入力します。
  10. その他の設定をすべて検証してください。

デプロイの検証

RDS for SQL Server インスタンスがアクティブな場合は、インスタンスをデプロイしたときに設定したローカルサービスアカウント認証情報を使用して SSMS で MGMT EC2 インスタンスノードから RDS for SQL Server インスタンスに接続できます。ログインしたら、corp\Administrator アカウントに RDS for SQL Server インスタンスへの認証を行う権限を付与します。以下のステップを完了してください。

  1. Secrets Manager コンソールで、OnPremAdministratorSecret シークレットに移動します。
  2. シークレット詳細ページの「シークレット値」セクションで、[シークレットの値を取得する] を選択します。
  3. corp\Administrator アカウントのパスワードをメモしておき、後の手順で使用します。
  4. AWS Systems Manager Fleer Manager のリモートデスクトップコンソールを開きます。
  5. [新しいセッションを追加] を選択し、MGMT EC2 インスタンスノードを選択して [追加] を選択します。
  6. [ユーザー認証情報] を選択し、以下を入力します。
    1. 「ユーザー名」には corp\Administrator と入力します。
    2. 「パスワード」には、OnPremAdministratorSecret シークレット用にコピーしたパスワードを入力します。
  7. [接続] を選択します。
  8. 開始」を選択して SSMS を起動します。
  9. ダイアログボックスで、次の情報を入力します。
    1. サーバー名」には、RDS for SQL Server インスタンスエンドポイントの名前を入力します。
    2. 認証」には、[SQL Server 認証] を選択します。
    3. ログイン」には、ディレクトリを起動したときに設定したユーザー名を入力します。
    4. Password」には、ディレクトリを起動したときに設定したパスワードを入力します。
  10. [接続] を選択します。
  11. SSMS に入ったら、ナビゲーションペインで [セキュリティとログイン] を展開します。
  12. [ログイン] を選択 (右クリック) し、[新規ログイン] を選択します。
  13. ログイン名として corp\Administrator と入力し、[OK] を選択します。
  14. [スタート] を選択し、新しい SSMS ウィンドウを開きます。
  15. ダイアログボックスで、次の情報を入力します。
    1. サーバー名」には、RDS for SQL Server インスタンスエンドポイントの名前を入力します。
    2. 認証」には [Windows 認証] を選択します。
  16. [接続] を選択します。

セルフマネージド型 Active Directory のユーザーを使用して RDS for SQL Server インスタンスに正常にサインインすることができました。

後片付け

この投稿によってアカウントにデプロイされたリソースを削除するには、次の手順を実行します。

  1. デプロイした RDS for SQL Server インスタンスを削除します。手順については、「DB インスタンスの削除」を参照してください。
    注意 : この手順だけでは DB サブネットグループは削除されませんので、「サブネットグループ」のメニューから作成した DB サブネットグループを削除してください。
  2. 作成した RDS-Self-AD シークレットを削除します。手順については、「AWS Secrets Manager シークレットを削除する」を参照してください。
  3. 作成した RDS-Self-AD キーを削除します。手順については、「AWS KMS キーの削除」を参照してください。
  4. この記事の前提条件を満たすリソースをデプロイした CloudFormation スタックを削除します。手順については、「AWS CloudFormation コンソールでのスタックの削除」を参照してください。

まとめ

この投稿では、セルフマネージド型 AD と統合された RDS for SQL Server インスタンスをデプロイする方法を示しました。ここではこの新機能に必要なすべての Active Directory 前提条件を簡単にセットアップできるサンプル PowerShell スクリプトを使用しました。次に、Amazon RDS AD サービスアカウントの認証情報を含む Secrets Manager シークレットを暗号化する KMS キーを作成してセルフマネージド型の Microsoft AD と統合された新しい RDS for SQL Server インスタンスをデプロイしました。最後にセルフマネージド型の Microsoft AD ユーザーが RDS for SQL Server インスタンスへの認証を受けることを検証する方法を示しました。

この新しくてエキサイティングな機能に関する今後の投稿に注目してください。質問やコメントがある場合は、以下に追加してください。


著者について

Jeremy Girven は、AWS 上の Microsoft ワークロードを専門とするソリューションアーキテクトです。Microsoft Active Directory で 17 年以上、業界で 25 年以上の経験があります。彼の楽しいプロジェクトの 1 つは、SSMS を使用して AWS の Active Directory ビルドプロセスを自動化することです。詳細については、Active Directory AWS パートナーソリューションをご覧ください。

Siva Thang は、AWS のパートナーであるシニアソリューションアーキテクトです。専門はデータベースと分析で、エンジニアリングの修士号も取得しています。彼はお客様がクラウドで最新のデータプラットフォームを構築できるよう支援することに情熱を注いでいます。これには最新のリレーショナルデータベースへの移行や、分析と機械学習のための大規模なデータレイクとデータパイプラインの構築が含まれます。また、最新のデータベースと分析をテーマにしたさまざまな会議やサミットでプレゼンテーションを行うことも好きです。

Pradipta Kishore Das は、データベース管理システムに関する豊富な経験を持ち、Microsoft SQL Server で 18 年以上の経験があります。彼は現在、アマゾンウェブサービスでデータベースエンジニアとして働いています。Amazon RDS チームと協力して、商用データベースエンジンと SQL Server を中心に、顧客向けの新しいエキサイティングな機能を構築しています。過去には、Microsoft で複雑な SQL Server の問題のトラブルシューティングとデバッグを担当するテクニカルリードを務めていました。彼はさまざまな規模の環境に取り組んできました。

 

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。