MySQL での Kerberos 認証の使用 - Amazon Relational Database Service

MySQL での Kerberos 認証の使用

MySQL DB インスタンスに接続するユーザーを Kerberos 認証を使用して認証できるようになりました。DB インスタンスは AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) を使用して Kerberos 認証を有効にします。信頼するドメインに参加している MySQL DB インスタンスに対してユーザーが認証を行う場合、認証リクエストが転送されます。転送されたリクエストは、AWS Directory Service で作成したドメインディレクトリに移動します。

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

Amazon RDS は、次の AWS リージョンで、MySQL DB インスタンスの Kerberos 認証をサポートします。

  • 米国東部 (オハイオ)

  • 米国東部 (バージニア北部)

  • 米国西部 (北カリフォルニア)

  • 米国西部 (オレゴン)

  • アジアパシフィック (ムンバイ)

  • アジアパシフィック (ソウル)

  • アジアパシフィック (シンガポール)

  • アジアパシフィック (シドニー)

  • アジアパシフィック (東京)

  • カナダ (中部)

  • 欧州 (フランクフルト)

  • 欧州 (アイルランド)

  • 欧州 (ロンドン)

  • 欧州 (ストックホルム)

  • 南米 (サンパウロ)

  • 中国 (北京)

  • 中国 (寧夏)

MySQL DB インスタンスの Kerberos 認証を設定するには、以下の一般的なステップを実行します (詳細は後で説明します)。

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

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

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

  3. Microsoft Active Directory のツールを使用して、AWS Managed Microsoft AD ディレクトリでユーザーとグループを作成し、設定します。Active Directory にユーザーを作成する方法の詳細については、AWS 管理ガイドの「AWS Directory Service マネージド Microsoft AD でユーザーとグループを管理する」を参照してください。

  4. MySQL DB インスタンスを作成または変更します。作成リクエストで CLI または RDS API を使用する場合は、Domain パラメータでドメイン識別子を指定します。ディレクトリの作成時に生成された d-* 識別子と、作成したロールの名前を使用します。

    既存の MySQL DB インスタンスを変更して Kerberos 認証を使用する場合は、DB インスタンスのドメインパラメータと IAM ロールパラメータを設定します。ドメインディレクトリと同じ VPC で DB インスタンスを見つけます。

  5. Amazon RDS マスターユーザー認証情報を使用して、MySQL DB インスタンスに接続します。CREATE USER 句の IDENTIFIED WITH 'auth_pam' を使用して MySQL でユーザーを作成します。この方法で作成したユーザーは、Kerberos 認証を使用して MySQL DB インスタンスにログインできます。

MySQL DB インスタンスの Kerberos 認証の設定

AWS Managed Microsoft AD を使用して、MySQL DB インスタンスの Kerberos 認証を設定します。Kerberos 認証を設定するには、次の手順に従います。

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

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

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

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

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

    注記

    このパスワードは必ず保存してください。AWS Directory Service は保存しません。パスワードはリセットできますが、取得することはできません。

  • ディレクトリコントローラー用セキュリティグループを作成します。

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

AWS Managed Microsoft AD ディレクトリに作成した管理者アカウントには、OU に関する以下の代表的な管理業務用のアクセス権限があります。

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

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

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

  • 権限を委譲する

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

  • Active Directory Web Service で AD と DNS Windows PowerShell モジュールを実行する

管理者アカウントには、ドメイン全体に関する以下のアクティビティを実行する権限もあります。

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

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

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

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

  1. AWS Management Console にサインインし、AWS Directory Service コンソール (https://console.aws.amazon.com/directoryservicev2/)を開きます。

  2. ナビゲーションペインで、[Directories]、[Set up Directory] の順に選択します。

  3. [AWS Managed Microsoft AD] を選択します。現状では、AWS Managed Microsoft AD が Amazon RDS で使用できる唯一のオプションです。

  4. 次の情報を入力します。

    ディレクトリの DNS 名

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

    ディレクトリの NetBIOS 名

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

    ディレクトリの説明

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

    Admin パスワード

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

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

    • 小文字 (a~z)

    • 大文字 (A~Z)

    • 数字 (0~9)

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

    パスワードを確認

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

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

  6. [Networking ] セクションに次の情報を入力し、[Next] を選択します。

    VPC

    ディレクトリ用の VPC。この同じ VPC に MySQL DB インスタンスを作成します。

    Subnets

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

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

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

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

ディレクトリに関する情報を表示するには、ディレクトリの一覧で、ディレクトリ名を選択します。[Directory ID] の値を書き留めます。この値は、MySQL DB インスタンスを作成または変更するときに必要になります。


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

ステップ 2: Amazon RDS 用の 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 ロールを手動で作成する必要があります。IAM ロールを作成する場合、[Directory Service] を選択し、それに AWS マネージドポリシー AmazonRDSDirectoryServiceAccess をアタッチします。

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

注記

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

マネージド 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": "*" } ] }

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

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

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

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

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

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

DB インスタンスを作成するためにコンソールを使用する場合は、データベースの認証 セクションの [パスワードと Kerberos 認証] を選択します。[ディレクトリの参照] を選択してディレクトリを選択するか、[新しいディレクトリの作成] を選択します。


          DB インスタンスの作成時の Kerberos 認証設定

コンソールを使用して DB インスタンスを変更または復元する場合は、[Kerberos 認証] セクションでディレクトリを選択するか、[Create a new directory (新しいディレクトリの作成)] を選択します。


          DB インスタンスの変更または復元時の Kerberos 認証設定

CLI または RDS API を使用して DB インスタンスとディレクトリを関連付けます。作成したドメインディレクトリを DB インスタンスで使用できるようにするには、以下のパラメータが必要です。

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

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

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

Linux、macOS、Unix の場合:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --domain d-ID \ --domain-iam-role-name role-name

Windows の場合:

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

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

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

Amazon RDS マスターユーザー認証情報を使用して、他の DB インスタンスと同様に MySQL DB インスタンスに接続します。DB インスタンスは、AWS Managed Microsoft AD ドメインに接続されています。したがって、このドメインの Active Directory ユーザーから MySQL ログインおよびユーザーをプロビジョンできます。データベースへのアクセス許可は、これらのログインに対して付与および取り消される標準の MySQL アクセス許可を通じて管理されます。

Active Directory ユーザーに対して MySQL での認証を許可できます。これを行うには、まず Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同様に MySQL DB インスタンスに接続します。ログインしたら、次に示すように、MySQL で PAM (Pluggable Ahthentication Modules) を使用して外部認証されたユーザーを作成します。

CREATE USER 'testuser'@'%' IDENTIFIED WITH 'auth_pam';

testuser をユーザー名に置き換えます。これでドメインのユーザー (人とアプリケーションの両方) は、Kerberos 認証を使用してドメインに参加しているクライアントマシンから DB インスタンスに接続できます。

重要

PAM 認証を使用する場合は、クライアントが SSL/TLS 接続を使用することを強くお勧めします。SSL/TLS 接続を使用しないと、パスワードがクリアテキストとして送信される場合があります。AD ユーザーに SSL/TLS による暗号化接続を要求するには、次のコマンドを実行します。

UPDATE mysql.user SET ssl_type = 'any' WHERE ssl_type = '' AND PLUGIN = 'auth_pam' and USER = 'testuser'; FLUSH PRIVILEGES;

詳細については、「MySQL DB インスタンスで SSL を使用する」を参照してください。

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

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

例えば、Amazon RDS API を使用して次を実行できます。

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

  • メンバーシップの IAM ロール名を更新するには、ModifyDBInstance API オペレーションを使用し、現在のメンバーシップのディレクトリ ID と新しい IAM ロールを指定します。

  • DB インスタンスの Kerberos 認証を無効にするには、ModifyDBInstance API オペレーションを使用し、ドメインパラメータとして none を指定します。

  • ドメイン間で DB インスタンスを移動するには、ModifyDBInstance API オペレーションを使用し、新しいドメインのドメイン識別子をドメインパラメータとして指定します。

  • 各 DB インスタンスのメンバーシップを一覧表示するには、DescribeDBInstances API オペレーションを使用します。

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

DB インスタンスを作成または変更すると、そのインスタンスはドメインのメンバーになります。DB インスタンスのドメインメンバーシップのステータスを表示するには、describe-db-instances CLI コマンドを実行します。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 インスタンスを作成するか、既存の DB インスタンスを変更し、Kerberos 認証を有効化しようとして失敗したとします。この場合は、変更コマンドを再発行するか、新しく作成した DB インスタンスを変更してドメインに参加させます。

Kerberos 認証を使用した MySQL への接続

Kerberos 認証を使用して MySQL に接続するには、Kerberos 認証タイプを使用してログインする必要があります。

Kerberos 認証を使用して接続できるデータベースユーザーを作成するには、IDENTIFIED WITH ステートメントで CREATE USER 句を使用します。手順については、「ステップ 5: Kerberos 認証の MySQL ログインを作成する」を参照してください。

エラーを回避するには、MariaDB mysql クライアントを使用します。MariaDB のソフトウェアは https://downloads.mariadb.org/ でダウンロードできます。

コマンドプロンプトで、MySQL DB インスタンスに関連付けられているエンドポイントの 1 つに接続します。「MySQL データベースエンジンを実行している DB インスタンスへの接続」の一般的な手順に従います。パスワードの入力を求められたら、そのユーザー名に関連付けられている Kerberos パスワードを入力します。

MySQL DB インスタンスの復元とドメインへの追加

MySQL DB インスタンスの DB スナップショットを復元するか、ポイントインタイム復元を実行して、インスタンスをドメインに追加できます。DB インスタンスを復元したら、「ステップ 4: MySQL DB インスタンスを作成または変更する」で説明している手順に従って DB インスタンスを変更し、DB インスタンスをドメインに追加します。

Kerberos 認証に関する MySQL の制限

MySQL の Kerberos 認証には、以下の制限が適用されます。

  • AWS Managed Microsoft AD のみがサポートされています。ただし、同じ AWS リージョンの異なるアカウントによって所有されている共有 Managed Microsoft AD ドメインに、RDS for MySQL DB インスタンスを接続できます。

  • Kerberos 認証は、以下の Amazon RDS for MySQL バージョンでサポートされています。

    • Amazon RDS for MySQL バージョン 8.0.13 以上の 8.0 バージョン

    • Amazon RDS for MySQL バージョン 5.7.24 以上の 5.7 バージョン

  • この機能を有効にした後で、DB インスタンスを再起動する必要があります。

  • ドメイン名の長さは 61 文字以下にする必要があります。

  • Kerberos 認証と IAM 認証を同時に有効にすることはできません。MySQL DB インスタンスに対していずれか 1 つの認証方法を選択します。

  • この機能を有効にした後では DB インスタンスポートを変更しません。

  • リードレプリカでは Kerberos 認証を使用しません。

  • Kerberos 認証を使用している MySQL DB インスタンスのマイナーバージョン自動アップグレードがオンになっている場合、Kerberos 認証をオフにし、自動アップグレード後に再度オンにする必要があります。マイナーバージョン自動アップグレードの詳細については、「MySQL のマイナーバージョンの自動アップグレード」を参照してください。

  • この機能が有効になっている DB インスタンスを削除するには、まず機能を無効にします。これを行うには、DB インスタンスに対して modify-db-instance CLI コマンドを使用し、none パラメータに --domain を指定します。

    CLI または RDS API を使用してこの機能が有効になっている DB インスタンスを削除する場合は、遅延が予想されます。