Amazon Web Services ブログ

AWS KMS の暗号化機能を使って、Amazon RDS のデータを保護する

あらゆる業界の組織にとって、データのプライバシーは不可欠です。暗号化サービスは、不正アクセスからデータを保護する標準的な方法の 1 つです。暗号化では正しい復号化キーがないと、データが読み取れないようにデータを変更します。

Amazon RDS は AWS が所有するキーを使用して、デフォルトでデータを暗号化します。デフォルト以外のキーを使用してデータを暗号化することを希望するお客様もいます。そのため、デフォルト以外のキーを使用する場合、堅牢なキーの作成、管理、削除のツールとプロセスがデータセキュリティに不可欠です。こうしたツールとプロセスは、キーの有効期限がデータの可用性に影響することを防ぐのにも役立ちます。

この投稿では、AWS KMS が RDS に保存したデータのデータ暗号化とキー管理プロセスを簡素化する方法について説明します。今回取り上げるトピックは、次のとおりです。

  • キー管理
  • キーの作成
  • 暗号化データベースの作成
  • 暗号化データベーススナップショットの作成とコピー
  • キーのローテーション
  • キーアクセスの制御

AWS KMS の導入

KMS を使用して、RDS などの AWS のサービスに保存しているデータを暗号化できます。キーのアクセス許可は、IAM と完全に統合しています。さらに、すべての KMS API 呼び出しは AWS CloudTrail への書き込みを行い、キーの作成、使用、削除の完全な監査証跡を提供します。KMS キーの長さは 256 ビットで、ガロア/カウンターモード (GCM) の Advanced Encryption Standard (AES) を使用します。詳細については、AWS Key Management Service Cryptographic Details (PDF) をご参照ください。

RDS はすべてのキータイプをサポートしますが、次のテーブルは KMS で使用される 3 つの主要なキータイプを示しています。詳細については、「AWS Key Management Service の概念」をご参照ください。

CMK タイプ 表示可能か? 管理可能か? AWS アカウントのみの使用?
AWS 所有の CMK いいえ いいえ いいえ
AWS 管理型 CMK はい いいえ はい
カスタマー管理型 CMK はい はい はい

AWS が所有するキーは AWS アカウントの外部に存在し、AWS が所有および管理するカスタマーマスターキー (CMK) のコレクションの一部です。

AWS は AWS 管理型のキーを作成して全面的に管理します。カスタマー管理型のキーは、お客様が作成、所有、管理する AWS アカウントの CMK です。

次のテーブルに示すように、カスタマー管理型の CMK でデータを暗号化および復号化するのに使用するソースキーマテリアルは、複数のソースから提供されます。

カスタマー管理型の CMK タイプ キーマテリアルの提供元
カスタマーが管理 AWS KMS
カスタマーが管理する外部ソース お客様 (外部ソース、すなわち HSM または OpenSSL を使用)
カスタマーキーストア お客様 (CloudHSM を使用)

カスタムキーストアには、HSM からのプロビジョニングも必要となります。詳細については、「AWS Key Management Service (KMS) カスタムキーストアの発表」をご参照ください。

キーの作成

AWS KMS コンソールを開き、カスタマー管理型キーを作成します。詳細については、KMS ドキュメントの 「キーの作成」をご参照ください。このキーを使用して、以下の手順で暗号化された RDS データベースクラスターを作成します。

暗号化した RDS データベースクラスターの作成

データベースを暗号化するには、データベースクラスターの作成中に KMS キーを識別する必要があります。このキーは、RDS が使用するボリュームに保存されているすべてのデータを暗号化します。暗号化されたデータは、KMS キーのアクセス許可がないとアクセスできません。そのアクセス許可がなければ、RDS スナップショットを復元したり、停止した RDS インスタンスを開始しようとすると失敗します。

RDS コンソールを開き、データベースクラスターを作成します。以前に追加の設定セクションで作成した KMS キーを選択してください。プロセスの詳細とウォークスルーについては、「Amazon RDS リソースの暗号化」をご参照ください。

暗号化したデータベーススナップショット

暗号化した RDS インスタンスから作成したすべてのデータベーススナップショットは、暗号化を保持し、同じ KMS キーを共有します。データベーススナップショットの暗号化に使用する KMS キーにアクセスできる場合にのみ、こうしたスナップショットから新しいデータベースを構築できます。

RDS スナップショットの作成

RDS スナップショットを作成するには、データベースクラスターインスタンスを選択し、[Actions]、[Take snapshot] の順にクリックします。

暗号化した RDS スナップショットを他の AWS リージョンにコピーする

RDS スナップショットを作成したら、このセクションで説明する手順に従い、暗号化した RDS スナップショットを他の AWS リージョンにコピーできます。KMS キーはリージョンを構成しています。そのため、スナップショットを別のリージョンにコピーするには、まずコピー先リージョンで KMS キーを作成する必要があります。この新しいキーを使用して、コピー先リージョンのスナップショットを暗号化します。

  1. まず、目的のリージョンを選択し、前述と同じ手順でそのリージョンにキーを作成します。新しく作成したキーの key-id 値と key-alias値を記録します。
  2. 現在の RDS スナップショットが存在するリージョンで、RDS コンソールを開きます。
  3. [Snapshots] をクリックし、コピーする RDS スナップショットを選択します。[Action]、[Copy Snapshot] の順にクリックします。
  4. コピー先リージョンを選択し、スナップショットに分かりやすい識別子を付けます。タグ付け戦略に合わせてタグをコピーします。
  5. [Encryption] の下で、コピー先リージョンの新しいキーを選択し、[Copy Snapshot] をクリックします。

次の bash スクリプトを使用して、データベースクラスタースナップショットを定期的に異なるリージョンに自動的にコピーします。このプラクティスは、テスト目的または災害対策ソリューションの一部として役立つことがあります。

このスクリプトを使用するには、テキストをコピーしてローカルファイルに貼り付け、環境に合わせてトップレベルの変数を変更してください。また、ローカルファイルのアクセス許可を変更し、実行アクセス許可を含めるようにしてください。最後に、適切な IAM ユーザーまたはロールを使用して AWS CLI を設定し、スクリプトを実行します。

#!/bin/bash

# Adjust these variables
DBINSTANCE=rds-demo-cluster
SRC_AWS_ACCOUNT=111111111111
SRC_AWS_REGION=eu-west-1
DEST_AWS_REGION=eu-central-1
DEST_KMS_KEYID=1111111-2222-3333-4444444444444444

# ----------------------------------------
# Don't change anything else after this
# ----------------------------------------
DATESR=$(date "+%Y%m%d%H%m")

# Dynamically generate snapshotId based on date
SNAPSHOTNAME=$DBINSTANCE-snapshot-$DATESR

# Generate snapshot Arn
SRCSNAPSHOTID=arn:aws:rds:$SRC_AWS_REGION:$SRC_AWS_ACCOUNT:cluster-snapshot:$SNAPSHOTNAME

echo "Creating snapshot for DB Instance: $DBINSTANCE"
aws rds create-db-cluster-snapshot \
--db-cluster-identifier $DBINSTANCE \
--db-cluster-snapshot-identifier $SNAPSHOTNAME \
--region $SRC_AWS_REGION

echo "Waiting for cluster snapshot $SNAPSHOTNAME to be available"
while STATUS=$(aws rds describe-db-cluster-snapshots --region $SRC_AWS_REGION --query "DBClusterSnapshots[?DBClusterSnapshotIdentifier=='$SNAPSHOTNAME'].Status" --output text); test "$STATUS" != "available"; do sleep 1 && echo "State: $STATUS"; done;
echo "State: $STATUS"

echo "Copying DB Snapshot...this may take a while depending on the size of the snapshot"
aws rds copy-db-cluster-snapshot \
--source-db-cluster-snapshot-identifier $SRCSNAPSHOTID \
--target-db-cluster-snapshot-identifier $SNAPSHOTNAME \
--source-region $SRC_AWS_REGION \
--kms-key-id $DEST_KMS_KEYID \
--region $DEST_AWS_REGION

KMS キーをローテーションする

通常はキーをローテーションし、キーへの不正アクセスの潜在的影響を制限します。CMK が元の KMS キーマテリアルからのものである場合、AWS が CMK を毎年自動的にローテーションするよう選択できます。キーの作成中にプロンプトが表示された場合に、あるいは KSM キーの作成後、年に 1 度の自動ローテーションを選択できます。詳細については、「自動キーローテーションを有効または無効にする方法」をご参照ください。KMS キーのローテーションの詳細については、「カスタマーマスターキーをローテーションする」をご参照ください。

ハードウェアセキュリティモジュール (HSM) または別の外部ソースから元のキーマテリアルを取得した場合、CMK を手動でローテーションする必要があります。RDS の場合、次の手順で、再暗号化されたスナップショットコピーから新しい RDS インスタンスまたはクラスターを作成できます。

  1. 前述の手順で、新しい CMK を作成します。
  2. 前述の手順で、既存のインスタンスまたはクラスターのスナップショットを作成します。最新のスナップショットがある場合は、この手順をスキップできます。
  3. この投稿では、前述した手順を使用して、スナップショットのコピーを作成します。[Encryption] で新しい CMK を選択して、新しいスナップショットコピーを新しい CMK で再暗号化することもできます。
  4. 新しいスナップショットのコピーを選択し、[Actions]、[Restore Snapshot] の順でクリックします。
  5. オンラインワークフローに従って、新しい RDS インスタンスまたはクラスターを作成します。新しい CMK を使ってデータが暗号化されます。ガイダンスについては、前述の新しいインスタンスまたはクラスターの作成手順に従ってください。

KMS キーアクセスのコントロール

各 KMS キーへのアクセスを制御することで、暗号化した AWS のリソースへのアクセスを管理します。詳細については、「AWS KMS CMK へのアクセスの管理」をご覧ください。

KMS キーへのアクセスを取り消すことが可能です。次のいずれかの方法を使用して、そのキーを使用して暗号化したすべての AWS リソースへのアクセスを取り消すことができます。

  • KMS キーを無効にする。後でキーは有効にできるため、この手順は元の状態に戻すことが可能です。
  • KMS キーを削除する。この手順では、キーの削除をスケジュールするだけで、キーをすぐに削除しません。7〜30 日の間で、削除期間を指定します。指定した削除期間内であれば、いつでもキーの削除をキャンセルできます。この期間後には、削除を取り消すことはできません。警告: 削除したキーを使用して暗号化したデータを回復することはできません。
  • 外部から提供されたキーマテリアルを削除する。 外部からのキーマテリアルを使用する場合には、このキーマテリアルを削除できます。削除すると、キーが実質的には無効になります。この操作は、キーマテリアルを再インポートすることで元に戻すことができます。このオプションはデータへのアクセスが不可能になり信頼性が高いものの、後日アクセスを復元することも可能です。

KMS キーの使用とライフサイクルの監査

組織のデータの暗号化に使用する KMS キーの作成、使用、変更、削除をモニタリングし、セキュリティを維持します。あらゆる KMS 操作は API 呼び出しであるため、AWS CloudTrail を使ったモニタリングが可能です。詳細については、「AWS CloudTrail を使用した AWS KMS API コールのログ記録」をご参照ください。

まとめ

この投稿では、KMS を使用して RDS に保存しているデータを保護する方法をご紹介しました。RDS インスタンスまたはクラスターでキーを作成し、データを暗号化する方法について概説しました。また、暗号化した RDS スナップショットを作成し、スナップショットを他の AWS リージョンにコピーする方法を示しました。さらに、キーをローテーションする方法、KMS でキーへのアクセスを制御する方法、AWS で KMS アクティビティを監査する方法も説明しました。

これで、データ保護技術を RDS に適用し、組織のデータ保護ポリシーに沿ってデータを保護できるようになります。詳細については、「Amazon RDS リソースの暗号化」をご参照ください。

この投稿で概説したコンセプトと方法は、Amazon EC2 インスタンス、Amazon S3、Amazon Redshift などに添付された AWS EBS ボリュームを含めた他の AWS のサービスのデータを保護する場合にも適用できます。

いつものように、AWS では皆さんのフィードバックをお待ちしています。コメントまたはご質問については、以下から送信してください。

 


著者について

Nicholas Ansell は AWS プロフェッショナルサービスのプリンシパルコンサルタントです。 お客様と協力し、AWS のサービスを使ってお客様の目標を迅速に実現できるよう取り組んでいます。