暗号化されていない Amazon RDS DB インスタンスとクラスターを自動的に修正する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

暗号化されていない Amazon RDS DB インスタンスとクラスターを自動的に修正する

作成者: Ajay Rawat (AWS)、Josh Joy (AWS)

環境: PoC またはパイロット

テクノロジー: セキュリティ、アイデンティティ、コンプライアンス、データベース

AWS サービス: AWS Config、AWS KMS、AWS Identity and Access Management、AWS Systems Manager、Amazon RDS

[概要]

このパターンは、AWS Config、AWS Systems Manager ランブック、および AWS Key Management Service (AWS KMS) キーを使用して、Amazon Web Services (AWS) 上の暗号化されていない Amazon Relational Database Service (Amazon RDS) DB インスタンスとクラスターを自動的に修正する方法を示しています。

暗号化された RDS DB インスタンスは、基になるストレージへの不正アクセスからデータを保護することによって、データ保護の追加レイヤーを提供します。Amazon RDS の暗号化を使用して、AWS クラウドにデプロイされるアプリケーションのデータ保護を強化することや、保管時のデータ暗号化に関するコンプライアンスの要件を達成することができます。RDS DB インスタンスの暗号化は作成時に有効にできますが、作成後には有効にできません。ただし、DB インスタンスのスナップショットを作成し、そのスナップショットの暗号化済みコピーを作成して、暗号化されていない RDS DB インスタンスに暗号化を追加できます。その後、暗号化されたスナップショットから DB インスタンスを復元して、元の DB インスタンスの暗号化されたコピーを取得できます。

このパターンでは、AWS Config ルールを使用して RDS DB インスタンスとクラスターを評価します。対応していない Amazon RDS リソースに対して実行するアクションを定義する AWS Systems Manager ランブックと、DB スナップショットを暗号化する AWS KMS キーを使用して修復を行います。次に、サービスコントロールポリシー (SCP) を適用して、暗号化なしで新しい DB インスタンスやクラスターが作成されないようにします。

このパターンのコードは、「」で提供されていますGitHub

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • このパターンのGitHub ソースコードリポジトリからコンピュータにダウンロードされたファイル

  • 暗号化されていない RDS DB インスタンスまたはクラスター

  • RDS DB インスタンスとクラスターを暗号化するための既存の AWS KMS キー

  • KMS キーリソースポリシーを更新するためのアクセス

  • AWS アカウントで AWS Config が有効になっている (AWS ドキュメントの「AWS Config の使用の開始」を参照)

制限

  • RDS DB インスタンスの暗号化は、作成後ではなく、作成時にのみ有効にできます。

  • 暗号化されていない DB インスタンスのリードレプリカを暗号化することや、暗号化されている DB インスタンスのリードレプリカを暗号化しないようにすることはできません。

  • 暗号化されていないバックアップやスナップショットを、暗号化された DB インスタンスに復元することはできません。

  • Amazon RDS 暗号化は、ほとんどの DB インスタンスクラスで使用できます。例外のリストについては、Amazon RDS ドキュメントの「Amazon RDS リソースの暗号化」を参照してください。

  • ある AWS リージョンから別のリージョンに暗号化されたスナップショットをコピーするには、コピー先の AWS リージョンの KMS キーを指定する必要があります。これは、KMS キーが、作成される AWS リージョンに固有のものであるためです。

  • ソーススナップショットはコピープロセス全体で暗号化されたままになります。Amazon RDS は、コピー処理中にエンベロープ暗号化を使用してデータを保護します。詳細については、AWS KMS ドキュメントの「エンベロープ暗号化」を参照してください。

  • 暗号化された DB インスタンスの暗号化を解除することはできません。ただし、暗号化された DB インスタンスからデータをエクスポートし、暗号化されていない DB インスタンスにデータをインポートすることはできます。

  • KMS キーの削除は、そのキーをもう使用しないことが確実である場合にのみ行ってください。不明な場合は、削除するのではなく、KMS キーを無効化することを検討します。無効化した KMS キーは、後で使用する必要が生じた場合に再度有効化できますが、削除した KMS キーは復元できません。 

  • 自動バックアップを保持しない場合、DB インスタンスと同じ AWS リージョンにある自動バックアップが削除されます。DB インスタンスを削除した後は、復元できません。

  • 自動バックアップは、DB インスタンスの削除時に設定した保持期間だけ保持されます。この設定された保持期間は、最終的な DB スナップショットを作成するかどうかにかかわらず発生します。

  • 自動修復が有効になっている場合、このソリューションは同じ KMS キーを持つすべてのデータベースを暗号化します。

アーキテクチャ

次の図は、AWS CloudFormation 実装のアーキテクチャを示しています。AWS Cloud Development Kit (AWS CDK) を使用してこのパターンを実装することもできることに注意してください。

暗号化されていない Amazon RDS インスタンスを修正するための AWS CloudFormation 実装。

ツール

ツール

  • AWS CloudFormation は、AWS リソースを自動的にセットアップするのに役立ちます。テンプレートファイルを使用して、リソースのコレクションを 1 つのユニット (スタック) として作成および削除できます。

  • AWS Cloud Development Kit (AWS CDK) は、コードでクラウドインフラストラクチャを定義し、使い慣れたプログラミング言語を使用してプロビジョニングするための、ソフトウェア開発フレームワーク (AWS CDK) です。

AWS サービスと機能

  • AWS Config は、AWS リソースの設定と他のリソースとの関係を追跡します。また、これらの AWS リソースのコンプライアンスを評価することもできます。このサービスは、AWS リソースを希望の設定と照らし合わせて評価するように設定できるルールを使用します。一般的なコンプライアンスシナリオでは AWS Config マネージドルールセットを使用することも、カスタムシナリオ用に独自のルールを作成することもできます。AWS リソースが準拠していないことが判明した場合は、AWS Systems Manager ランブックを使用して修復アクションを指定し、オプションで Amazon Simple Notification Service (Amazon SNS)トピックを通じてアラートを送信できます。つまり、修復アクションを AWS Config ルールに関連付けて、手動で操作しなくても自動的に実行してコンプライアンス違反リソースに対処できます。自動修復後もリソースがまだ準拠していない場合は、自動修復を再試行するようにルールを設定できます。

  • Amazon Relational Database Service (Amazon RDS) を使用して、クラウドでリレーショナルデータベースをセットアップ、運用、スケーリングできます。Amazon RDS の基本構成要素は DB インスタンスです。これは AWS クラウド内の独立したデータベース環境です。Amazon RDS は、さまざまなリレーショナルデータベースのユースケースに合わせて最適化されたインスタンスタイプを選択できます。インスタンスタイプは、CPU、メモリ、ストレージ、およびネットワーク容量のさまざまな組み合わせで構成され、データベースに適したリソースの組み合わせを柔軟に選択できます。各インスタンスタイプには 1 つ以上のインスタンスサイズが含まれているため、ターゲットワークロードの要件に合わせてデータベースをスケーリングできます。

  • AWS Key Management Service (AWS KMS) は、データを暗号化する AWS KMS キーの作成と制御を容易にするマネージドサービスです。KMS キーは、ルートキーの論理表現です。KMS キーには、キー ID、作成日、説明、キーステータスなどのメタデータが含まれます。

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

  • サービスコントロールポリシー (SCP) では、組織のすべてのアカウントで使用可能な最大アクセス許可を一元的に制御できます。SCP は、アカウントが組織のアクセスコントロールガイドラインに従っていることを確認するのに役立ちます。SCP は、管理アカウントのユーザーやロールには影響を与えません。SCP は、組織内のメンバーアカウントにのみ影響を与えます。SCP を組織のルートにアタッチする前に、そのポリシーがアカウントに与える影響を徹底的にテストすることを強くお勧めします。代わりに、お客様のアカウントを一度に 1 つずつ、または少なくとも少人数ずつ移動できる組織単位 (OU) を作成し、誤って主要なサービスからユーザーを締め出すことのないようにします。

コード

このパターンのソースコードとテンプレートは、GitHub リポジトリ にあります。このパターンには 2 つの実装オプションがあります。AWS CloudFormation テンプレートをデプロイして RDS DB インスタンスとクラスターを暗号化する修復ロールを作成するか、AWS CDK を使用します。リポジトリには、これら 2 つのオプション用に別々のフォルダがあります。

エピックセクションには、 CloudFormation テンプレートをデプロイする step-by-step 手順が記載されています。AWS CDK を使用する場合は、 GitHub リポジトリの README.md ファイルの指示に従ってください。

ベストプラクティス

  • 保管時と転送中のいずれもデータ暗号化を有効にします。

  • すべてのアカウントと AWS リージョンで AWS Config を有効にします。

  • すべてのリソースタイプの設定変更を記録します。

  • IAM 認証情報のローテーションを定期的に行います。

  • AWS Config のタグ付けを活用すると、リソースの管理、検索、フィルタリングが容易になります。

エピック

タスク説明必要なスキル

CloudFormation テンプレートをダウンロードします。

GitHub リポジトリ から unencrypted-to-encrypted-rds.template.json ファイルをダウンロードします。

DevOps エンジニア

CloudFormation スタックを作成します。

  1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/cloudformation/ で CloudFormation コンソールを開きます。 

  2. unencrypted-to-encrypted-rds.template.json テンプレートを起動して、新しいスタックを作成します。

テンプレートのデプロイの詳細については、AWS CloudFormation ドキュメント を参照してください。

DevOps エンジニア

CloudFormation パラメータと値を確認します。

  1. スタックの詳細を確認し、環境要件に基づいて値を更新します。

  2. [スタックの作成] を選択してテンプレートをデプロイします。

DevOps エンジニア

リソースを確認します。

スタックが作成されると、そのステータスは [CREATE_COMPLETE] に変わります。 CloudFormation コンソールで、作成されたリソース (IAM ロール、AWS Systems Manager ランブック) を確認します。

DevOps エンジニア
タスク説明必要なスキル

KMS キーポリシーを更新します。

  1. キーエイリアスが alias/RDSEncryptionAtRestKMSAlias 存在することを確認します。 

  2. キーポリシーステートメントには IAM 修復ロールを含める必要があります。(前のエピックでデプロイした CloudFormation テンプレートによって作成されたリソースを確認します。) 

  3. 次のキーポリシーで、太字の部分を、アカウントと作成した IAM ロールと一致するように更新してください。

{ "Sid": "Allow access through RDS for all principals in the account that are authorized to use RDS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:: <your-AWS-account-ID>”:role/<your-IAM-remediation-role>" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "rds.us-east-1.amazonaws.com", "kms:CallerAccount": "<your-AWS-account-ID>" } } }
DevOps エンジニア
タスク説明必要なスキル

非準拠リソースを表示します。

  1. 準拠していないリソースのリストを表示するには、https://console.aws.amazon.com/config/ の AWS Config コンソールを開きます。 

  2. ナビゲーションペインで、[ルール] を選択し、rds-storage-encrypted ルールを選択します。

AWS Config コンソールに一覧表示される非準拠リソースは、クラスターではなくインスタンスです。修復自動化はインスタンスとクラスターを暗号化し、新しく暗号化されたインスタンスまたは新しく作成されたクラスターを作成します。ただし、同じクラスターに属する複数のインスタンスを同時に修正しないように注意してください。

RDS DB インスタンスまたはボリュームを修正する前に、その RDS DB インスタンスが使用されていないことを確認してください。スナップショットに元のデータが含まれていることを確認するために、スナップショットの作成中に書き込み操作が行われていないことを確認します。修正が実行されるメンテナンスの時間帯を設けることを検討してください。

DevOps エンジニア

非準拠のリソースを修復します。

  1. 準備が整い、メンテナンスウィンドウが有効になったら、修正するリソースを選択し、[修復] を選択します。

    これで [アクションステータス] 列に [アクション実行がキューに入れられました] と表示されるはずです。

  2. Systems Manager で修復の進行状況とステータスを表示します。AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。ナビゲーションペインで [オートメーション] を選択し、対応するオートメーションの実行 ID を選択すると、詳細が表示されます。

DevOps エンジニア

RDS DB インスタンスが使用可能であることを確認します。

自動化が完了すると、新しく暗号化された RDS DB インスタンスが使用可能になります。暗号化された RDS DB インスタンスには、プレフィックスの後に元の名前が encrypted  続きます。例えば、暗号化されていない RDS DB インスタンス名が database-1 の場合、新しく暗号化された RDS DB インスタンスは encrypted-database-1 になります。

DevOps エンジニア

暗号化されていないインスタンスを終了します。

修正が完了し、新しく暗号化されたリソースが検証されたら、暗号化されていないインスタンスを終了できます。リソースを終了する前に、新しく暗号化されたリソースが暗号化されていないリソースと一致することを確認してください。

DevOps エンジニア
タスク説明必要なスキル

SCP を強制します。

SCP を適用して、future DB インスタンスやクラスターが暗号化なしで作成されないようにします。この目的のためにGitHub リポジトリで提供されている rds_encrypted.json ファイルを使用し、AWS ドキュメント の指示に従ってください。 

セキュリティエンジニア

関連リソース

リファレンス

ツール

ガイドとパターン

追加情報

よくある質問

Q. AWS Config はどのように機能しますか?

A. AWS Config を有効にすると、まずアカウント内に存在するサポートされている AWS リソースが検出され、リソースごとに設定項目が生成されます。AWS Config は、リソースの設定が変更されたときにも設定項目を生成し、設定レコーダーを開始したときからのリソースの設定項目の履歴記録を維持します。デフォルトでは、AWS Config は AWS リージョン内のサポートされているリソースごとに設定項目を作成します。AWS Config でサポートされているすべてのリソースの設定項目を作成したくない場合は、追跡するリソースタイプを指定できます。

Q: AWS Config と AWS Config のルールは AWS Security Hub とどのように関連していますか?

A. AWS Security Hub は、セキュリティとコンプライアンスの態勢管理をサービスとして提供するセキュリティおよびコンプライアンスサービスです。AWS リソースの設定を評価するための主要なメカニズムとして AWS Config と AWS Config ルールを使用しています。AWS Config ルールは、リソースの設定を直接評価するためにも使用できます。Config ルールは、AWS Control Tower や AWS Firewall Manager など、他の AWS サービスでも使用されます。