Amazon RDS を使い始める際に見るべき 10 の設定

AWS

2023.2.9

Topics

はじめに

初めて RDS を利用しようとすると様々な設定項目があり、どう設定すべきかわからない方が多いのではないでしょうか。
本記事は、そういった方に向けた内容となっております。

  • 対象者
    • これから AWS 上でデータベースを新規に稼働させようと思っている⽅
    • オンプレミスのデータベースを AWS 上に移⾏しようと思っている⽅
    • AWS 上で RDS を使い始めた⽅
  • ⽬的
    • AWS 上でデータベースを動かすために知っておくべきことを理解する
    • AWS を使ったことがない、使い始めたばかりの⽅へ RDS が持つ機能や設定内容について理解する
    • RDS の設定が何を意味しているのかを理解する

今回は実際に RDS で設定する項目にフォーカスしていますが、より AWS のデータベース特性を理解されたい方は以下資料をご覧ください。
AWS でデータベースを始めるのに必要な 10 のこと

また、本記事では、設定を変更する方法についての詳細は記述しないため、各セクションにある参考記事をご覧ください。

Amazon RDS 概要

AWS で提供されているデータベースサービスの中で、データベースの基本とも言えるリレーショナルデータベースのサービスとなっています。

特徴

  • 6 つのデータベースエンジンを選択可能
  • マネージドサービスのため管理が容易
  • 簡単にパフォーマンスとスケーラビリティのスケーリングが可能
  • 可用性と耐久性に優れている

Amazon RDS(マネージドリレーショナルデータベース)| AWS

見るべき設定

ここでは Amazon RDS を利用する中で、ベストプラクティスな設定項目を 10 個挙げています。
前提として、意図してその設定をしている場合は問題ないです。
しかし、その設定を意図していない場合やリスクを認識しないまましている場合は気をつけてください。

  1. パブリックアクセスを許可しない
  2. セキュリティグループを全開放しない
  3. ストレージの暗号化を有効化する
  4. カスタムパラメーターグループを設定する
  5. ログをエクスポートする
  6. マルチ AZ を設定する
  7. 監視設定をする
  8. 削除保護を有効化する
  9. メンテナンスウィンドウ&バックアップウィンドウを使用率の最も低い時間帯にする
  10. Performance Insights を有効化する

1.パブリックアクセスを許可しない

  • 行っていない場合のリスク:インターネットからデータベースにアクセスできる可能性がある

パブリックアクセスの設定

本設定を有効化している場合は、VPC 以外からのアクセスを受けられる様にパブリック IP アドレスが RDS インスタンス割り当てられます。
(実際にアクセスできるかはネットワーク経路や、セキュリティグループの設定によっても変わります)
しかし、データベースはエンドユーザーからアクセスできないようにしておくのが望ましいと考えます。
そのため、本設定を有効化しないほうがセキュリティを向上することができます。

AP サーバからのアクセスしか受け付けないようなユースケースの場合は本設定を有効化しなくて良いと思います。
もし本機能を、開発者などがデータベースに接続するために利用している場合は、本機能ではなく踏み台サーバや Client VPN をご検討ください。

2.セキュリティグループを全開放しない

  • 行っていない場合のリスク:不要なアクセス元からデータベースにアクセスできる可能性がある

セキュリティグループとは、関連付けられたリソースに到達するトラフィックおよびリソースから離れるトラフィックを制御することができます。
そのため、必要なサーバから必要なポートのみのアクセスを許可することによりセキュリティを向上することができます。

ベストプラクティスとしては、データベースにアクセスするサーバのセキュリティグループを許可するように設定しましょう。
セキュリティグループによるアクセス制御 – Amazon Relational Database Service

全開放している状態
(インバウンドルール)

ポート範囲 ソース
0 – 65535 0.0.0.0/0

制限している状態
(インバウンドルール)

ポート範囲 ソース
3306(MySQL) AP サーバのセキュリティグループ ID

セキュリティグループには IP アドレスだけでなく、別のセキュリティグループを許可するという設定が可能です。
セキュリティグループ ID を使用することでよりアクセス対象をしぼることができセキュリティを向上することができます。

3.ストレージの暗号化を有効化する

  • 行っていない場合のリスク:ストレージへ不正アクセスされた際にデータが漏洩する可能性がある

ストレージの暗号化

RDS では、DB インスタンスを暗号化できます。
RDS の暗号化された DB インスタンスでは、業界スタンダードの AES-256 暗号化アルゴリズムを使用して、DB インスタンスをホストしているデータをサーバー側で暗号化します。
データが暗号化されると、RDS はパフォーマンスの影響を最小限に抑えながら、データへのアクセスと復号の認証を透過的に処理します。
暗号化を使用するために、ユーザ側でクライアントアプリケーションを変更といったことは必要はありません。

また、Well-Architected でもベストプラクティスとして定義されております。
ストレージ暗号化することで、保管中のデータに対してのセキュリティを向上することことができます。
保管時のデータをどのように保護していますか? – AWS Well-Architected フレームワーク

ストレージ暗号化は、DB インスタンスを作成したあとからでは、一筋縄では有効化できません。
そのため、インスタンス作成時に有効化することを推奨します。

暗号化されていない DB インスタンスを暗号化する手順については手順については以下資料を御覧ください。
暗号化されていない DB インスタンスの RDS DB スナップショットを暗号化する

なお、CloudFormation などの IaC で作成する場合は注意が必要です。
コンソールからだとデフォルトで有効になっている本機能ですが、CloudFormation ではデフォルト値が異なります。

StorageEncrypted
DB インスタンスが暗号化されているかどうかを示す値。デフォルトでは、暗号化されていません。
AWS::RDS::DBInstance – AWS CloudFormation

4.カスタムパラメーターグループを設定する

  • 行っていない場合のリスク:デフォルトパラメータから変更ができない

カスタムパラメーターグループ
パラメータグループでは、データベースに割り当てるメモリや文字コードなど指定できます。

カスタムパラメーターグループの設定を行っていない場合は、AWS のデフォルトパラメータグループが設定されています。
このデフォルトパラメータグループは、ユーザ側で変更することができません。

パラメータグループのパラメータを変更する場合は、カスタムパラメータグループを作成して変更する必要があります。
今までmy.cnfpostgresql.confで変更していたパラメータは、RDS の場合このカスタムパラメータグループを変更して行います。

既存でデフォルトパラメータが設定されている場合は、パラメータグループを作成して DB インスタンスに割り当てることで適用できます。
注意点としては、パラメータグループの変更にダウンタイムは発生しないですが、カスタムパラメータグループで静的パラメータが変更されている場合は、パラメータを適用するのに DB インスタンスの再起動が必要になります。

パラメータグループ変更の詳細については以下資料をご覧ください。
Amazon RDS DB パラメータグループの値を変更する

5.ログをエクスポートする

  • 行っていない場合のリスク:ログがローテーションされ消えてしまう可能性がある

ログのエクスポート

RDS では各 DB エンジンのパラメータによってログの保存期間が変わります。

MySQL の場合

RDS for MySQL は mysql-error-running.log ファイルを 1 時間ごとにローテーションします。過去 2 週間に生成されたログが保持されます。
RDS for MySQL データベースログの概要 – Amazon Relational Database Service

PostgreSQL の場合

rds.log_retention_period パラメータは、 RDS for PostgreSQL DB インスタンスがログファイルを保持する期間を指定します。デフォルトの設定は 3 日 (4,320 分) ですが、1 日 (1,440 分) から 7 日 (10,080 分) までの任意の時間に設定できます。 RDS for PostgreSQL DB インスタンスに、一定期間ログファイルを保持するのに十分なストレージがあることを確認してください。
RDS for PostgreSQL データベースログファイル – Amazon Relational Database Service

もし、一ヶ月前のログを調査したい場合や、監査でログを保持し続けなければならない場合などは、CloudWatch Logs にログをエクスポートすることで長期間ログを保存できます。

Amazon CloudWatch Logs とは
Amazon CloudWatch Logs を使用して、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、AWS CloudTrail、Route 53 およびその他のソースからログファイルをモニタリング、保存、およびアクセスすることができます。
Amazon CloudWatch Logs とは – Amazon CloudWatch Logs

本設定をする場合、CloudWatch Logs のログの保存期間を設定しないとデフォルトだと無制限に保持し続けるので気をつけてください。

Amazon RDS または Aurora for MySQL インスタンスのログを CloudWatch に公開
Amazon CloudWatch Logs へのデータベースログの発行 – Amazon Relational Database Service

6.マルチ AZ を設定する

  • 行っていない場合のリスク:可用性が低下する可能性がある

マルチ AZ

RDS には、可用性を向上するための機能としてマルチ AZ があります。
(他にも「マルチ AZ クラスター」がありますがどちらでも大丈夫です、本記事では両機能の違いについては解説しません)

マルチ AZ は、2 つの AZ にまたがってインスタンスが作成されます。
一つの AZ はプライマリーインスタンスが、もう一つの AZ にはセカンダリーインスタンスが展開されます。

RDSマルチAZ配置

マルチ AZ にすることよって以下のメリットが受けられます。

  • 自動フェイルオーバー
  • データベースのパフォーマンスを保護する
  • 耐久性を向上させる
  • 可用性を高める

有効化するだけで可用性を向上させることができるので、本番 DB にはぜひ設定していただきたい設定となっております。

マルチ AZ の詳細については以下資料を御覧ください。
Amazon RDS マルチ AZ 配置 | クラウドリレーショナルデータベース | Amazon Web Services

7.監視設定をする

  • 行っていない場合のリスク:DB インスタンスの障害に気づかない可能性がある

AWS では、監視サービスの CloudWatch を使用することで簡単にリソース監視が行なえます。

監視の設定方法や監視対象の詳細については以下資料を御覧ください。
メトリクスを使用したパフォーマンスの問題の特定

8.削除保護を有効化する

  • 行っていない場合のリスク:誤ってインスタンスを削除できてしまう可能性がある

削除保護
削除保護機能とは、本設定が有効化になっている間はデータベースを削除することができません。
もし、削除をしようとすると以下のように削除できない旨が表示されます。

削除保護画面

誤って削除することを防ぐために有効化を推奨します。

本当にインスタンスを削除したい場合は、「変更」から本設定を無効化してから削除という流れになります。

9.メンテナンスウィンドウ&バックアップウィンドウを使用率の最も低い時間帯にする

  • 行っていない場合のリスク:メイン時間にパフォーマンスが低下する可能性がある

  • メンテナンスウィンドウ:変更やソフトウェアのパッチなどが実行されるタイミング

  • バックアップウィンドウ:自動バックアップが実行されるタイミング

メンテナンスウィンドウ
バックアップウィンドウ

これらウィンドウの時間帯を指定しないとリージョンごとに割り当てられた時間内でランダム値が割り当てられます。

この設定された時間内では、AWS が裏側で色々とやってくれている影響で、わずかながらパフォーマンスに影響が出る場合があります。
そのため、アプリの利用者が増える時間帯に設定されているとアプリになにかしらの影響が出てしまう可能性があります。

なので、AWS ではその時間帯を避けて設定を行うことを推奨しています。

自動バックアップを有効にし、1 日のうちで書き込み IOPS が低くなる時間帯にバックアップが実行されるようにバックアップウィンドウを設定する。この場合、バックアップによるデータベース使用量は最も少なくなります。
Amazon RDS のベストプラクティス – Amazon Relational Database Service

10.Performance Insights を有効化する

  • 行っていない場合のリスク:DB パフォーマンス分析に時間がかかる可能性がある

Performance Insights

こちらは、ぜひ設定していただきたい内容となっております。
Performance Insights を使用することにより、 データベースのパフォーマンス分析を簡単に実現することができます。

データベースを運用していく中で、「最近パフォーマンスが悪くなった」や「特定のクエリ結果が遅い」などパフォーマンス面で課題が見つかるかと思います。
そういったときに、Performance Insights を使うことでより簡単に分析することが可能になってます。

デフォルトの保存期間(7 日間)だと無料で利用することができます。

エンジンによって制限があるので一度要件をご確認ください。
Amazon RDS DB エンジン、リージョン、とインスタンスクラスでサポートされているパフォーマンスインサイト – Amazon Relational Database Service

Performance Insights については以下の記事をご覧ください。

初めての Performance Insights 入門 | Amazon Web Services ブログ
Performance Insights を使用した Amazon RDS データベースの負荷分析 | Amazon Web Services ブログ
突然データベースのパフォーマンスが悪化、あなたならどうする?
Amazon RDS におけるパフォーマンス最適化とパフォーマンス管理

参考記事

Amazon RDS のベストプラクティス – Amazon Relational Database Service
Top 10 Things to Consider to run databases on AWS_rev.pdf

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら