DynamoDB での予防的セキュリティのベストプラクティス
以下のベストプラクティスは、Amazon DynamoDB のセキュリティインシデントの予防に役立ちます。
- 保管時の暗号化
-
DynamoDB は、AWS Key Management Service (AWS KMS)
に保存されているテーブル、インデックス、ストリーミング、Backup に保存されているすべてのユーザーデータを保存時に暗号化します。この機能は、基になるストレージへの不正アクセスからデータを保護することによって、データ保護の追加レイヤーを提供します。 DynamoDB でユーザーデータを暗号化するために AWS 所有のキー (デフォルトの暗号化タイプ)、AWS マネージドキー を使用するか、カスタマーマネージドキーを使用するかを指定できます。詳細については、「保管時の Amazon DynamoDB 暗号化」を参照してください。
- IAM ロールを使用した DynamoDB へのアクセス認証
-
ユーザー、アプリケーション、およびその他の AWS サービスが DynamoDB にアクセスするには、有効な AWS 認証情報が AWS API リクエストに含まれている必要があります。アプリケーションまたは EC2 インスタンスに AWS 認証情報を直接保存しないでください。自動更新されない長期認証情報条件のため、漏洩すると業務に深刻な悪影響が及ぶ可能性があります。IAM ロールでは、AWS サービスおよびリソースにアクセスするために使用できる一時的なアクセスキーを有効にすることができます。
詳細については、「Amazon DynamoDB の Identity and Access Management」を参照してください。
- IAM ポリシーを使用した DynamoDB ベース認可
-
許可を付与する場合、許可を取得するユーザー、取得する許可の対象となる DynamoDB API、およびそれらのリソースに対して許可される特定のアクションを決定します。最小限の特権の実装は、セキュリティリスクはもちろん、エラーや悪意ある行動によってもたらされる可能性のある影響を減らす上での鍵となります。
IAM アイデンティティ (ユーザー、グループ、ロール) にアクセス権限ポリシーをアタッチし、DynamoDB リソースでオペレーションを実行する許可を付与します。
これを行うには、次を使用します。
- 詳細に設定されたアクセスコントロールのための IAM ポリシー条件を使用する
-
DynamoDB でアクセス権限を付与するときは、アクセス権限ポリシーを有効にする方法を決める条件を指定できます。最小限の特権の実装は、セキュリティリスクはもちろん、エラーや悪意ある行動によってもたらされる可能性のある影響を減らす上での鍵となります。
IAM ポリシーを使用して、アクセス許可を付与するときに条件を指定できます。例えば、次の操作を実行できます。
-
テーブルまたはセカンダリインデックス内の項目と属性に対する読み込み専用アクセスをユーザーに許可する許可を付与します。
-
ユーザーのアイデンティティに基づいて、テーブルの特定の属性への書き込み専用アクセスのアクセス権限をユーザーに付与します。
詳細については、「詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用」を参照してください。
-
- VPC エンドポイントとポリシーを使用した DynamoDB へのアクセス
-
Virtual Private Cloud (VPC) 内からのみ DynamoDB にアクセスする必要がある場合は、VPC エンドポイントを使用して、必要な VPC からのみのアクセスに制限する必要があります。これにより、トラフィックがオープンインターネットを通過してその環境に晒されるのを防ぐことができます。
DynamoDB の VPC エンドポイントを使用すると、以下を使用してアクセスを制御および制限できます。
-
VPC エンドポイントポリシー — これらのポリシーは DynamoDB VPC エンドポイントに適用されます。DynamoDB テーブルへの API アクセスを制御および制限が許可されます。
-
IAM ポリシー — ユーザー、グループ、またはロールにアタッチされたポリシーで
aws:sourceVpce
条件を使用すると、DynamoDB テーブルへのすべてのアクセスが指定の VPC エンドポイントを経由するよう強制できます。
詳細については、「Amazon DynamoDB のエンドポイント」を参照してください。
-
- クライアント側の暗号化を考慮する
-
DynamoDB にテーブルを実装する前に、暗号化戦略を計画することをお勧めします。機密データまたは機密データを DynamoDB に保存する場合は、クライアント側の暗号化をプランに含めることを検討してください。これにより、データをできるだけ送信元に近い状態で暗号化し、ライフサイクル全体にわたってデータを確実に保護できます。伝送中および保管時の機密データを暗号化することで、サードパーティーがお客様のプレーンテキストデータを使用することはできません。
DynamoDB 用の AWS Database Encryption SDK は、DynamoDB に送信する前にテーブルデータを保護するのに役立つソフトウェアライブラリです。DynamoDB テーブル項目を暗号化、署名、検証、復号します。どの属性を暗号化して署名するかを制御できます。
- プライマリキーに関する考慮事項
-
テーブルやグローバルセカンダリインデックスでは、プライマリキーに機密性の高い名前やプレーンテキストデータを使用しないでください。キー名はテーブル定義に表示されます。例えば、プライマリキー名は、DescribeTable を呼び出すアクセス許可を持つすべてのユーザーがアクセスできます。キー値は、AWS CloudTrail やその他のログに表示される場合があります。さらに、DynamoDB はデータの配信とリクエストのルーティングにキー値を使用します。AWS 管理者は、この値を観察してサービスのヘルスを維持する場合があります。
テーブルや GSI のキー値に機密データを使用する必要がある場合は、エンドツーエンドのクライアント暗号化を使用することをお勧めします。これにより、データへのキー値の参照を実行する際に、データが暗号化されないまま DynamoDB 関連ログに表示されることを回避できます。これを実現する 1 つの方法は、AWS Database Encryption SDK for DynamoDB を使用することですが、これは必須ではありません。独自のソリューションを使用する場合は、十分に安全な暗号化アルゴリズムを常に使用する必要があります。ハッシュなどの非暗号化オプションは、ほとんどの状況で十分に安全とは見なされないため、使用しないでください。
プライマリキーの名前が機密である場合は、代わりに
`pk`
と`sk`
を使用することをお勧めします。これは、パーティションキーの設計を柔軟に保つ一般的なベストプラクティスです。どれが適切な選択肢であるか不安な場合は、必ずセキュリティエキスパートまたは AWS アカウントチームに相談してください。