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 ポリシーを追加する
次の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションページで、[ポリシー] を選択します。
- [ポリシーを作成] を選択します。
- 必要なユーザーに rds-db:connect アクションを許可するポリシーを入力します。このポリシーの作成に関する詳細については、「IAM データベースアクセス用の IAM ポリシーを作成、使用する」を参照してください。
注: データベースリソースの詳細を [Resources] セクションに入力する必要があります。
- [次へ] を選択します。
- [次へ] を選択します。
- [名前] にポリシー名を入力します。
- [ポリシーを作成] を選択します。
Amazon RDS のアクセスを許可する IAM ロールを作成する
次の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションページで、[ロール] を選択します。
- [信頼されたエンティティタイプ] セクションで、[ロールの作成] を選択します。
- [AWS サービス] を選択します。
- [ユースケース] セクションの [サービスまたはユーザーケース] で、[EC2] を選択します。
- [ユースケース] で [EC2] を選択し、[次へ] を選択します。
- 検索バーで、先ほど「データベースユーザーをマッピングする IAM ポリシーを追加する」セクションで作成した IAM ポリシーを探します。
- [次へ] を選択します。
- [ロール名] に、この IAM ロールの名前を入力します。
- [ロールを作成] を選択します。
IAM ロールを Amazon EC2 インスタンスにアタッチする
次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- Amazon RDS への接続に使用する EC2 インスタンスを選択します。
- 新しく作成した IAM ロールを EC2 インスタンスにアタッチします。
- 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 インスタンスで作成、削除、変更、バックアップ、回復を実行するために、ユーザーに必要な最小特権を教えてください