ユーザーが IAM の認証情報を使用して Amazon RDS for MySQL の DB インスタンスを認証できるようにするにはどうすればよいですか?

所要時間3分
0

MySQL を実行している Amazon Relational Database Service (Amazon RDS) データベース (DB) インスタンスに接続したいと考えています。ネイティブの認証方法の代わりに AWS Identity and Access Management (IAM) の認証情報を使用したいと考えています。

簡単な説明

ユーザーは、IAM ユーザーまたはロールの認証情報と認証トークンを使用すれば Amazon RDS の DB インスタンスまたはクラスターに接続するこができます。IAM データベース認証は、以下の理由から、ネイティブな認証方法よりも安全です。

  • IAM データベース認証トークンは、AWS のアクセスキーを使用して生成されます。データベースユーザーの認証情報を保存する必要はありません。
  • 認証トークンの有効期間は 15 分なので、パスワードを強制的にリセットする必要はありません。
  • IAM データベース認証には、セキュアソケットレイヤー (SSL) 接続が必要です。DB インスタンスとの間で送受信されるデータはすべて暗号化されます。
  • アプリケーションが Amazon Elastic Compute Cloud (Amazon EC2) で実行されている場合は、EC2 インスタンスプロファイルの認証情報を使用してデータベースにアクセスすることができます。データベースのパスワードをインスタンスに保存する必要はありません。

IAM ロールを使用して IAM データベース認証を設定するには、以下の手順に従います。

  1. RDS の DB インスタンスで IAM DB 認証を有効にします。
  2. AWS 認証トークンを使用するデータベースユーザーアカウントを作成します。
  3. データベースユーザーを IAM ロールにマッピングする IAM ポリシーを追加します。
  4. Amazon RDS のアクセスを許可する IAM ロールを作成します。
  5. IAM ロールを Amazon EC2 インスタンスにアタッチします。
  6. IAM ロールを識別する AWS 認証トークンを生成します。
  7. SSL ルート証明書ファイルまたは証明書バンドルファイルをダウンロードします。
  8. IAM ロールの認証情報と認証トークンを使用して RDS DB インスタンスに接続します。
  9. IAM ロールの認証情報と SSL 証明書を使用して RDS DB インスタンスに接続します。

解決策

開始する前に、IAM データベース認証をサポートする DB インスタンスと、データベースに接続する Amazon EC2 インスタンスを起動します。

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

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

: [すぐに適用] を選択すると、保留中の変更もすぐに適用されます (メンテナンスウィンドウ中に適用されるのではありません)。これにより、インスタンスの停止時間が長くなる可能性があります。詳細については、「[すぐに適用] の設定を使用する」をご参照ください。

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

1.    以下のコマンドを実行して、DB インスタンスまたはクラスターエンドポイントに接続します。マスターパスワードを入力してログインします。

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

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

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

3.    デフォルトでは、データベースユーザーは権限なしで作成されます。これは、SHOW GRANTS FOR {dbusername} の実行時に GRANT USAGE として表示されます。以下のコマンドを実行して、SSL を使用して接続するユーザーアカウントをリクエストします:

ALTER USER {dbusername} REQUIRE SSL;

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

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

1.    IAM コンソールを開きます。

2.    ナビゲーションペインで [ポリシー] を選択します。

3.    [ポリシーを作成] を選択します。

4.    必要なユーザーに rds-db:connect アクションを許可するポリシーを入力します。このポリシーの作成の詳細については、「IAM データベースアクセス用の IAM ポリシーの作成と使用」をご参照ください。

注: [リソース] の値を編集する際は、必ず DB インスタンスの識別子やデータベースユーザー名などのデータベースリソースの詳細を使用してください。

5.    [次へ: タグ] を選択します。

6.    [次へ: 確認] を選択します。

7.    [名前] に、ポリシー名を入力します。

8.    [ポリシーを作成] を選択します。

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

1.    IAM コンソールを開きます。

2.    ナビゲーションペインで [ロール] を選択します。

3.    [ロールを作成] を選択します。

4.    [AWS サービス] を選択します。

5.    [EC2] を選択します。

6.    [ユースケースを選択][EC2] を選択し、[次へ: アクセス許可] を選択します。

7.    検索バーの [データベースユーザーをマッピングする IAM ポリシーの追加] セクションで、作成した IAM ポリシーを探します。

8.    [次へ: タグ] を選択します。

9.    [次へ: 確認] を選択します。

10.    [ロール名] に、この IAM ロールの名前を入力します。

11.    [ロールを作成] を選択します。

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

1.    Amazon EC2 コンソールを開きます。

2.    Amazon RDS への接続に使用する EC2 インスタンスを選択します。

3.    新しく作成した IAM ロールを EC2 インスタンスにアタッチします。

4.    SSH を使用して EC2 インスタンスに接続します。

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

Amazon EC2 インスタンスを接続したら、以下の AWS CLI コマンドを実行して認証トークンを生成します。

注: AWS コマンドラインインターフェース (AWS CLI) コマンドを実行する際にエラーが発生する場合は、最新バージョンの AWS CLI を実行しているかを確認してください

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

後で使用できるように、この認証トークンをコピーして保存します。トークンは作成から 15 分で期限切れになります。

また、AWS SDK を使用してトークンを生成することもできます。

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

以下のコマンドを実行して、すべてのリージョンで機能するルート証明書をダウンロードします:

$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

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

証明書ファイルをダウンロードしたら、以下のいずれかのコマンドを実行して SSL で DB インスタンスに接続します。

**注:**アプリケーションが証明書チェーンを受け入れない場合は、以下のコマンドを実行して証明書バンドルをダウンロードします:

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

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})"

使用する証明書 (RootCA またはバンドル) に応じて、次のいずれかのコマンドを実行します:

RootCA コマンド:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Bundle コマンド:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

注: MariaDB クライアントを使用している場合は、--enable-cleartext-plugin オプションは不要です。

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

証明書ファイルをダウンロードしたら、SSL で DB インスタンスに接続します。詳細については、「MySQL データベースエンジンを実行している DB インスタンスへの接続」をご参照ください。

関連情報

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

Amazon RDS DB インスタンスの作成・削除・変更・バックアップ・回復を実行するには、ユーザーにはどんな最小特権が付与されている必要がありますか?

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ