IAMデータベース認証を利用し、Aurora PostgreSQLに接続する手順

AWSではAmazon Aurora for PostgreSQへの認証方法がいくつか用意されています。

 

今回紹介するIAMデータベース認証もその一つです。

 

IAMデータベース認証を使用することで、Amazon Aurora for PostgreSQLへのセキュアな接続を実現し、パスワード管理をする必要がなくなるので運用負荷を減らすことができます。

 

今回の記事では、IAMデータベース認証を利用して、Aurora PostgreSQLに接続するための設定手順を紹介します。

 

 

IAMデータベース認証を使ってみる

■IAMデータベース認証とは

IAMデータベース認証(IAM Database Authentication)は、AWS Identity and Access Management(IAM)を使用して、Amazon AuroraやAmazon RDSのデータベースに対してユーザー認証を行う仕組みです。

 

通常、データベース接続にはユーザー名と固定のパスワードが必要ですが、IAMデータベース認証を利用すると、固定パスワードの代わりにAWSが生成する一時的な認証トークンを使用します。

 

このトークンは15分で有効期限が切れるため、よりセキュアな接続が可能になります。

 

●基本的な動作の流れ

  1. AMポリシーでアクセス権を設定
    データベースにアクセスできるIAMユーザーまたはロールを定義します。

  2. 一時的なトークンを生成
    クライアント(例えばEC2インスタンス上のアプリケーション)がAWS CLIやSDKを使ってトークンを取得します。

  3. トークンを使用して接続
    トークンをパスワードとして使用し、データベースに接続します。

 

●IAMデータベース認証のメリット

  1. セキュリティの向上
    IAMデータベース認証では、固定パスワードを使用せず、一時的なトークンで接続を行います。このトークンは短時間で期限切れとなるため、パスワード漏洩のリスクを大幅に低減できます。

 

  1. 一元管理
    IAMを利用することで、データベースの認証情報を他のAWSリソースのアクセス管理と統一できます。これにより、個別にパスワードを管理する必要がなくなり、アクセス権限の一元管理が可能になります。

 

  1. 簡単なアクセス制御
    IAMポリシーを使って、どのユーザーやリソースがどのデータベースにアクセスできるかを詳細に設定できます。たとえば、「特定のEC2インスタンスのみ特定のデータベースに接続を許可する」といった制御が簡単に行えます。

 

簡単なハンズオンを用意しましたので、実際に触ってみて理解していきましょう。

 

 

ハンズオン

■前提

今回の手順の前提は以下の通りです。
 

  • EC2インスタンスが起動していること
    Red Hat Enterprise Linux version 9 (HVM), EBS General Purpose (SSD) Volume Type

  • RDSデータベースが起動していること
    Aurora PostgreSQL (Compatible with PostgreSQL 16.4)

  • 上記のEC2インスタンスとRDSデータベースが疎通可能であること

 

 

■手順の流れ

今回のハンズオンの手順は以下の通りです。
 

●AWS

  • IAMポリシー作成: Auroraに接続するためのポリシーを作成し、必要なアクセス権を定義します。
  • IAMロールにポリシーをアタッチ: EC2インスタンスにアタッチするIAMロールに作成したポリシーを関連付けます。

 

●OS

  • 証明書配置:PostgreSQL接続に必要な証明書をインスタンスにダウンロードして設定します。

 

●DB

  • DBユーザー(testuser)作成: Aurora上にIAM認証で接続するユーザーを作成します。
  • ロール付与: 作成したユーザーにrds_iamロールを付与して、IAM認証を許可します。

 

●接続確認

  • 接続の確認: IAM認証を使用してAurora PostgreSQLに接続し、動作を確認します。

 

手順の流れは以上です。さっそく試していきましょう。

 

 

■前提

今回の手順の前提は以下の通りです。
 

  • EC2インスタンスが起動していること
    Red Hat Enterprise Linux version 9 (HVM), EBS General Purpose (SSD) Volume Type

  • RDSデータベースが起動していること
    Aurora PostgreSQL (Compatible with PostgreSQL 16.4)

  • 上記のEC2インスタンスとRDSデータベースが疎通可能であること

 

 

■IAMポリシー作成

IAMデータベース認証で使用するポリシーを作成します。このポリシーには、特定のDBユーザーでの接続を許可する権限が含まれます。

 
自身の環境に合わせて、"<>"内を修正してください。注意点は、ClusterIDをエンドポイント名やDB識別子と間違えないようにお願いします。例:cluster-VD5374RXXXXXXXXXXXXXXXXXXX

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": "arn:aws:rds-db:ap-southeast-1:<ACCOUNT_ID>:dbuser:<Cluster_ID>/testuser"
        }
    ]
}

 

ポリシーの作成が完了しましたら、接続元のEC2インスタンスにアタッチしているIAMロールに追加してください。

 

 

■AWS CLIのインストール

AWS CLIをインストールして、EC2からSecrets Managerにアクセスできるようにします。

 

curlコマンドを使ってAWS CLIインストーラをダウンロードし、解凍してインストールしていきましょう。

 

以下のコマンドを実行します。

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo dnf install -y unzip
unzip awscliv2.zip
sudo ./aws/install -i /usr/local/aws-cli/v2/2.17.40 -b /usr/bin

 

【実行結果】

[ec2-user@ip-10-0-1-225 ~]$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 63.6M  100 63.6M    0     0   295M      0 --:--:-- --:--:-- --:--:--  294M
[ec2-user@ip-10-0-1-225 ~]$ sudo dnf install -y unzip
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:26:26 ago on Sat 09 Nov 2024 06:43:29 AM UTC.
Dependencies resolved.
======================================================================================================================================================================================================
 Package                                  Architecture                              Version                                          Repository                                                  Size
======================================================================================================================================================================================================
Installing:
 unzip                                    x86_64                                    6.0-56.el9                                       rhel-9-baseos-rhui-rpms                                    186 k

Transaction Summary
======================================================================================================================================================================================================
Install  1 Package

Total download size: 186 k
Installed size: 392 k
Downloading Packages:
unzip-6.0-56.el9.x86_64.rpm                                                                                                                                           4.8 MB/s | 186 kB     00:00    
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                 3.0 MB/s | 186 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                              1/1 
  Installing       : unzip-6.0-56.el9.x86_64                                                                                                                                                      1/1 
  Running scriptlet: unzip-6.0-56.el9.x86_64                                                                                                                                                      1/1 
  Verifying        : unzip-6.0-56.el9.x86_64                                                                                                                                                      1/1 
Installed products updated.

Installed:
  unzip-6.0-56.el9.x86_64

Complete!
[ec2-user@ip-10-0-1-225 ~]$ unzip awscliv2.zip
<中略>
  inflating: aws/dist/docutils/writers/latex2e/xelatex.tex
  inflating: aws/dist/docutils/writers/latex2e/titlepage.tex
  inflating: aws/dist/docutils/writers/odf_odt/styles.odt
  inflating: aws/dist/docutils/writers/pep_html/pep.css
  inflating: aws/dist/docutils/writers/pep_html/template.txt
[ec2-user@ip-10-0-1-225 ~]$ sudo ./aws/install -i /usr/local/aws-cli/v2/2.17.40 -b /usr/bin
You can now run: /usr/bin/aws --version

 

AWS CLIのインストールは以上です。

 

 

■PostgreSQLクライアントのインストール

Aurora for PostgreSQLに接続するためのPostgreSQLクライアントをインストールしていきます。

 

PostgreSQL 16のモジュール情報を確認し、有効化した後、psqlクライアントをインストールします。

 

インストール後、バージョン確認を行い、psqlが使用可能であることを確認しましょう。

 

以下のコマンドを実行しましょう。

sudo dnf module info postgresql:16
sudo dnf module enable postgresql:16
sudo dnf module list postgresql
sudo dnf install -y postgresql
psql --version

 

【実行結果】

[ec2-user@ip-10-0-1-225 ~]$ sudo dnf module info postgresql:16
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:00:45 ago on Sat 09 Nov 2024 07:11:12 AM UTC.
Name             : postgresql
Stream           : 16
Version          : 9040020240108131224
Context          : rhel9
Architecture     : x86_64
Profiles         : client, server [d]
Default profiles : server
Repo             : rhel-9-appstream-rhui-rpms
Summary          : PostgreSQL server and client module
Description      : PostgreSQL is an advanced Object-Relational database management system (DBMS). The postgresql-server package contains the programs needed to create and run a PostgreSQL server, which will in turn allow you to create and maintain PostgreSQL databases. The base postgresql package contains the client programs that you'll need to access a PostgreSQL DBMS server.
Requires         : platform:[el9]
Artifacts        : pg_repack-0:1.4.8-1.module+el9.4.0+20427+07482b8c.src
                 : pg_repack-0:1.4.8-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pg_repack-debuginfo-0:1.4.8-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pg_repack-debugsource-0:1.4.8-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pgaudit-0:16.0-1.module+el9.4.0+20427+07482b8c.src
                 : pgaudit-0:16.0-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pgaudit-debuginfo-0:16.0-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pgaudit-debugsource-0:16.0-1.module+el9.4.0+20427+07482b8c.x86_64
                 : postgres-decoderbufs-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.src
                 : postgres-decoderbufs-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.x86_64
                 : postgres-decoderbufs-debuginfo-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.x86_64
                 : postgres-decoderbufs-debugsource-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.x86_64
                 : postgresql-0:16.1-1.module+el9.4.0+21089+0ca8f31a.src
                 : postgresql-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-contrib-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-contrib-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-debugsource-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-docs-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-docs-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-plperl-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-plperl-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-plpython3-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-plpython3-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-pltcl-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-pltcl-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-private-devel-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-private-libs-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-private-libs-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-server-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-server-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-server-devel-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-server-devel-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-static-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-test-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-test-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-test-rpm-macros-0:16.1-1.module+el9.4.0+21089+0ca8f31a.noarch
                 : postgresql-upgrade-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-upgrade-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-upgrade-devel-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64
                 : postgresql-upgrade-devel-debuginfo-0:16.1-1.module+el9.4.0+21089+0ca8f31a.x86_64

Name             : postgresql
Stream           : 16
Version          : 9040020240812093225
Context          : rhel9
Architecture     : x86_64
Profiles         : client, server [d]
Default profiles : server
Repo             : rhel-9-appstream-rhui-rpms
Summary          : PostgreSQL server and client module
Description      : PostgreSQL is an advanced Object-Relational database management system (DBMS). The postgresql-server package contains the programs needed to create and run a PostgreSQL server, which will in turn allow you to create and maintain PostgreSQL databases. The base postgresql package contains the client programs that you'll need to access a PostgreSQL DBMS server.
Requires         : platform:[el9]
Artifacts        : pg_repack-0:1.4.8-1.module+el9.4.0+20427+07482b8c.src
                 : pg_repack-0:1.4.8-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pg_repack-debuginfo-0:1.4.8-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pg_repack-debugsource-0:1.4.8-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pgaudit-0:16.0-1.module+el9.4.0+20427+07482b8c.src
                 : pgaudit-0:16.0-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pgaudit-debuginfo-0:16.0-1.module+el9.4.0+20427+07482b8c.x86_64
                 : pgaudit-debugsource-0:16.0-1.module+el9.4.0+20427+07482b8c.x86_64
                 : postgres-decoderbufs-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.src
                 : postgres-decoderbufs-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.x86_64
                 : postgres-decoderbufs-debuginfo-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.x86_64
                 : postgres-decoderbufs-debugsource-0:2.4.0-1.Final.module+el9.4.0+20427+07482b8c.x86_64
                 : postgresql-0:16.4-1.module+el9.4.0+22207+8466e31f.src
                 : postgresql-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-contrib-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-contrib-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-debugsource-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-docs-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-docs-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-plperl-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-plperl-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-plpython3-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-plpython3-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-pltcl-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-pltcl-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-private-devel-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-private-libs-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-private-libs-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-server-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-server-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-server-devel-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-server-devel-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-static-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-test-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-test-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-test-rpm-macros-0:16.4-1.module+el9.4.0+22207+8466e31f.noarch
                 : postgresql-upgrade-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-upgrade-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-upgrade-devel-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64
                 : postgresql-upgrade-devel-debuginfo-0:16.4-1.module+el9.4.0+22207+8466e31f.x86_64

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive
[ec2-user@ip-10-0-1-225 ~]$ sudo dnf module enable postgresql:16
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:01:07 ago on Sat 09 Nov 2024 07:11:12 AM UTC.
Dependencies resolved.
======================================================================================================================================================================================================
 Package                                         Architecture                                   Version                                         Repository                                       Size 
======================================================================================================================================================================================================
Enabling module streams:
 postgresql                                                                                     16

Transaction Summary
======================================================================================================================================================================================================

Is this ok [y/N]: y
Complete!
[ec2-user@ip-10-0-1-225 ~]$ sudo dnf module list postgresql
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:01:52 ago on Sat 09 Nov 2024 07:11:12 AM UTC.
Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)
Name                                       Stream                                 Profiles                                          Summary
postgresql                                 15                                     client, server [d]                                PostgreSQL server and client module
postgresql                                 16 [e]                                 client, server [d]                                PostgreSQL server and client module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[ec2-user@ip-10-0-1-225 ~]$ sudo dnf install -y postgresql
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.

Last metadata expiration check: 0:02:08 ago on Sat 09 Nov 2024 07:11:12 AM UTC.
Dependencies resolved.
======================================================================================================================================================================================================
 Package                                         Architecture                   Version                                                      Repository                                          Size 
======================================================================================================================================================================================================
Installing:
 postgresql                                      x86_64                         16.4-1.module+el9.4.0+22207+8466e31f                         rhel-9-appstream-rhui-rpms                         1.9 M 
Installing dependencies:
 postgresql-private-libs                         x86_64                         16.4-1.module+el9.4.0+22207+8466e31f                         rhel-9-appstream-rhui-rpms                         145 k 

Transaction Summary
======================================================================================================================================================================================================
Install  2 Packages

Total download size: 2.0 M
Installed size: 8.0 M
Downloading Packages:
(1/2): postgresql-private-libs-16.4-1.module+el9.4.0+22207+8466e31f.x86_64.rpm                                                                                        3.1 MB/s | 145 kB     00:00     
(2/2): postgresql-16.4-1.module+el9.4.0+22207+8466e31f.x86_64.rpm                                                                                                      23 MB/s | 1.9 MB     00:00     
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                  19 MB/s | 2.0 MB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                              1/1 
  Installing       : postgresql-private-libs-16.4-1.module+el9.4.0+22207+8466e31f.x86_64                                                                                                          1/2 
  Installing       : postgresql-16.4-1.module+el9.4.0+22207+8466e31f.x86_64                                                                                                                       2/2 
  Running scriptlet: postgresql-16.4-1.module+el9.4.0+22207+8466e31f.x86_64                                                                                                                       2/2 
  Verifying        : postgresql-16.4-1.module+el9.4.0+22207+8466e31f.x86_64                                                                                                                       1/2 
  Verifying        : postgresql-private-libs-16.4-1.module+el9.4.0+22207+8466e31f.x86_64                                                                                                          2/2 
Installed products updated.

Installed:
  postgresql-16.4-1.module+el9.4.0+22207+8466e31f.x86_64                                      postgresql-private-libs-16.4-1.module+el9.4.0+22207+8466e31f.x86_64

Complete!
[ec2-user@ip-10-0-1-225 ~]$ psql --version
psql (PostgreSQL) 16.4

 

PostgreSQLクライアントのインストールは以上です。

 

 

■証明書配置

PostgreSQLの接続に必要な証明書をダウンロードし、適切なディレクトリに配置します。

mkdir -p ~/.postgresql
curl https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem -o ~/.postgresql/root.crt
chmod 600 ~/.postgresql/root.crt

 

証明書配置は以上です。

 

 

■DBユーザー(testuser)作成

PostgreSQLにログインし、IAM認証で使用するユーザーtestuserを作成します。

 

まずはマスタユーザ、もしくはユーザー作成権限のあるDBユーザーでデータベースに接続しましょう。

 

自身の環境に合わせて、"<>"内を修正してください。

USERNAME=postgres
PASSWORD=<マスターユーザパスワード>
HOST=<Auroraエンドポイント名>
PORT=5432
export PGPASSWORD=$PASSWORD

psql -h $HOST -p $PORT -U $USERNAME

 

【実行結果】

[ec2-user@ip-10-0-1-37 ~]$ USERNAME=postgres
PASSWORD=<パスワード>
HOST=saitou-test-aurora.cluster-<識別文字列>.ap-southeast-1.rds.amazonaws.com
PORT=5432
export PGPASSWORD=$PASSWORD
[ec2-user@ip-10-0-1-37 ~]$ psql -h $HOST -p $PORT -U $USERNAME
psql (16.4)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=> 

 

接続できましたら、以下のコマンドでユーザーを作成します。

CREATE USER testuser WITH LOGIN;

 

【実行結果】

postgres=> CREATE USER testuser WITH LOGIN;
CREATE ROLE

 

つづいて、作成したtestuserに、IAMデータベース認証を有効化するロールを付与します。

GRANT rds_iam TO testuser;

 

【実行結果】

postgres=> GRANT rds_iam TO testuser;
GRANT ROLE

 

この設定で、IAM データベース認証トークンを利用して接続できるようになります。

 

DBユーザー作成は以上です。

 

 

■接続確認

AWS CLIを使用してIAM認証用トークンを生成し、PostgreSQLクライアントを使って接続します。

 

OS側で接続に必要な情報を変数に代入していきます。自身の環境に合わせて、"<>"内を修正してください。

HOST=<Auroraエンドポイント名>
REGION=ap-southeast-1
PORT=5432
DB_USER=testuser
DBNAME=<データベース名>

 

【実行結果】

[ec2-user@ip-10-0-1-37 ~]$ HOST=saitou-test-aurora.<ClusterID>.ap-southeast-1.rds.amazonaws.com
REGION=ap-southeast-1
PORT=5432
DB_USER=testuser
DBNAME=testdb

 

続いて、接続時の認証に必要なトークンを取得します。

TOKEN=$(aws rds generate-db-auth-token --hostname $HOST --port $PORT --region $REGION --username $DB_USER)

 

【実行結果】

[ec2-user@ip-10-0-1-37 ~]$ TOKEN=$(aws rds generate-db-auth-token --hostname $HOST --port $PORT --region $REGION --username $DB_USER)

 

トークンを取得しましたら、接続していきましょう。証明書の指定があり、コマンドが長くなっています。

psql "host=$HOST port=$PORT dbname=$DBNAME user=$DB_USER password=$TOKEN sslmode=verify-full sslrootcert=/home/ec2-user/.postgresql/root.crt"

 

【実行結果】

[ec2-user@ip-10-0-1-37 ~]$ psql "host=$HOST port=$PORT dbname=$DBNAME user=$DB_USER password=$TOKEN sslmode=verify-full sslrootcert=/home/ec2-user/.postgresql/root.crt"
psql (16.4)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

testdb=>

 

接続できたでしょうか。

 

念のため、どのユーザーで接続しているか確認してみます。

SELECT current_database(), current_user;

 

【実行結果】

testdb=> SELECT current_database(), current_user;
 current_database | current_user 
------------------+--------------
 testdb           | testuser
(1 row)

testdb=>

 

さきほど作成したtestuserで接続できていることが確認できました。

 

今回のハンズオンは以上です。

 

 

まとめ

IAMデータベース認証を使用することで、Aurora PostgreSQLへの接続をよりセキュアに管理できます。この手法を利用すれば、従来の固定パスワードの代わりに、一時的なトークンを用いることで、セキュリティリスクを軽減することが可能です。

 

今回の手順を参考に、IAMデータベース認証を導入して、安全で効率的なデータベース接続を実現してください。

 

参考リンク:AWS re:Post

 

 

↓ほかの協栄情報メンバーもAmazon RDSについての記事を公開しています。ぜひ参考にしてみてください。

 
IAMデータベース認証を利用し、Aurora PostgreSQLに接続する手順(齊藤弘樹)

 
EC2インスタンス(RHEL)からSecrets Managerを利用してAurora for PostgreSQL 16に接続する手順(齊藤弘樹)

 
Amazon EC2(RHEL9)からAmazon Aurora for PostgreSQL16.4への接続手順(齊藤弘樹)

 
“Amazon RDS for SQL Server”のクロスリージョンリードレプリカを作成・昇格してみた(齊藤弘樹)

 
RDSのMySQL5.7標準サポート終了に伴う8.0へのアップグレードについて(ito.d)

 
AWS RDS for Oracleメモリー不足際の解決案(dapeng)

 

 

Last modified: 2024-11-23

Author