RDSにIAMデータベース認証でログインする

記事タイトルとURLをコピーする

はじめに


突然はじめまして、當摩です。

AWS RDS(以下RDS)でIAMデータベース認証を有効化して、AWS EC2(以下EC2)からパスワードを使用せずにログインできるような設定をしました。
IAMデータベース認証ログインにすると、接続元リソースに追加したロール認証情報と認証トークンを使用してRDSにログインするため、IAMユーザがパスワードを持つ必要が無くなり、セキュリティの向上につながります。

このブログではIAMデータベース認証の有効化設定から実際にログインするまでを記載しています。


前提条件


すでにEC2からRDSに接続できる環境が構築されていることを想定して、このブログを書いています。


実際に設定してみる


IAMデータベース認証有効化設定


1.対象のRDSインスタンスを選択し、変更を押します。

f:id:swx-chihoshi-taima:20210824170106p:plain


2.データベース認証タブでパスワードとIAMデータベース認証に設定して、変更の保存をします。

f:id:swx-chihoshi-taima:20210824170350p:plain

この作業によるダウンタイムは発生しませんでした。



RDSにログインしてユーザ、データベースを作成


どのデータベースにどのユーザでIAMデータベース認証ログインするかを決めます。

今回はiam_dbというデータベースにiam_db_userというユーザでIAMデータベース認証ログインできるように設定していきます!


1.EC2からこれまで通り、パスワード認証でRDSにログインします。


mysql -h [RDSエンドポイント名] -P 3306 -u [パスワードログインユーザ名] -p

f:id:swx-chihoshi-taima:20210825163357p:plain


2.IAMデータベース認証ログイン用のユーザの作成する。


iam_db_userを作成します。

CREATE USER [IAMデータベース認証ログインユーザ名] IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';

ユーザ一覧を確認したいときには以下のコマンドを打ちましょう。

select Host, User from mysql.user;



IAMデータベース認証ログイン用に作成したユーザが表示されています。

f:id:swx-chihoshi-taima:20210825170054p:plain


3.データベースの作成


iam_dbを作成します。

create database [データベース名];

データベース一覧を確認したいときは以下のコマンドを打ちましょう。

show databases;



作成したデータベースが表示されます。

f:id:swx-chihoshi-taima:20210825180104p:plain


4.作成したユーザに権限を与える。


GRANT ALL PRIVILEGES ON [データベース名].* TO '[IAMデータベース認証ログインユーザ名]'@'%';

今回だとIAMデータベース認証ログインユーザ名に「iam_db_user」、データベース名に「iam_db」を入れ、iam_db_userがiam_dbにログインできるようにしました。


アクセストークン取得用IAMポリシーの作成


1.以下のコマンドを設定したIAMポリシーを作成します。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
             "rds-db:connect"
         ],
         "Resource": [
             "arn:aws:rds-db:ap-northeast-1:[アカウントID]:dbuser:[RDSのリソースID]/[IAMデータベース認証ログインユーザ名]"
         ]
      }
   ]
}

マネージメントコンソールではこのようになります。

f:id:swx-chihoshi-taima:20210825183234p:plain


アクセストークン取得用IAMポリシーを接続元のリソースへアタッチ


1.接続元のEC2に移動し、セキュリティタブからIAMロールに飛びます。


f:id:swx-chihoshi-taima:20210824185536p:plain


2.アクセストークン取得用IAMポリシーの作成の手順で作成したポリシーをアタッチします。


f:id:swx-chihoshi-taima:20210824185549p:plain


ログインしてみる


ログイン前にAWS CLIがインストールされているか確認しましょう。

aws --version

f:id:swx-chihoshi-taima:20210825184233p:plain

↑この出力結果だとインストールされています。


AWS CLIがインストールされていなければインストールをします。

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

unzip awscliv2.zip

./aws/install


ここまでできたら実際にパスワードを使わずにIAM権限の認証情報でログインしてみます。 -pの後は、認証トークンをとってくるCLIのコマンドです。

mysql -u [IAMデータベース認証ログインユーザ名] -h [RDSエンドポイント] -p`aws rds generate-db-auth-token --hostname [RDSエンドポイント] --port 3306 --username [IAMデータベース認証ログインユーザ名] --region ap-northeast-1` --enable-cleartext-plugin


IAMデータベース認証でログインできました!

f:id:swx-chihoshi-taima:20210910184256p:plain


おわりに


今回はiam_dbというデータベースにiam_db_userというユーザでIAMデータベース認証ログインできるように設定しました。

開発者ごとに作業したいデータベースは異なるかと思います。

ログインでパスワードを使用しない!+ユーザごとにアクセスできるデータベースを権限で制限する!の二刀流でよりセキュリティが守られるのだな、と設定していて感じました。