暗号化された RDS インスタンスの KMS キーを変更する

Posted on

RDS の暗号化オプションを有効にすると、KMS を使ってストレージを透過的に暗号化できます。また、その RDS インスタンスのリードレプリカやスナップショットも同じキーで暗号化されます。

Amazon RDS リソースの暗号化」から引用します。

Amazon RDS DB インスタンスの暗号化オプションを有効にすることで、保管時の Amazon RDS インスタンスとスナップショットを暗号化できます。保管時に暗号化されるデータには、DB インスタンス、自動バックアップ、リードレプリカ、スナップショットの基本的なストレージが含まれます。

デフォルトキーを使うとスナップショットの共有ができない

RDS には別の AWS アカウントとスナップショットを共有する機能があります。この機能を使えば、本番環境とそれ以外でアカウントを別にしていても、スナップショットを経由してデータを共有することができます。たとえば、本番データで事前にマイグレーションの時間計測を行いたいときなどに便利です。

暗号化オプションが有効な場合でも一緒に KMS キーを共有すれば使えます。ただし、暗号化するときに AWS が用意したデフォルトキーを使っていると共有できないという制約があります。なぜなら、デフォルトキーは別のアカウントと共有することができないからです。

この場合はデフォルトキーから自分で作った KMS キーに変更する必要がありますが、ドキュメントを読んでもさらっと書かれているだけなので手順をまとめておきます。 Aurora とそれ以外の RDBMS では変更できるタイミングが違います。

Aurora 以外の場合はスナップショットをコピーするときに変更する

Aurora 以外の場合はスナップショットをコピーするときに変更することができます。元になるスナップショットは自動スナップショットでも手動スナップショットでも大丈夫です。

スナップショットの一覧から変更したいスナップショットを選び、[Actions] → [Copy Snapshot] の画面からキーの変更ができます。

ただし、この方法で本番稼働中インスタンスのキーを変更するのは厳しいでしょう。 DB へのアクセスを止めてスナップショットを取り、さらにスナップショットをコピーし(このときにキーを変更)、そのスナップショットから RDS インスタンスを起動することになるので時間がかかります。この方法が使えるのは、データ量が少ないときだけでしょう。

Aurora の場合はクローンするときに変更する

Aurora の場合でも上記の方法は使えるのですが、もっとスマートで早く終わらせる方法があります。

RDS の中で Aurora だけが使えるクローン機能を使います。ドキュメントには詳しく書かれていませんが、クローンするときに別のキーを指定することができます。

以前書いた「Aurora のクローン機能を使った VPC 移行を試してみた」でも説明していますが、Aurora のクローン機能は Copy On Write の仕組みで実現されています。クローン機能で新しいインスタンスを起動したとき、ストレージ上でデータはコピーされないため数分で完了します。この方法であれば短時間で変更できます。

まとめ

スナップショットの共有ができない以外にも次のような制約があります。

キーに対するフルコントロールの権限が必要な場合は、カスタマー管理型のキーを作成する必要があります。 AWS KMS によってプロビジョニングされるデフォルトのキーは、削除、取り消し、またはローテーションすることができません。

本番運用が始まったあとに KMS キーを変更するのはなかなか大変な作業なので、デフォルトキーは使わずに最初から自分で作った KMS キーを指定する方が良さそうです。