Diary

@ssig33

15 Jun 2020 Mon 11:25

Heroku のデータベースには RDS を使ってよい(あるいはそれが嫌なら Heroku を使うべきではない)という話

Heroku を使うときに問題になるのは、データベースに何を使うかということです。

  • Heroku 標準の PostgreSQL
  • Amazon RDS
  • ClearDB (Heroku で MySQL を使えるアドオン)

などが代表的な選択肢としてあります。ここで Heroku 公式が公開している RDS を使う方法についてのドキュメントを見ると、 RDS のインスタンスをインターネットに全公開して Heroku から接続せよと書かれています。

ネットワーク的な防壁がそろった環境が当然の現代においてこの方針はいかにも許容できないもののように思えます。しかし、ここで ClearDB と Heroku 標準の PostgreSQL について考えてみましょう。

まず ClearDB ですがこれはインスタンスがインターネットに全公開されています。 RDS を使う場合と同じです。そして標準 PostgreSQL のほうですが、これは Heroku 内部からしか接続できません。しかし、アカウント A のφというアプリにデプロイしたインスタンスにアカウント B のΩというアプリから接続することが可能です。このため攻撃者は Heroku 内部に攻撃環境をデプロイすればいいだけのことで、実質的にはインターネットに全公開されているのとまったく変わりません。

なので結局のところインターネットに全公開した RDS を使う以上のセキュリティを Heroku 環境で簡単に獲得することはできません。このため、運用コストが低い Amazon Aurora を使うことが最も現実的な選択肢になりますし、またこれが生理的、セキュリティ的に嫌という場合は Heroku を使ってはいけません。

ですがクラウド各社が「Heroku っぽいんだけど Heroku ほど便利ではない」というものをリリースしてきたというのが結局のところこの 13 年の大いなる歴史だったと言えると思います。セキュリティ的に通常の Heroku が許容できない場合、 Heroku Enterprise の Heroku Private Spaces (自分の VPC 内ですべてが動く)を検討する価値は十分にあるでしょう。ただ高いのでおすすめはしない。