【New!】Amazon RDSの2つの読み取り可能なスタンバイを持つマルチAZデプロイメントで、IAMユーザ認証をサポートするようになりました!

【New!】Amazon RDSの2つの読み取り可能なスタンバイを持つマルチAZデプロイメントで、IAMユーザ認証をサポートするようになりました!

Clock Icon2024.10.18

こんにちは。まると(@MaruDevG)です。
現地時間2024/10/17にAmazon RDSの2つの読み取り可能なスタンバイを持つマルチAZデプロイメントで、IAMデータベース認証をサポートするアナウンスがありました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/10/amazon-rds-multi-az-deployment-standbys-aws-iam-authentication/

2つの読み取り可能なスタンバイを持つデプロイメントの場合、従来はIAMデータベース認証が選択できない状況でしたが、今回のアナウンスにより、選択可能となりました。

m-E-1

今回のアナウンスにより、新たに「パスワードとIAMデータベース認証」が2つの読み取り可能なスタンバイを持つデプロイメントでも選択できるようになりました。

m-E-2

IAMユーザやロールを介して認証することができることで、

  • AWS全体のアクセス制御の一元化
  • IAMユーザやロールは一時的な認証情報(トークン)を使用するため、長期間有効なパスワードよりもセキュリティが向上
  • IAMポリシーによるデータベースへのアクセス管理を細かく制御
  • AWS他サービスとの統合がより簡単に

など様々なメリットを受けることができます。

今回のアナウンスを受けて、Amazon RDSにおけるIAMデータベース認証を実際に試してみたいと思います。これにより、具体的な手順や注意点を共有できればと思います。

やってみた

今回は以下を要件にやってみたいと思います。

項目名 設定値
リージョン バージニア北部(us-east-1)
DBエンジン MySQL
エンジンバージョン マルチAZ配置に対応するバージョン

データベースの作成

まずはAWS上にデータベースを作成していきます。
データベースを作成する際、AWSマネジメントコンソールでは「テンプレート」が選択できますが、「無料利用枠」以外を選択します。
また、可用性と耐久性のデプロイオプションでは「マルチAZ DBクラスター」を選択します。

m-E-3

これは今回のアナウンスが2つの読み取り可能なスタンバイを持つマルチAZデプロイメントに対応するものであるため、スタンバイDBインスタンスを配置する「マルチAZ DBインスタンス」ではなく、「マルチAZ DBクラスター」を選択します。
また、テンプレートで「無料利用枠」を選択すると「マルチAZ DBクラスター」が選択できなくなるため、本対応を行なっています。

また、データベース認証オプションでは「パスワードとIAMデータベース認証」を選択します。

m-E-4

その他の値は任意の設定値とします。

IAM認証を使用したデータベースアカウントの作成(の前に)

IAMデータベース認証を行うには、データベース側にユーザの作成、IAMポリシーの作成が必要となります。
今回は検証目的のため、IAMポリシーの作成は省略しますが、実際の運用環境では、適切なIAMポリシーを作成する必要があります。
新規でIAMポリシーを作成する場合は以下のような表記となります。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
             "rds-db:connect"
         ],
         "Resource": [
             "arn:aws:rds-db:<リージョン>:<AWSアカウントID>:dbuser:<DBインスタンス識別子>/<データベース側のユーザ名>"
         ]
      }
   ]
}         

引用元

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html

IAM認証を使用したデータベースアカウントの作成

では実際にデータベースアカウントの作成を行います。
まず、DBに管理者アカウントでデータベースにログインします。(本記事ではCloudShellを使用していきます。)

mysql -h <ライターインスタンスのエンドポイント> -u <管理者ユーザ名> -p

続いて、ユーザの作成を行います。
以下のユーザガイドを参考に実施します。(今回はMySQLで検証を行なっているため、今後の構文/設定方法についてMySQLに準拠したものとします。)

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.DBAccounts.html

CREATE USER '<ユーザ名>' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'; 

このAWSAuthenticationPluginを使用することでIAMデータベース認証を実現します。
続いて、IAMによる認証の場合、SSLによる接続が行われるのでSSLを許可します。

ALTER USER '<ユーザ名>'@'%' REQUIRE SSL;     

これにて準備完了です。

IAMデータベース認証を行う

それでは実際にIAMデータベース認証を用いて、データベースにログインしていきます。
ログインまでのフローは以下のようになっています。

  1. IAM認証トークンの生成
  2. トークンを用いてデータベースに接続

まずはIAM認証トークンを取得していきます。

aws rds generate-db-auth-token \
   --hostname <データベースエンドポイント> \
   --port 3306 \
   --region <リージョン> \
   --username <データベースのユーザ名>

取得したトークンを用いてデータベースに接続します。
なお、SSL接続にあたり証明書が必要になるため、以下から対応するリージョンにあったものをダウンロードしておきます。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions

では、以下のコマンドでデータベースに接続します。

mysql --host=<データベースのエンドポイント> \
    --port=<ポート番号> \
    --ssl-ca=<SSL証明書へのパス> \
    --enable-cleartext-plugin \
    --user=<データベースのユーザ名> \
    --password=<トークン>

上記のコマンドを実行、データベースに接続できれば成功です。

m-E-5

終わりに

従来はマルチAZ DBインスタンスや単一のDBインスタンスでのみサポートされていたIAMデータベース認証が、今回のアナウンスにより、2つの読み取り可能なスタンバイを持つマルチAZデプロイメントでも利用可能となりました。
この変更により、シンプルな運用が実現できる点は、特に大規模なシステム運用において大きなメリットとなるでしょう。

今回の記事は以上となります。お読みいただきありがとうございました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.