Amazon Web Services ブログ

アカウント間の Amazon RDS DB インスタンスを単一の共有ドメインに参加させる

セットアップとメンテナンスを簡素化し、AWS Managed Microsoft AD ディレクトリのコストを削減しながら、Amazon Relational Database Service (RDS) for SQL Server DB インスタンスのセキュリティを強化するにはどうすればよいですか? AWS は、複数の AWS アカウントと Amazon VPC にデプロイされた Amazon RDS for SQL Server DB インスタンスが、AWS リージョン内の Microsoft Active Directory (AWS Managed Microsoft AD) の単一の AWS Directory Service に参加できるようになったことを発表しました。これにより、ディレクトリをセットアップしてそのセキュリティ設定を一度行えば、すべての DB インスタンスの認証に使用できるため、ディレクトリ対応データベースのワークロードを管理しやすくなります。この記事では、アカウント間および VPC 間ドメインに参加するために Amazon RDS DB インスタンスを準備する方法について学びます。

注: この記事は Amazon RDS for SQL Server 向けに書かれていますが、Amazon RDS for OracleAmazon RDS for PostgreSQL にも当てはまります。

DB インスタンスをドメインに参加させるために使用する Amazon RDS API は変更されていません。ただし、ディレクトリ、VPC、セキュリティグループを設定して、アカウント間で連携し、ディレクトリと DB インスタンスが相互に通信できるようにする必要があります。以下は、アカウントまたは VPC 全体で Amazon RDS for SQL Server DB インスタンスをドメインに参加させるために必要な手順をまとめたものです。

  1. Amazon RDS DB インスタンスを起動するアカウントとディレクトリを共有します。
    (この手順は、VPC のクロスドメイン参加の場合、つまり、ディレクトリと DB インスタンスを同じアカウントではあるけれども異なる VPC でホストしている場合はスキップできます)。
  2. ディレクトリ VPC と DB インスタンス VPC 間の VPC 接続を有効にします。
  3. Amazon RDS DB インスタンスをドメインに参加させます。

この記事では、クロスアカウントドメイン参加に関係する 2 つのアカウントを AWS Directory Service アカウントと Amazon RDS アカウントと呼びます。AWS Directory Service アカウントは AWS 管理ディレクトリを所有します。AmazonRDS アカウントは、Amazon RDS DB インスタンスを起動し、AWS Directory Service アカウントのディレクトリに参加させる予定の場所です。

図 1。アカウント間でディレクトリを共有および参加していることを示すアーキテクチャ図。

図 1アカウント間でディレクトリを共有および参加することを示すアーキテクチャ図。

開始する前に: AWS Microsoft AD ディレクトリをまだ作成していない場合は、簡単な AWS Managed Microsoft AD ディレクトリの作成ガイドに従って今すぐ作成しましょう。

ステップ 1: ディレクトリを共有する

AWS Directory Service と Amazon RDS の両方に同じアカウントを使用している場合は、ステップ 2 にスキップしてください。

ディレクトリの共有は、ソーシャルネットワークで友達リクエストを送信するのと似ています。一方の当事者が送信し、相手が承認する必要があります。ディレクトリを所有するアカウントは、ディレクトリを共有するアカウントの AWS ID を入力して共有を開始します。この例では、AWS Directory Service アカウントが共有リクエストを Amazon RDS アカウントに送信しています。

図 2。AWS Directory Service アカウントのディレクトリ d-92672a6777 が、Amazon RDS アカウント (AWS ID 555444333222) と共有されています。

図 2AWS Directory Service アカウントのディレクトリ d-92672a6777 が、Amazon RDS アカウント (AWS ID 555444333222) と共有されています。

共有が開始されると、Amazon RDS アカウントに、AWS マネジメントコンソールの「共有ディレクトリ」のリストで共有リクエストが表示されます。共有ディレクトリは、「承認待ち」ステータスでリストされます。共有ディレクトリの ID (d-92671bb3a2) は元のディレクトリの ID (d-92672a6777) とは異なることにご注意ください。

図 3。共有ディレクトリは、Amazon RDS アカウントの「共有ディレクトリ」テーブルに一覧表示され、ステータスは「承認待ち」です。

図 3共有ディレクトリは、Amazon RDS アカウントの「共有ディレクトリ」テーブルに一覧表示され、ステータスは「承認待ち」です。

Amazon RDS アカウントが共有リクエストを受け入れるまで共有ディレクトリは完全に共有されているとは見なされず、使用できません。共有リクエストが承認されると、共有ディレクトリは「共有ディレクトリ」タブに一覧表示され、ステータスは「共有」になります。

図 4。共有リクエストが受け入れられた後の共有ディレクトリページには、共有ディレクトリと Amazon RDS アカウントの元のディレクトリに関する情報が表示されます。

図 4共有リクエストが受け入れられた後の共有ディレクトリページには、共有ディレクトリと Amazon RDS アカウントの元のディレクトリに関する情報が表示されます。

Amazon RDS アカウントのディレクトリ ID は、RDS DB インスタンスをドメインに参加させるために使用する必要がある ID です。AWS Directory Service アカウントと Amazon RDS アカウントは同じディレクトリを共有しますが、ディレクトリは 2 つのアカウントで異なる ID を持っています。Amazon RDS アカウントのディレクトリ ID を使用して、Amazon RDS アカウントで RDS DB インスタンスを起動します。また、AWS Directory Service アカウントで RDS DB インスタンスを起動することにした場合は、AWS Directory Service アカウントのディレクトリ ID をそれぞれ使用します。

ステップ 2: VPC 接続を有効にする

Amazon RDS と AWS Directory Service で同じアカウントを使用している場合でも、異なるアカウントを使用している場合でも、ディレクトリ VPC と DB インスタンス VPC が相互に通信できるように、クロス VPC トラフィックを有効にする必要があります。VPC-peeringAWS Transit Gateway など、VPC を接続する方法は複数あり、ドメイン参加機能は特定の VPC に依存せず、関連する VPC が接続されていれば機能します。このステップでは、VPC ピアリングを介して 2 つの VPC 間で VPC 接続を有効にする方法を説明します。

  1. ピアリング接続を作成する
    ディレクトリ共有と同様に、ピアリングリクエストを開始して受け入れる必要がありますが、ディレクトリ共有とは異なり、いずれのアカウントからもピアリングプロセスを開始できます。ピアリング接続を作成するには、VPC ダッシュボードの「ピアリング接続」セクションに移動します。AWS Directory Service アカウントを使用している場合は、リクエスター VPC としてディレクトリ VPC を入力し、アクセプター VPC として Amazon RDS アカウントのアカウント ID と VPC ID を入力します。
  2. 他の VPC でリクエストを受け入れる
    ピアリング接続セクションの Amazon RDS アカウントには、ステータス「承認待ち」で一覧表示されている VPC ピアリング接続が表示されます。テーブルのアクションドロップダウンからリクエストを受け入れます。

    図 5。Amazon RDS アカウントの AWS Directory Service アカウントから送信されたピアリング接続リクエストを承認する

    図 5Amazon RDS アカウントの AWS Directory Service アカウントから送信されたピアリング接続リクエストを承認する

  3. VPC でルートテーブルを設定します。
    ピアリングが確立されたので、VPC ルートテーブルを設定して、VPC 間のルーティングを有効にできます。VPC ダッシュボードのルートテーブルセクションで、ディレクトリ VPC に関連付けられているルートテーブルを選択します。Amazon RDS VPC の CIDR 範囲に等しい宛先値でテーブルにルートを追加し、VPC 間に確立したピアリング接続をターゲットとして選択します。また、RDS アカウント VPC のルートテーブルにルートを追加する必要があります。ここで、宛先はディレクトリ VPC CIDR 範囲であり、ターゲットは同じピアリング接続です。

    alt図 6。AWS Directory Service VPC のルートテーブルにピアリングされた Amazon RDS アカウント VPC にルートを追加するalt

    図 6AWS Directory Service VPC のルートテーブルにピアリングされた Amazon RDS アカウント VPC にルートを追加する

    VPC が接続され、ネットワークトラフィックを相互にルーティングできるようになると、ディレクトリインスタンスとデータベースインスタンスは相互に通信できるようになります。

ステップ 3: Amazon RDS DB インスタンスをドメインに参加させる

ディレクトリが共有され、ディレクトリと DB インスタンス間のネットワーク接続が設定されたので、Amazon RDS for SQL Server DB インスタンスを作成するか、既存の DB インスタンスを変更して、クロスアカウントまたはクロス VPC ドメインに参加できます。ドメイン参加の場合、Amazon RDS から、ユーザーに代わってディレクトリサービス操作を実行するための適切なポリシーを持つロールを提供するように求められます。独自のカスタムポリシーを作成できますが、ロールには AWS マネージドの AmazonRDSDirectoryServiceAccess ポリシーを使用することをお勧めします。将来的に Amazon RDS が AWS Directory Service との統合を拡張するために追加のアクセス許可を必要とする場合、ロールにアタッチされた AWS 管理ポリシーを通じてユーザーが提供したロールに自動的に反映されます。

ロールを作成するとき、信頼できるエンティティとして Amazon RDS を選択します。これにより、Amazon RDS のロールのユースケースのリストが提供されます。ユースケースとして RDS – Directory Service を選択すると、AmazonRDSDirectoryServiceAccess ポリシーがロールに自動的にアタッチされます。

図 7。Amazon RDS アカウントでユーザーに代わって Amazon RDS がディレクトリを管理できるようにするロールを作成する

図 7Amazon RDS アカウントでユーザーに代わって Amazon RDS がディレクトリを管理できるようにするロールを作成する

これで、Amazon RDS for SQL Server DB インスタンスを共有ディレクトリに参加させる準備ができました。Amazon RDS ダッシュボードの作成または変更ページの [Microsoft SQL Server Windows Authentication] セクションで、[Browse Directory] ボタンをクリックすると、AWS リージョンで利用できるすべてのディレクトリの一覧が表示されます。このリストには、アカウントが所有するディレクトリと、他のアカウントから共有されているディレクトリのリストが表示されます。

図 8。ディレクトリブラウザには、共有ディレクトリを含む、Amazon RDS アカウントのドメイン参加に使えるすべてのディレクトリが表示されます。

図 8ディレクトリブラウザには、共有ディレクトリを含む、Amazon RDS アカウントのドメイン参加に使えるすべてのディレクトリが表示されます。

参加するディレクトリを選択して、リクエストを送信します。これで、Amazon RDS for SQL Server DB インスタンスがドメインに参加しています。この操作には数分かかります。その後、データベースがドメインで動作する準備が整います。

ドメイン参加が失敗した場合のトラブルシューティング

ドメインへの参加を正常にリクエストした後、DB インスタンスのディレクトリステータスが「失敗」とマークされている場合は、ネットワーク設定が正しくない可能性があります。2 つの VPC がピア接続されており、相互にトラフィックをルーティングできる場合でも、セキュリティグループやネットワークアクセス制御リストなどのネットワーク設定により、ディレクトリと DB インスタンス間の通信がブロックされる可能性があります。

VPC のセキュリティグループは、ポート、プロトコル、ソース、および宛先 IP に基づいて、VPC の AWS リソースとの間のネットワークトラフィックを制限する仮想ファイアウォールとして機能します。ディレクトリを作成すると、AWS Directory Service はドメインコントローラー専用のセキュリティグループを作成します。デフォルトでは、ディレクトリセキュリティグループは、Microsoft Active Directory が使用するポートおよびプロトコル上の任意のソースからの着信トラフィックを許可します。Amazon RDS では、DB インスタンスに関連付けるセキュリティグループを選択できます。セキュリティグループを指定しない場合、VPC のデフォルトセキュリティグループが適用され、グループ内のルールを変更しない限り、セキュリティグループ内からの着信トラフィックとすべての宛先へのアウトバウンドトラフィックが許可されます。DB インスタンスがドメインに正常に参加するには、DB インスタンスがアウトバウンドトラフィックをディレクトリに送信できるようにし、ディレクトリが DB インスタンスからリクエストを受信できるようにする必要があります。ディレクトリと Amazon RDS DB インスタンスのセキュリティグループがこのネットワーク要件を反映していることを確認してください。

AWS でネットワークアクセスを制御するもう 1 つのメカニズムは、ネットワークアクセスコントロールリスト (ACL) です。セキュリティグループと同様に、ポートとプロトコルに基づいてトラフィックを制限しますが、セキュリティグループとは異なり、ステートレスです。つまり、Amazon RDS DB インスタンスにディレクトリにアウトバウンドリクエストを送信できる ACL がある場合でも、データベースの ACL がディレクトリからの応答トラフィックを受け入れるように明示的に設定されていない限り、応答を受信できない可能性があります。VPC のデフォルトネットワーク ACL は、すべてのインバウンドおよびアウトバウンドトラフィックを許可します。ディレクトリまたは DB インスタンス VPC のいずれかでカスタム ACL ルールを設定した場合、Active Directory トラフィックが両方の方向に流れることを許可していることを確認してください。

未使用の共有ディレクトリを削除する

Amazon RDS アカウントで共有ディレクトリが不要になった場合は、削除して AWS のコストを削減しましょう。共有ディレクトリを削除するには、ドメインからすべての Amazon RDS DB インスタンスの参加を解除してから、Amazon RDS アカウントの共有ディレクトリを削除します。Amazon RDS アカウントの共有ディレクトリを削除しても、AWS Directory Service アカウントの共有ディレクトリは削除されず、Amazon RDS アカウントのミラーのみが削除されます。Amazon RDS for SQL Server DB インスタンスの参加を解除するには、DB インスタンスを変更し、DB インスタンスのディレクトリとして「なし」を指定します。すべての DB インスタンスが共有ディレクトリから参加解除され、ディレクトリが削除されると、Amazon RDS アカウントの共有ディレクトリのコストの発生が抑えられます。

まとめ

Amazon RDS for SQL Server と AWS Managed Microsoft AD ディレクトリを使用すると、AWS でディレクトリ対応ワークロードをシームレスに実行できます。複数のアカウントと VPC 間の Amazon RDS for SQL Server DB インスタンスを単一の AWS マネージド Microsoft AD ディレクトリに参加させることで、ディレクトリ操作とセキュリティを合理化し、コストを削減できます。この記事では、アカウント間でディレクトリを共有する方法、ディレクトリと DB インスタンス間のトラフィックを有効にする方法、および DB インスタンスをディレクトリに参加させる方法を説明しました。Amazon RDS for SQL Server DB インスタンスを AWS Directory Service のマネージドディレクトリに参加させて認証する方法の詳細については、Amazon RDS ユーザーガイドを参照してください。

アカウント間で Amazon RDS DB インスタンスをディレクトリに簡単に参加させることができましたか? または、何か問題に直面しましたか? コメント欄でご意見をお聞かせください!

 


著者について

 

Nurbolat Kusmagul は、アマゾン ウェブ サービスのソフトウェア開発エンジニアです。彼は Amazon RDS で技術的な課題に取り組むことを楽しんでいて、チームメイトや AWS のお客様から学び、知識を共有することに情熱を傾けています。