PostgreSQL DB インスタンスの Kerberos 認証のセットアップ - Amazon Relational Database Service

PostgreSQL DB インスタンスの Kerberos 認証のセットアップ

AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) を使用して、PostgreSQL DB インスタンスに Kerberos 認証をセットアップします。Kerberos 認証をセットアップするには、次のステップに従います。

ステップ 1: AWS Managed Microsoft AD を使用してディレクトリを作成する

AWS Directory Service はフルマネージド型の Active Directory を AWS クラウド内に作成します。AWS Managed Microsoft AD ディレクトリを作成すると、AWS Directory Service が 2 つのドメインコントローラーと DNS サーバーを作成します。ディレクトリサーバーは、VPC 内の異なるサブネットで作成されます。この冗長性によって、障害が発生してもディレクトリにアクセス可能な状態を維持できます。

AWS Managed Microsoft AD ディレクトリを作成すると、AWS Directory Service がユーザーに代わって次のタスクを実行します。

  • VPC 内に Active Directory を設定します。

  • ユーザー名 Admin と指定されたパスワードを使用してディレクトリ管理者アカウントを作成します。このアカウントを使用してディレクトリを管理します。

    重要

    このパスワードは必ず保管してください。AWS Directory Service にはこのパスワードは保存されず、復元やリセットもできません。

  • ディレクトリコントローラー用セキュリティグループを作成します。セキュリティグループは、PostgreSQL DB インスタンスとの通信を許可する必要があります。

AWS Directory Service for Microsoft Active Directory を起動すると、AWS は組織単位 (OU) を作成します。OU にはディレクトリのオブジェクトがすべて含まれています。この OU はドメインルートにあります。OU にはディレクトリを作成する際に入力した NetBIOS 名があります。ドメインルートは AWS が所有し、管理します。

Admin ディレクトリに作成された AWS Managed Microsoft AD アカウントには、OU に対して頻繁に実行される管理行為の権限が含まれています。

  • ユーザーを作成、更新、削除する

  • ファイルやプリントサーバーなどのドメインにリソースを追加して、追加したリソースへのアクセス許可を OU のユーザーとグループに割り当てる

  • 追加の OU やコンテナを作成する

  • 権限を委譲する

  • 削除されたオブジェクトを Active Directory のごみ箱から元に戻す

  • Active Directory Web Service で Windows PowerShell 用の Active Directory と Domain Name Service (DNS) モジュールを実行する。

Admin アカウントには、ドメイン全体に関係するアクティビティを実行する権限もあります。

  • DNS 設定 (レコード、ゾーン、フォワーダーの追加、削除、更新) を管理する

  • DNS イベントログを参照する

  • セキュリティイベントログを参照する

AWS Managed Microsoft AD でディレクトリを作成するには

  1. AWS Directory Serviceコンソールのナビゲーションペインで、[ディレクトリ]、[ディレクトリのセットアップ] の順に選択します。

  2. AWS Managed Microsoft AD を選択します。現在、 Amazon RDS での使用では AWS Managed Microsoft AD のオプションのみがサポートされています。

  3. [Next (次へ)] を選択します。

  4. [ディレクトリ情報の入力] ページに、以下の情報を指定します。

    エディション

    目的の要件を満たすエディションを選択します。

    ディレクトリの DNS 名

    ディレクトリの完全修飾名。例: corp.example.com

    ディレクトリの NetBIOS 名

    ディレクトリの短縮名 (例: CORP)。

    ディレクトリの説明

    必要に応じて、ディレクトリの説明。

    Admin パスワード

    ディレクトリ管理者のパスワードです。ディレクトリの作成プロセスでは、ユーザー名 Admin とこのパスワードを使用して管理者アカウントが作成されます。

    ディレクトリ管理者のパスワードには、「admin」の単語を含めることはできません。パスワードは大文字と小文字を区別し、8-64 文字にします。また、以下の 4 つのカテゴリうち 3 つから少なくとも 1 文字を含める必要があります。

    • 小文字 (a~z)

    • 大文字 (A~Z)

    • 数字 (0~9)

    • 英数字以外の文字 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)

    パスワードを確認

    管理者のパスワードをもう一度入力します。

    重要

    このパスワードは必ず保管してください。AWS Directory Service にはこのパスワードは保存されず、復元やリセットもできません。

  5. [Next (次へ)] を選択します。

  6. [VPC とサブネットの選択] ページで、以下の情報を指定します。

    VPC

    ディレクトリ用の VPC を選択します。PostgreSQL DB インスタンスは、この同じ VPC または異なる VPC で作成できます。

    Subnets

    ディレクトリサーバーのサブネットを選択します。2 つのサブネットは、異なるアベイラビリティーゾーンに存在している必要があります。

  7. [Next (次へ)] を選択します。

  8. ディレクトリの情報を確認します。変更が必要な場合は、[戻る] を選択し、変更を行います。情報が正しい場合は、[Create directory (ディレクトリの作成)] を選択します。

    
							ディレクトリの詳細ページ

ディレクトリが作成されるまで、数分かかります。正常に作成されると、[Status] 値が [Active] に変わります。

ディレクトリに関する情報を表示するには、ディレクトリの一覧で、そのディレクトリ ID を選択します。ディレクトリ ID 値を書き留めます。PostgreSQL DB インスタンスを作成または変更する場合は、この値が必要です。


					詳細ページのグラフィック

ステップ 2: (オプション) オンプレミスの Active Directory の信頼を作成する

独自のオンプレミスの Microsoft Active Directory を使用する予定がない場合は、ステップ 3: Amazon RDS が AWS Directory Service にアクセスするための IAM ロールを作成する に進みます。

オンプレミスの Active Directory を使用して Kerberos 認証を取得するには、オンプレミスの Microsoft Active Directory と (AWS Managed Microsoft AD で作成された) ステップ 1: AWS Managed Microsoft AD を使用してディレクトリを作成する ディレクトリとの間に、フォレストの信頼を使用して、信頼するドメイン関係を作成する必要があります。信頼は一方向にすることができます。この場合、AWS Managed Microsoft AD ディレクトリはオンプレミスの Microsoft Active Directory を信頼します。信頼は、両方の Active Directory が相互に信頼する双方向にすることもできます。AWS Directory Service を使用して信頼関係を設定する方法の詳細については、AWS Directory Service 管理ガイドの「信頼関係を作成する場合」を参照してください。

注記

オンプレミスの Microsoft Active Directory を使用している場合、DB インスタンスエンドポイントは Windows クライアントで使用できません。

オンプレミスの Microsoft Active Directory ドメイン名に、新しく作成された信頼関係に対応する DNS サフィックスルーティングが含まれていることを確認してください。次のスクリーンショットは、例を示しています。


					作成された信頼に対応しているDNSルーティング

ステップ 3: Amazon RDS が AWS Directory Service にアクセスするための IAM ロールを作成する

Amazon RDS が AWS Directory Service を呼び出すには、マネージド IAM ポリシー AmazonRDSDirectoryServiceAccess を使用する IAM ロールが必要です。このロールにより、Amazon RDS は AWS Directory Service を呼び出すことが可能になります。

AWS Management Console を使用して DB インスタンスが作成され、コンソールユーザーが iam:CreateRole アクセス許可を持っている場合、コンソールはこのロールを自動的に作成します。この場合、ロール名は rds-directoryservice-kerberos-access-role です。それ以外の場合は、IAM ロールを手動で作成します。[RDS]、[RDS - Directory Service] の順に選択します。AWS 管理ポリシー AmazonRDSDirectoryServiceAccess をロールにアタッチします。

サービス用の IAM ロールを作成する方法の詳細については、IAM ユーザーガイドの「AWS のサービスにアクセス許可を委任するロールの作成」を参照してください。

注記

RDS for Microsoft SQL Server の Windows 認証に使用される IAM ロールは、Amazon RDS for PostgreSQL に使用できません。

マネージド IAM ポリシー AmazonRDSDirectoryServiceAccess を使用する代わりに、必要なアクセス許可を使用してポリシーを作成することもできます。これを行うには、IAM ロールに次の IAM 信頼ポリシーが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

また、ロールには、以下の IAM ロールポリシーも必要です。

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

ステップ 4: ユーザーを作成して設定する

Active Directory ユーザーとコンピューターツールを使用してユーザーを作成できます。これは Active Directory Domain Services ツールおよび Active Directory Lightweight Directory Services ツールの 1 つです。この場合、ユーザーは、ディレクトリにアクセスできる個別の人またはエンティティを表します。

AWS Directory Service ディレクトリにユーザーを作成するには、Windows ベースの Amazon EC2 インスタンスに接続している必要があります。また、この EC2 インスタンスは AWS Directory Service ディレクトリのメンバーである必要があります。同時に、ユーザーを作成する権限を持つユーザーとしてログインしていなければなりません。詳細については、AWS Directory Service 管理ガイドの「ユーザーの作成」を参照してください。

ステップ 5: ディレクトリと DB インスタンスの間のクロス VPC トラフィックを有効にする

同じ VPC 内にディレクトリおよび DB インスタンスを配置する場合は、このステップをスキップして ステップ 6: PostgreSQL DB インスタンスを作成または変更する に進みます。

ディレクトリと DB インスタンスを別の VPC に配置する場合は、VPC ピア接続または AWS Transit Gateway を使用してクロス VPC トラフィックを設定します。

次の手順では、VPC ピア接続を使用して VPC 間のトラフィックを有効にします。Amazon Virtual Private Cloud ピアリング接続ガイドの「VPC ピア機能とは」の手順に従います。

VPC ピア接続を使用してクロス VPC トラフィックを有効にするには

  1. 適切な VPC ルーティングを設定し、ネットワークトラフィックが双方向にフローするようにします。

  2. DB インスタンスのセキュリティグループが、ディレクトリのセキュリティグループからインバウンドトラフィックを受信できることを確認します。

  3. トラフィックをブロックするネットワークのアクセス制御リスト (ACL) ルールがないことを確認します。

別の AWS アカウントがディレクトリを所有している場合は、ディレクトリを共有する必要があります。

AWS アカウント間でディレクトリを共有するには

  1. DB インスタンスを作成する AWS アカウントとの間でディレクトリの共有をスタートするには、AWS 管理ガイドの「チュートリアル: AWS Directory Service マネージド Microsoft AD ディレクトリを共有して、シームレスに EC2 ドメインを結合する」の手順を実行します。

  2. DB インスタンスのアカウントを使用して、AWS Directory Service コンソールにサインインし、続行する前にドメインが必ず SHARED ステータスであることを確認します。

  3. DB インスタンスのアカウントを使用して AWS Directory Service コンソールにサインインしている間に、[ディレクトリ ID] の値を書き留めておきます。このディレクトリ ID は、DB インスタンスをドメインに結合するために使用します。

ステップ 6: PostgreSQL DB インスタンスを作成または変更する

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

Kerberos 認証は、VPC 内の PostgreSQL DB インスタンスでのみサポートされています。DB インスタンスは、ディレクトリと同じ VPC または異なる VPC 内にあります。DB インスタンスがディレクトリと通信する場合、そのインスタンスは、ディレクトリの VPC 内での送受信を許可するセキュリティグループを使用する必要があります。

DB インスタンスを作成、変更、復元するためにコンソールを使用する場合は、データベースの認証セクションの [パスワードと Kerberos 認証] を選択します。次に、[ディレクトリのブラウジング] を選択します。Directory Service を使用するには、ディレクトリを選択するか、[新しいディレクトリの作成] を選択します。

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

  • --domain パラメータには、ディレクトリの作成時に生成されたドメイン識別子 ("d-*" 識別子) を使用します。

  • --domain-iam-role-name パラメータには、マネージド IAM ポリシー AmazonRDSDirectoryServiceAccess を使用する作成済みのロールを使用します。

例えば、以下の CLI コマンドはディレクトリを使用するように DB インスタンスを変更します。

aws rds modify-db-instance --db-instance-identifier mydbinstance --domain d-Directory-ID --domain-iam-role-name role-name
重要

DB インスタンスを変更して Kerberos 認証を有効にした場合、変更後、その DB インスタンスを再起動します。

ステップ 7: Kerberos 認証の PostgreSQL ログインを作成する

RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同じように PostgreSQL DB インスタンスに接続します。DB インスタンスは、AWS Managed Microsoft AD ドメインに接続されています。このように、ドメインの Microsoft Active Directory ユーザーおよびグループから PostgreSQL ログインおよびユーザーのプロビジョニングができます。スタンダードの PostgreSQL 権限をこれらのログインに付与したり、取り消したりしてデータベースの権限を管理します。

Microsoft Active Directory ユーザーが PostgreSQL で認証できるようにするには、RDS マスターユーザー認証情報を使用します。これらの認証情報を使用して、他の DB インスタンスと同様に、PostgreSQL DB インスタンスに接続します。ログインした後で、PostgreSQL で外部に認証されるユーザーを作成し、このユーザーに rds_ad ロールを付与します。

CREATE USER "username@CORP.EXAMPLE.COM" WITH LOGIN; GRANT rds_ad TO "username@CORP.EXAMPLE.COM";

username をユーザー名に置き換えて、ドメイン名を大文字で含めます。ドメインのユーザー (人とアプリケーションの両方) が Kerberos 認証を使用して、クライアントマシンを結合したドメインから RDS PostgreSQL インスタンスに接続できるようになりました。

データベースユーザーは Kerberos または IAM 認証のいずれかを使用できますが、両方を使用することはできないため、このユーザーも rds_iam ロールを持つことはできません。これは、ネストされたメンバーシップにも適用されます。詳細については、「MariaDB、MySQL、および PostgreSQL の IAM データベース認証」を参照してください。

ステップ 8: PostgreSQL クライアントを設定する

PostgreSQL クライアントを設定するには、次のステップを実行します。

  • ドメインを指す krb5.conf ファイル (または同等) を作成します。

  • クライアントホストと AWS Directory Service 間でトラフィックが流れることを確認します。次の目的で Netcat などのネットワークユーティリティを使用します。

    • ポート 53 の DNS 経由のトラフィックを確認します。

    • ポート 53 および Kerberos の TCP/UDP 上のトラフィックを確認します。これには、AWS Directory Service の場合ポート 88 および 464 が含まれます。

  • データベースポートを介してクライアントホストと DB インスタンス間でトラフィックが流れることを確認します。例えば、psql を使用してデータベースに接続し、アクセスします。

以下は、AWS Managed Microsoft AD 向けの krb5.conf の内容のサンプルです 。

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

以下は、オンプレミスの Microsoft Active Directory 向けの krb5.conf の内容のサンプルです。

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } ONPREM.COM = { kdc = onprem.com admin_server = onprem.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM .onprem.com = ONPREM.COM onprem.com = ONPREM.COM .rds.amazonaws.com = EXAMPLE.COM .amazonaws.com.cn = EXAMPLE.COM .amazon.com = EXAMPLE.COM