セキュリティポリシーにより、すべてのデータベース接続が暗号化され、サーバー証明書を検証する必要があります。
→サーバーで最小TLSバージョンを1.2に設定します。クライアント接続文字列では、`Encrypt=Strict`を使用します。
理由: サーバーで最小TLSを設定することで、安全でないプロトコルネゴシエーションを防ぎます。`Encrypt=Strict` (TDS 8.0+) は暗号化と完全な証明書検証を強制し、中間者攻撃を防ぎます。
特定の列(例:SSN)の機密データは暗号化する必要がありますが、アプリケーションは暗号化されたデータに対して等価検索と結合を実行する必要があります。
→検索可能な列には、決定論的暗号化を使用したAlways Encryptedを使用します。
理由: 決定論的暗号化は、特定のプレーンテキスト値に対して同じ暗号文を生成するため、等価比較が可能です。ランダム化された暗号化はより強力な保護を提供しますが、これらの操作はできません。
保存データの暗号化が必要ですが、組織は暗号化キーを完全に管理する必要があります。
→Azure Key Vaultに保存された顧客管理キー (BYOK) を使用してTransparent Data Encryption (TDE) を有効にします。
理由: この構成により、組織は自身のKey Vaultでキーのライフサイクル(ローテーション、失効)を管理でき、キーの所有権に関する制御とコンプライアンス要件を満たすことができます。
Azure SQL Databaseは特定のAzure Virtual Networkからのみアクセス可能である必要があり、パブリックインターネットアクセスは完全にブロックされます。
→SQL Server用のPrivate Endpointを構成し、「パブリックネットワークアクセスを拒否」を「はい」に設定します。
理由: Private Endpointは、SQLデータベースにVNet内のプライベートIPアドレスを与えます。パブリックアクセスを無効にすることで、それが唯一の接続方法となり、完全なネットワーク分離が提供されます。
マルチテナントアプリケーションは、ユーザーが共有テーブル内で自分のデータのみを参照できるようにする必要があります。
→セキュリティ述語(インラインテーブル値関数)と、それをテーブルに適用するセキュリティポリシーを作成して、行レベルセキュリティ (RLS) を実装します。
理由: RLSは、ユーザーコンテキスト(例:USER_NAME()やSESSION_CONTEXT)に基づいて行を透過的にフィルタリングし、アプリケーションの変更なしにデータベースエンジンレベルでデータ分離を強制します。
データベース管理者はデータベースを管理する必要がありますが、特定の列の機密データを表示できないようにする必要があります。
→機密列にDynamic Data Masking (DDM) を実装します。DBAにUNMASK権限を付与しないでください。
理由: DDMは、特権のないユーザーのクエリ結果でデータを難読化し、保存されているデータを変更しません。これにより、DBAは実際の機密情報を参照せずに職務を遂行できます。
セキュリティポリシーにより、Azure SQL DBまたはManaged Instanceの一元的なID管理とMFAを強制するためにSQL認証を無効にすることが義務付けられています。
→サーバーのAzure AD管理者を設定し、「Azure AD専用認証」プロパティを有効にします。
理由: この設定により、SQL認証エンドポイントが完全に無効になり、すべての接続がAzure ADを使用するように強制されます。これは、最新の認証ポリシーを適用するための重要なステップです。
潜在的なSQLインジェクション、異常なアクセスパターン、ブルートフォース攻撃など、異常なデータベースアクティビティを検出してアラートを受信する必要があります。
→Microsoft Defender for SQL(以前のAdvanced Threat Protection)を有効にします。
理由: Defender for SQLは、疑わしいアクティビティについてデータベースログを分析し、セキュリティアラートを生成することで、基本的なアクセス制御を超えた重要な脅威検出レイヤーを提供します。
Azure SQL Databaseの監査ログは数年間保持され、コンプライアンスおよびセキュリティ調査のために検索可能である必要があります。
→必要なデータ保持期間が構成されたLog Analyticsワークスペースにログを送信するようにAzure SQL Auditingを構成します。
理由: Log Analyticsは、長期保持と強力なKQLベースのクエリ機能を提供し、検索可能な長期監査データのためにBlob Storageよりも優れています。
トラブルシューティングのために、DevOpsチームにデータベースへの一時的、時間制限付き、承認ゲート付きのアクセスを提供します。
→Azure AD Privileged Identity Management (PIM) を使用して、データベースアクセスを持つAzure ADグループの資格を管理します。
理由: PIMは、監査可能で、正当性を要求し、自動的に期限切れになるジャストインタイム (JIT) アクセスを提供し、最小限の特権の原則に準拠します。
システムは、厳格な規制コンプライアンスを満たすために、すべてのデータ変更の検証可能で改ざん防止された履歴を必要とします。
→Azure SQL Databaseの台帳機能を使用します。
理由: 台帳テーブルはブロックチェーンの概念を使用してデータの変更を暗号化的にリンクし、独立して検証可能な不変の履歴を作成します。これは、改ざん防止されていないテンポラルテーブルよりも強力です。