RDS for Db2 での Kerberos 認証の使用 - Amazon Relational Database Service

RDS for Db2 での Kerberos 認証の使用

ユーザーが Amazon RDS for Db2 DB インスタンスに接続する際、Kerberos 認証を使用してユーザーを認証できます。DB インスタンスは AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) と連携して Kerberos 認証を有効にします。ユーザーが、信頼性の高いドメインに接続された RDS for Db2 DB インスタンスを使用して認証を実行すると、AWS Directory Service を使用して作成したディレクトリに認証リクエストが転送されます。詳細については、「AWS Directory Service 管理ガイド」の「AWS Directory Service とは」を参照してください。

まず、ユーザー認証情報を格納する AWS Managed Microsoft AD ディレクトリを作成します。次に、ドメインと AWS Managed Microsoft AD ディレクトリのその他の情報を RDS for Db2 DB インスタンスに追加します。ユーザーが RDS for Db2 DB インスタンスで認証を実行すると、認証リクエストは AWS Managed Microsoft AD ディレクトリに転送されます。

同じディレクトリにすべての認証情報を保持することで時間と労力を節約できます。この方法により、複数の DB インスタンスの認証情報を一元的に保存および管理できます。また、ディレクトリを使用することで、セキュリティプロファイル全体を向上できます。

リージョンとバージョンの可用性

機能の可用性とサポートは、各データベースエンジンの特定のバージョン、および AWS リージョン によって異なります。Kerberos 認証を使用した RDS for Db2 のバージョンとリージョンの可用性の詳細については、「Kerberos 認証」を参照してください。

注記

Kerberos 認証は、RDS for Db2 DB インスタンスで廃止された DB インスタンスクラスではサポートされていません。詳細については、「RDS for Db2 インスタンスクラス」を参照してください。

RDS for Db2 DB インスタンスの Kerberos 認証の概要

RDS for Db2 DB インスタンスに Kerberos 認証を設定するには、以下の一般的なステップを完了します。詳細は後で説明します。

  1. AWS Managed Microsoft AD を使用して AWS Managed Microsoft AD ディレクトリを作成します。AWS Management Console、AWS Command Line Interface (AWS CLI)、または AWS Directory Service を使用して、ディレクトリを作成できます。詳細については、「AWS Directory Service 管理ガイド」の「AWS Managed Microsoft AD を作成する」を参照してください。

  2. マネージド IAM ポリシー AmazonRDSDirectoryServiceAccess を使用する AWS Identity and Access Management (IAM) ロールの作成 この IAM ロールにより Amazon RDS はディレクトリを呼び出すことができます。

    IAM ロールによるアクセスを許可するには、AWS Security Token Service (AWS STS) エンドポイントを AWS アカウント の正しい AWS リージョン でアクティベートする必要があります。AWS STS エンドポイントはすべての AWS リージョン でデフォルトでアクティブになっているため、他のアクションを実行せずに、エンドポイントを使用することができます。詳細については、IAM ユーザーガイドの「AWS リージョン でのアクティブ化と非アクティブ化」を参照してください。

  3. 以下のいずれかの方法で、AWS Management Console、AWS CLI、または RDS API を使用して、RDS for Db2 DB インスタンスを作成または変更します。

    DB インスタンスは、ディレクトリと同じ Amazon Virtual Private Cloud (VPC) か、別の AWS アカウント または VPC にあります。RDS for Db2 DB インスタンスの作成または変更時に、次の手順を行います。

    • ディレクトリの作成時に、生成されたドメイン識別子 (d-* 識別子) を指定します。

    • 作成した IAM ロール名を指定します。

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

  4. Db2 クライアントを設定し、次のポートでクライアントホストと AWS Directory Service の間でトラフィックが流れることを確認します。

    • TCP/UDP ポート 53 – DNS

    • TCP 88 – Kerberos 認証

    • TCP 389 – LDAP

    • TCP 464 – Kerberos 認証

RDS for Db2 DB インスタンスの Kerberos 認証を設定する

AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) を使用して、RDS for Db2 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 にはこのパスワードは保存されず、復元やリセットもできません。

  • ディレクトリコントローラー用セキュリティグループを作成します。セキュリティグループは、RDS for Db2 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 のごみ箱から元に戻す。

  • AWS Directory Service で Windows PowerShell 向けの Active Directory およびドメインネームサービス (DNS) モジュールを実行する。

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

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

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

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

AWS Managed Microsoft AD でディレクトリを作成するには
  1. AWS Management Console にサインインし、AWS Directory Service コンソール (https://console.aws.amazon.com/directoryservicev2/)を開きます。

  2. [ディレクトリの設定] を選択します。

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

  4. [Next] (次へ) をクリックします。

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

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

    • ディレクトリ DNS 名 - ディレクトリの完全修飾名 (例: corp.example.com)。

    • ディレクトリ NetBIOS 名 - (オプション) ディレクトリの短縮名 (例: CORP)。

    • ディレクトリの説明 - (オプション) ディレクトリの説明。

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

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

      • 小文字 (a~z)

      • 大文字 (A~Z)

      • 数字 (0~9)

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

      • パスワードの確認 - 管理者パスワードを再入力します。

        重要

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

  6. [次へ] をクリックします。

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

    • VPC - ディレクトリの VPC を選択します。RDS for Db2 DB インスタンスは、この同じ VPC または別の VPC で作成できます。

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

  8. [次へ] をクリックします。

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

    AWS Directory Service コンソールのディレクトリの作成時の確認ページ

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

ディレクトリに関する情報を表示するには、[ディレクトリ ID] で、ディレクトリ ID を選択します。ディレクトリ ID 値を書き留めます。RDS for Db2 DB インスタンスを作成または変更する際に、この値が必要です。

AWS Directory Service コンソールの [ディレクトリの詳細] ページにディレクトリ ID が表示されています。

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

Amazon RDS が AWS Directory Service を呼び出すには、AWS アカウント にマネージド IAM ポリシー AmazonRDSDirectoryServiceAccess を使用する IAM ロールが必要です。このロールにより、Amazon RDS は AWS Directory Service への呼び出しを行うことができます。

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

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

注記

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

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": "*" } ] }

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

Active Directory Users and Computers ツールを使用してユーザーを作成できます。これは、Active Directory Domain Services および Active Directory Lightweight Directory Services ツールのいずれかです。詳細については、Microsoft ドキュメントの「Active Directory ドメインにユーザーとコンピューターを追加する」を参照してください。この場合、ユーザーは個人またはその他のエンティティです。例えば、ドメインの一部であり、その ID がディレクトリで管理されているコンピュータなどです。

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

ステップ 4: AWS Managed Microsoft AD で RDS for Db2 管理者グループを作成する

RDS for Db2 は、マスターユーザー、または 2 つの Amazon RDS 予約ユーザー rdsdbrdsadmin の Kerberos 認証をサポートしていません。代わりに、AWS Managed Microsoft AD で masterdba という名前の新しいグループを作成する必要があります。詳細については、Microsoft ドキュメントの「Create a Group Account in Active Directory」を参照してください。このグループに追加するユーザーには、マスターユーザー権限があります。

Kerberos 認証を有効にすると、マスターユーザーは masterdba ロールを失います。その結果、Kerberos 認証を無効にしない限り、マスターユーザーはインスタンスのローカルユーザーグループのメンバーシップにアクセスできなくなります。パスワードログインでマスターユーザーを引き続き使用するには、マスターユーザーと同じ名前のユーザーを AWS Managed Microsoft AD に作成します。続いて、ユーザーをグループ masterdba に追加します。

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

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

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

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

認証に Kerberos を選択し、使用するディレクトリを特定します。

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

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

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

以下の例では、ディレクトリを使用するように DB インスタンスを変更します。例の、以下のプレースホルダをユーザー自身の値に置き換えます。

  • db_instance_name - RDS for Db2 DB インスタンスの名前。

  • directory_id - 作成した AWS Directory Service for Microsoft Active Directory ディレクトリの ID。

  • role_name - 作成した IAM ロールの名前。

aws rds modify-db-instance --db-instance-identifier db_instance_name --domain d-directory_id --domain-iam-role-name role_name
重要

Kerberos 認証を有効化するために DB インスタンスを変更する場合は、変更後に DB インスタンスを再起動します。

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

Db2 クライアントを設定するには
  1. ドメインを指す /etc/krb5.conf ファイル (または同等) を作成します。

    注記

    Windows オペレーティングシステムの場合は、C:\windows\krb5.ini ファイルを作成します。

  2. クライアントホストと AWS Directory Service 間でトラフィックが流れることを確認します。以下のタスクには、Netcat などのネットワークユーティリティを使用します。

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

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

  3. データベースポートを介してクライアントホストと DB インスタンス間でトラフィックが流れることを確認します。コマンド db2 を使用して、データベースに接続してアクセスできます。

次の例は、AWS Managed Microsoft AD の /etc/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

ドメインの DB インスタンスの管理

AWS Management Console、AWS CLI、または RDS API を使用して、DB インスタンスおよび Microsoft Active Directory との関係を管理できます。例えば、Kerberos 認証を有効化するために、Active Directory を関連付けることができます。また、Active Directory の関連付けを解除して、Kerberos 認証を無効化することもできます。さらに、DB インスタンスを外部認証する Microsoft Active Directory を別の Active Directory に変更することもできます。

例えば、modify-db-instance CLI コマンドを使用して、次のアクションを実行できます。

  • --domain オプションに現在のメンバーシップのディレクトリ ID を指定して、失敗したメンバーシップに対する Kerberos 認証の有効化を再試行します。

  • --domain オプションに none を指定して、DB インスタンスの Kerberos 認証を無効にします。

  • --domain オプションに新しいドメインのドメイン識別子を指定して、DB インスタンスを 1 つのドメインから別のドメインに移動します。

ドメインのメンバーシップを理解する

DB インスタンスを作成または変更すると、そのインスタンスはドメインのメンバーになります。ドメインメンバーシップのステータスは、コンソールで、または describe-db-instances コマンドを実行して表示できます。DB インスタンスのステータスは、以下のいずれかです。

  • kerberos-enabled - DB インスタンスで Kerberos 認証が有効化されました。

  • enabling-kerberos - AWS は、この DB インスタンスで Kerberos 認証を有効化中です。

  • pending-enable-kerberos - この DB インスタンスでの Kerberos 認証の有効化が保留中です。

  • pending-maintenance-enable-kerberos - AWS は、次の予定メンテナンスウィンドウ中に、DB インスタンスでの Kerberos 認証の有効化を試みます。

  • pending-disable-kerberos - この DB インスタンスでの Kerberos 認証の無効化が保留中です。

  • pending-maintenance-disable-kerberos - AWS は、次の予定メンテナンスウィンドウ中に、DB インスタンスでの Kerberos 認証の無効化を試みます。

  • enable-kerberos-failed - 設定の問題により、AWS は DB インスタンスで Kerberos 認証を有効化できませんでした。DB インスタンスを変更するコマンドを再発行する前に、設定の問題を修正します。

  • disabling-kerberos - AWS は、この DB インスタンスで Kerberos 認証を無効化中です。

ネットワーク接続の問題や正しくない IAM ロールのために、Kerberos 認証の有効化リクエストは失敗する可能性があります。場合によっては、DB インスタンスを作成または変更するときに、Kerberos 認証を有効にしようとすると失敗する可能性があります。その場合、正しい IAM ロールを使用していることを確認してから、DB インスタンスを変更し、ドメインに接続します。

Kerberos 認証を使用して RDS for Db2 に接続する

Kerberos 認証を使用して RDS for Db2 に接続するには
  1. コマンドプロンプトで、次の コマンドを実行します。次の例では、username をユーザーの Microsoft Active Directory ユーザー名に置き換えます。

    kinit username
  2. RDS for Db2 DB インスタンスがパブリックにアクセス可能な VPC を使用している場合、Amazon EC2 クライアントの /etc/hosts ファイルに DB インスタンスエンドポイントのプライベート IP アドレスを追加します。次の例では IP アドレスを取得し、それを /etc/hosts ファイルに追加します。

    % dig +short Db2-endpoint.AWS-Region.rds.amazonaws.com ;; Truncated, retrying in TCP mode. ec2-34-210-197-118.AWS-Region.compute.amazonaws.com. 34.210.197.118 % echo "34.210.197.118 Db2-endpoint.AWS-Region.rds.amazonaws.com" >> /etc/hosts
  3. 次のコマンドを使用して、Active Directory に関連付けられている RDS for Db2 DB インスタンスにログインします。database_name を RDS for Db2 データベースの名前に置き換えます。

    db2 connect to database_name