Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[備忘メモ] EC2(Amazon Linux) から RDS(PostgreSQL) へ SSL で接続する方法

PostgreSQL はデフォルトで SSL 接続が有効になっているようです。
そのため、SSL 証明書を設定せずに DB 接続しようとするとエラーになることがあります。

以下は Laravel でのエラーログです。

[2020-06-18 12:00:06] local.ERROR: PDOException: SQLSTATE[08006] [7] 証明書ファイル"/var/lib/nginx/.postgresql/postgresql.crt"をオープンできませんでした: 
そのようなファイルやディレクトリはありません

Web サーバ(nginx)が RDS (PostgreSQL)に接続しようとして、証明書不在でエラーが起きているようです。

SSL 証明書を作成する

PostgreSQL に SSL 接続する方法はいくつかあるようです。
今回は、先ほどのログにあったパス(PostgreSQL を使用する際に SSL 証明書を参照するデフォルトパス)に対して、証明書を作成する方法で行きます。

早速、先ほどのログにあったパスに移動してみます。

$ cd /var/lib/nginx/
$ ls -la
total 20
drwxrwx---  5 nginx root  4096 Sep 12  2019 .
drwxr-xr-x 23 root  root  4096 Jun 17 03:13 ..
drwxr-xr-x  2 nginx nginx 4096 Nov 16  2017 .fop
drwxr-----  3 nginx nginx 4096 Jun 11  2016 .pki
drwxrwx---  7 nginx root  4096 Sep 12  2019 tmp

案の定、.postgresql は存在しません。

それでは最初に、AWS から証明書を入手します。
入手可能な証明書の種類については、以下を参照してください。

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

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

入手した証明書、.pem.crt に変換します。
ついでにファイル名もデフォルトのものに変えておきます。

$ openssl x509 -outform der -in rds-combined-ca-bundle.pem -out postgresql.crt

あとは、先ほどのエラーログに書かれていたデフォルトのパス(/.postgresql/root.crt)に証明書を移動します。
ついでに、所有者を nginx に変更しておきます。

$ mkdir .postgresql && cp postgresql.crt .postgresql/postgresql.crt
$ sudo chown -R nginx:nginx .postgresql/

これでエラーが解消されたはず!

参考文献

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.SSL

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/ssl-certificate-rotation-postgresql.html

https://dev.classmethod.jp/articles/ssl-connection-to-amazon-rds-postgresql/

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

YopiNoji
最近は自分のブログにアウトプットすることの方が多いです。 https://yopinoji.com/
https://yopinoji.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away