ユーザーが IAM の認証情報を使用して Amazon RDS for MySQL の DB インスタンスを認証できるようにする方法を教えてください。

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) for MySQL DB インスタンスに接続したいです。ネイティブの認証方法ではなく、AWS Identity and Access Management (IAM) の認証情報を使用したいです。

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Amazon RDS の DB インスタンスまたはクラスターに接続するには、IAM ユーザーまたはロールの認証情報と認証トークンを使用します。

注: 暗号化されていない MySQL 接続は、クライアントとサーバーが同じ仮想プライベートクラウド (VPC) にあり、ネットワークが信頼済みである場合にのみ使用してください。

前提条件

データベースへの接続には、IAM データベース認証をサポートする DB インスタンスおよび、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが必要です。

IAM 認証に必要な設定を確認するには、AWS Systems Manager Automation の AWSSupport-TroubleshootRDSIAMAuthentication ランブックを使用します。このランブックを使用することで、Amazon RDS インスタンスまたは Aurora クラスターへの接続に関する問題をトラブルシューティングすることもできます。

RDS DB インスタンスで IAM DB 認証を有効にする

Amazon RDS コンソール、AWS コマンドラインインターフェイス (AWS CLI)、または Amazon RDS API を使用して IAM データベース認証を有効にすることができます。Amazon RDS コンソールを使用して DB インスタンスを変更する場合は、[すぐに適用] を選択して IAM データベース認証を有効にします。詳細については、「Amazon RDS DB インスタンス」を参照してください。

: [すぐに適用] を選択した場合、保留中の変更もすぐに適用されます。詳細については、「スケジュール変更の設定」を参照してください。

AWS 認証トークンを使用するデータベースユーザーアカウントを作成する

次のコマンドを実行して、DB インスタンスまたはクラスターエンドポイントに接続します。

$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p

: プライマリパスワードを使用してログインします。

次のコマンドを実行し、パスワードの代わりに AWS 認証トークンを使用するデータベースユーザーアカウントを作成します。

CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

デフォルトでは、データベースユーザーにはアクセス許可がありません。SHOW GRANTS FOR {dbusername} を実行すると、データベースユーザーは GRANT USAGE と表示されます。ユーザーアカウントに SSL 経由での接続を要求するには、次のコマンドを実行します。

ALTER USER {dbusername} REQUIRE SSL;

exit コマンドを実行して MySQL を終了します。完了後、DB インスタンスからログアウトします。

データベースユーザーを IAM ロールにマッピングする IAM ポリシーを追加する

次の手順を実行します。

  1. IAM コンソールを開きます。
  2. ナビゲーションページで、[ポリシー] を選択します。
  3. [ポリシーを作成] を選択します。
  4. 必要なユーザーに rds-db:connect アクションを許可するポリシーを入力します。このポリシーの作成に関する詳細については、「IAM データベースアクセス用の IAM ポリシーを作成、使用する」を参照してください。
    注: データベースリソースの詳細を [Resources] セクションに入力する必要があります。
  5. [次へ] を選択します。
  6. [次へ] を選択します。
  7. [名前] にポリシー名を入力します。
  8. [ポリシーを作成] を選択します。

Amazon RDS のアクセスを許可する IAM ロールを作成する

次の手順を実行します。

  1. IAM コンソールを開きます。
  2. ナビゲーションページで、[ロール] を選択します。
  3. [信頼されたエンティティタイプ] セクションで、[ロールの作成] を選択します。
  4. [AWS サービス] を選択します。
  5. [ユースケース] セクションの [サービスまたはユーザーケース] で、[EC2] を選択します。
  6. [ユースケース][EC2] を選択し、[次へ] を選択します。
  7. 検索バーで、先ほど「データベースユーザーをマッピングする IAM ポリシーを追加する」セクションで作成した IAM ポリシーを探します。
  8. [次へ] を選択します。
  9. [ロール名] に、この IAM ロールの名前を入力します。
  10. [ロールを作成] を選択します。

IAM ロールを Amazon EC2 インスタンスにアタッチする

次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。
  2. Amazon RDS への接続に使用する EC2 インスタンスを選択します。
  3. 新しく作成した IAM ロールを EC2 インスタンスにアタッチします。
  4. SSH 経由で EC2 インスタンスに接続します

IAM ロールを識別する AWS 認証トークンを生成する

Amazon EC2 インスタンスにした後、次の AWS CLI コマンド generate-db-auth-token を実行して認証トークンを生成します。

$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

後で使用するために、この認証トークンをコピーして保存します。または、AWS SDK for .NET を使用してトークンを生成します。

SSL ルート証明書バンドルファイルをダウンロードする

すべての AWS リージョンの証明書バンドルをダウンロードする方法については、「すべての AWS リージョン用の証明書バンドル」を参照してください。

IAM ロールの認証情報と認証トークンを使用して RDS DB インスタンスに接続する

証明書ファイルをダウンロードした後、次のコマンドを実行して SSL 経由で DB インスタンスに接続します。

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/global-bundle.pem --enable-cleartext-plugin --user=jane_doe --password=$TOKEN

: MariaDB クライアントを使用している場合は、--enable-cleartext-plugin オプションを含めないでください。

IAM ロールの認証情報と SSL 証明書を使用して RDS DB インスタンスに接続する

証明書ファイルをダウンロードした後、SSL 経由で DB インスタンスに接続します。

関連情報

MariaDB、MySQL、PostgreSQL の IAM データベース認証

Amazon RDS DB インスタンスで作成、削除、変更、バックアップ、回復を実行するために、ユーザーに必要な最小特権を教えてください

コメントはありません

関連するコンテンツ