スキップしてコンテンツを表示

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

所要時間2分
0

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

解決策

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

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

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

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

IAM データベース認証の有効化には、Amazon RDS コンソール、AWS CLI、または Amazon RDS API を使用できます。

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

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

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

パスワードではなく、IAM 認証を使用するデータベースユーザーアカウントを作成するには、次のコマンドを実行します。

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. [ポリシーを作成] を選択します。

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

次の手順を実行します。

  1. IAM コンソールを開きます。
  2. ナビゲーションページで [ロール] を選択します。
  3. [ロールの作成] を選択します。
  4. [信頼するエンティティタイプ] セクションで [AWS サービス] を選択します。
  5. [ユースケース] セクションの [サービスまたはユーザーケース][EC2] を選択します。
  6. [次へ] を選択します。
  7. 検索バーを使用して IAM ポリシーを見つけます。
  8. [次へ] を選択します。
  9. [ロール名] に IAM ロールの名前を入力します。
  10. [ロールの作成] を選択します。

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

次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。
  2. ナビゲーションペインで [インスタンス] を選択し、Amazon RDS への接続に使用するインスタンスを選択します。
  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 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 インスタンスで作成、削除、変更、バックアップ、回復を実行するために、ユーザーに必要な最小特権を教えてください

コメントはありません

関連するコンテンツ