Azure SQL Database のセキュリティ保護

適用対象:Azure SQL データベース

Azure SQL Databaseは、アップグレード、パッチ適用、バックアップ、監視など、ほとんどのデータベース管理機能をユーザーの関与なしに処理する完全マネージド型プラットフォーム・アズ・ア・サービス(PaaS)データベースエンジンです。 顧客記録、財務情報、知的財産などの重要なビジネスデータを保存することが多いため、Azure SQL Databaseのセキュリティはデータ漏洩、不正アクセス、コンプライアンス違反から守るために不可欠です。

この記事では、Azure SQL Databaseのデプロイメントを保護するためのセキュリティ推奨事項を提供します。

この記事のセキュリティに関する推奨事項では、ゼロ トラストの原則 ("明示的に確認する"、"最小限の特権アクセスを使用する"、"侵害を想定する") が実装されています。 包括的なゼロ トラスト ガイダンスについては、 ゼロ トラスト ガイダンス センターを参照してください。

攻撃対象を減らし、脅威を軽減する

Azure SQL DatabaseはマネージドPaaSエンジンであるため、Microsoftはオペレーティングシステムとインフラを強化しています。 あなたの責任は、攻撃にさらされるアプリケーションやデータサーフェスを減らし、脅威を早期に検出することにあります。

  • SQL脆弱性評価を実施しましょう:SQL脆弱性評価を使って、潜在的なデータベースの誤設定や脆弱性を発見し、追跡し、修正しましょう。 定期的なスキャンをスケジュールし、基準に基づいて行動してください。 詳細については、「 SQL 脆弱性評価」を参照してください。

  • SQLインジェクションから守る:アプリケーション内でパラメータ化されたクエリやストアドプロシージャを使用し、ユーザーの入力をSQL文に連結してはいけません。 SQLインジェクションはデータベースアプリケーションに対する最も一般的な攻撃ベクトルの一つです。 詳細については、「SQL インジェクション」を参照してください。

  • 深層防御を適用する:ネットワーク隔離、アイデンティティ制御、データ保護、監視を組み合わせ、単一の制御が単一の障害点にならないようにする。 詳細については、 一般的なセキュリティ要件に対応するためのプレイブックをご覧ください。

ネットワークのセキュリティ

Azure SQL Databaseのネットワークセキュリティは、不正接続を防ぎ、攻撃へのリスクを減らすことで、信頼できるソースのみがデータベースにアクセスできるようにします。

  • プライベートエンドポイントの使用:Azure Private Linkを使ってプライベートIPアドレスでAzure SQL Databaseに接続し、データベースをパブリックインターネットにさらさないようにしましょう。 プライベート接続は攻撃対象面とデータ流出のリスクを減らします。 詳細については、「 Azure SQL Database の Azure Private Link」を参照してください。

  • パブリックネットワークアクセスを無効にする:プライベートエンドポイントに依存する場合は、パブリックネットワークアクセスを完全に無効にして、すべての接続がプライベートエンドポイントを経由するようにしましょう。 詳細については、「 パブリック ネットワーク アクセスの拒否」を参照してください。

  • サーバーレベルのファイアウォールルールを設定する:Azureの論理サーバーへのアクセスをIPファイアウォールルールで制御し、どのアドレスや範囲が接続できるかを最小権限の原則に従って制御します。 詳細については、Azure SQL Database と Azure Synapse の IP ファイアウォール規則に関するページを参照してください。

  • データベースレベルのファイアウォールルールを設定する:より細かい制御のために、個々のデータベースに適用されるデータベースレベルのファイアウォールルールを設定し、データベースごとのアクセスポリシーを有効にします。 詳細については、 データベースレベルのIPファイアウォールルールをご覧ください。

  • 特定の仮想ネットワークへのトラフィックを制限する:仮想ネットワークルールを使って、Azure仮想ネットワーク内の特定のサブネットからのトラフィックのみを許可し、IPベースのルールを超えたネットワーク隔離を実現します。 詳細については、「 Azure SQL Database の仮想ネットワーク規則」を参照してください。

  • 最小TLSバージョンを設定する:論理サーバーの最小TLSバージョンを1.2以上に設定し、古く弱いプロトコルを使用する接続は拒否します。 詳細は 「最小TLSバージョン」をご覧ください。

  • 適切な接続ポリシーを選択してください:すべてのトラフィックを単一のポートで流したい場合はプロキシ接続ポリシーを使い、バックエンドノードポートの範囲を公開するのではなく、Azure内からRedirectを使い遅延を抑えましょう。 デフォルトを上書きする前にトレードオフを理解してください。 詳細については、 Azure SQL Database の接続アーキテクチャに関するページを参照してください。

アイデンティティとアクセス管理

強力なIDおよび認証制御により、Azure SQL Databaseリソースへのアクセスは認可されたユーザーやアプリケーションに限定され、集中管理されたID管理とアカウントライフサイクル管理が容易になります。

認証とアカウント管理

  • Microsoft Entra管理者の設定:論理サーバーにMicrosoft Entra管理者を指定し、集中型のアイデンティティ管理と高度な認証ポリシーを有効にします。 詳細については、「 Microsoft Entra 認証の構成」を参照してください。

  • Microsoft Entra認証の活用:中央集権的なアイデンティティ管理や条件付きアクセス、多要素認証などの機能へのアクセスには、SQL認証よりもMicrosoft Entra認証を優先してください。 詳細については、Microsoft Entra 認証に関するページを参照してください。

  • 可能な限りSQL認証を無効にする:最大限のセキュリティのために、すべての接続にMicrosoft Entra認証を使用し、SQL認証をオフにすることで、弱いパスワードや漏洩のリスクを排除しましょう。 詳細については、「 Microsoft Entra 専用認証」を参照してください。

  • 含まれるデータベースユーザーを作成する:可能な限り、サーバーレベルのログインではなくMicrosoft EntraのIDやグループにデータベースユーザーをマッピングし、権限管理を簡素化しサーバーレベルのアクセスを削減します。 詳細については、「 包含データベース ユーザー」を参照してください。

  • 多要素認証の強制:論理サーバーを管理・接続するMicrosoft EntraのIDに対して、条件付きアクセスによる多要素認証(MFA)を義務付け、パスワードを超えた保護層を追加します。 詳細は「 How Multifactor Authentication Working」をご覧ください。

  • 条件付きアクセスポリシーを適用する:条件付きアクセスを用いてユーザーの位置、デバイスコンプライアンス、リスクに基づいてアクセスを制御し、各アクセス試行に適応型セキュリティを提供します。 詳細については、「 条件付きアクセス」を参照してください。

  • 論理サーバーにはマネージド ID を使用する: システム割り当てまたはユーザー割り当てのマネージド ID を論理サーバーに割り当てることで、シークレットを保存せずに Azure Key Vault(TDE のカスタマー マネージド キー用)および Azure Storage(監査用)にアクセスできるようにします。 詳細については、Azure SQL 向け Microsoft Entra のマネージド IDを参照してください。

  • 強力なパスワードポリシーの適用:SQL認証を使用する場合は、簡単に推測できない複雑なパスワードを義務付け、定期的にローテーションし、アカウント間での再利用は避けましょう。 詳細については、「 パスワード ポリシー」を参照してください。

特権アクセス

  • 最小権限を付与する:ユーザーに職務に必要な最低限の権限のみを与え、定期的に権限をレビューしてください。 詳細については、「 データベース エンジンのアクセス許可の概要」を参照してください。

  • 管理職の分離:すべての管理者に広範な管理者権限を付与しない。 詳細な権限と管理機能間の職務分離を活用しましょう。 詳細については、「アクセス許可」を参照してください。

  • データベースロールでアクセスを割り当てる:組み込みおよびカスタムのデータベースロールを活用してロールベースのセキュリティを実装し、個別の権限を付与するのではなく、ユーザーをロールに割り当てます。 詳細については、「 データベース レベルのロール」を参照してください。

  • 管理操作にはAzure RBACを使用:Azureロールベースのアクセス制御でAzure SQL Database管理操作へのアクセスを制御し、特定のタスクに必要な権限のみを付与するカスタムロールを作成できます。 詳細については、データベースの Azure 組み込みロールに関するページを参照してください。

  • ジャストインタイム特権アクセスの提供:Microsoft Entra Privileged Identity Management(PIM)を使って、管理者の役割に対して時間制限付きの承認ベースのアクセスを付与し、ユーザーが必要に応じて権限を保持できるようにします。 詳細については、「 Privileged Identity Management」を参照してください。

  • 特権活動の監視:監査を有効にして特権アカウントの行動を追跡し、不審な変更のログを確認し、機密操作にアラートを出します。 詳細については、Azure SQL データベース 監査に関するページを参照してください。

データ保護

データ保護は、暗号化、マスキング、分類を通じてあなたの情報を保護し、不正な開示、改ざん、機密情報の紛失を防ぎます。

  • Transparent Data Encryption (TDE)を有効にする:データベース、ログ、バックアップファイルを静止状態で暗号化してください。 新しいデータベースではデフォルトでTDEが有効です。暗号化鍵の追加制御のために、Azure Key Vaultで顧客管理キーを使用してください。 詳細については、 透過的なデータ暗号化(TDE) および 顧客管理鍵によるTDEをご覧ください。

  • Always Encryptedで機密データを保護:Always Encryptedを使って、使用中、静止中、輸送中の高度に機密性の高いデータを保護し、管理者でさえプレーンテキストの値を確認できないようにします。 より豊かな機能を得るためにセキュアエンクレイブを使いましょう。 詳細については、「 Always Encrypted」を参照してください。

  • 台帳で改ざん防止データを作成する:台帳で機密データの変更を不変かつ暗号学的に検証可能な記録を作成できるようにし、規制要件を満たすのに役立ちます。 詳細については、「レジャー」を参照してください。

  • 動的データマスキングによる機密データのマスク:アプリケーションコードを変更しずに、非特権ユーザーの機密データを難読化しつつ、アプリケーションコードを変更することなく機能性を維持できます。 詳細については、「 動的データ マスク」を参照してください。

  • 機密データの分類とラベル付け:SQLデータディスカバリー&分類を使って機密データを特定・分類・ラベル付けし、監査やマスキングなどの機能がメタデータを活用し、機密データの所在を報告できるようにします。 詳細については、「データの 検出と分類」を参照してください。

  • カラムレベルの権限でアクセスを制限する:カラムレベルで権限を付与または拒否し、センシティブなカラムが必要なユーザーだけが閲覧または変更できるようにします。 詳細は 「GRANT オブジェクト権限」を参照してください。

  • Row-Level セキュリティ(RLS)で行を制限する:ユーザーが自分に関連するデータ行のみにアクセスできるようにRLSを実装し、マルチテナントシナリオに最適なアプリケーションレベルのセキュリティを提供します。 詳細については、「 Row-Level セキュリティ」を参照してください。

ログ記録と監視

包括的なログ記録と監視により、異常な活動を検出し、インシデントを調査し、データベースの遵守を証明します。

  • Microsoft Defender for SQLを有効にする:Microsoft Defender for SQLを有効にして、脆弱性評価や高度な脅威保護を含む異常かつ潜在的に有害なデータベースアクセスや悪用を検出します。 詳細については、「 Microsoft Defender for SQL」を参照してください。

  • Microsoft Defender for Cloudとの統合:Microsoft Defender for Cloudを活用して、集中管理、セキュリティ推奨、Azureリソース全体での統合的な脅威保護を実現します。 詳細については、Defender for CloudのMicrosoft Defender for SQLをご覧ください。

  • 脅威防御アラートの設定:SQLインジェクションの試み、異常アクセスパターン、ブルートフォース認証などの不審な活動に対するアラートを設定し、通知を適切な受信者にルーティングします。 詳細については「 高度な脅威保護」をご覧ください。

  • 監査を有効にする:監査を設定してデータベースイベントを追跡し、Log Analyticsワークスペース、Azure Storage、Event Hubsに書き込みます。 サーバーレベルとデータベースレベルの両方のイベントを監査して、漏れなくカバーしてください。 詳細については、Azure SQL データベース 監査に関するページを参照してください。

  • 診断ログのストリーム:SQLSecurityAuditEventsなどのセキュリティカテゴリを含むログをAzure Monitorログ、イベントハブ、またはAzure Storageに送信し、保持・分析を行う診断設定を設定しましょう。 詳細については、「Monitor Azure SQL Database with Azure Monitor」をご覧ください。

  • 監査ログの定期的な確認:特権アカウント操作、認証失敗、機密データへのアクセスに焦点を当てて、不審な活動がないか監査ログを確認するプロセスを確立しましょう。 詳細については、Azure SQL データベース 監査に関するページを参照してください。

コンプライアンスとガバナンス

ガバナンス管理は、規制遵守を示し、データベース全体で一貫したセキュリティ設定を強制するのに役立ちます。

  • Microsoft Defender for Cloudによる規制遵守の追跡:規制遵守ダッシュボードを使って、PCI DSS、ISO 27001、SOCなどの基準に照らし、データベースを評価し、失敗した制御の修正状況を追跡しましょう。 詳細については、 規制遵守ダッシュボードをご覧ください。

  • Azure Policyで設定を強制する:Azure SQL Databaseに組み込みのAzure Policy定義を割り当て、TDE、監査、プライベートエンドポイント、Microsoft Entraのみ認証などのコントロールを監査・強制します。 詳細については、Azure Policy for Azure SQL Database の組み込み定義を参照してください。

  • Microsoft Purviewで機密データを管理:Microsoft PurviewでAzure SQL Databaseを登録・スキャンすることで、データ資産全体で機密データをカタログ化、分類、管理しましょう。 詳細については、「Microsoft PurviewのAzure SQL Databaseに接続および管理」をご覧ください。

  • Microsoftクラウドセキュリティベンチマークを適用する:MicrosoftクラウドセキュリティベンチマークをAzure全体の基準として使い、Azure SQL Databaseに適用するコントロールの優先順位をつけ、検証しましょう。 詳細については、Microsoftクラウドセキュリティベンチマークをご覧ください。

バックアップと回復

信頼性の高いバックアップと回復プロセスにより、障害、災害、または攻撃によるデータの損失を防ぐことができます。 また、回復目標の達成もサポートします。

  • 自動バックアップの設定を確認する:自動バックアップが設定されているか、そして保持が要件を満たしているかを確認してください。 Azure SQL Databaseはデフォルトで自動バックアップを提供し、1日から35日までの保存期間を設定可能です。 詳細については、「 自動バックアップ」を参照してください。

  • バックアップストレージ冗長性の設定:可用性や災害復旧のニーズに合ったバックアップストレージ冗長性を選択してください:ローカル冗長(LRS)、ゾーン冗長(ZRS)、ジオ冗長(GRS)、またはジオゾーン冗長(GZRS)。 詳細については、「 バックアップ ストレージの冗長性」を参照してください。

  • コンプライアンスのための長期保持(LR)を活用する:コンプライアンスのためデフォルト期間を超えて保存が必要な場合、最大10年間完全なバックアップを保存するよう長期保持(LTR)を設定しましょう。 詳細については、「長期保存」をご覧ください。

  • バックアップおよび復元手順のテスト:復元が目標の回復時間を満たしているか、復元されたデータベースが完全なデータで完全に機能しているかを確認するために、定期的にテストを行いましょう。 詳細については、「 データベースの復旧」を参照してください。

  • 災害復旧のためのジオリストアを導入する:ジオリストアを使って、ジオ冗長バックアップから任意のAzureリージョンにデータベースを復元し、地域別障害から守ります。 詳細については、「 geo リストア」を参照してください。

  • バックアップ活動の監視:Azure Monitorを使ってバックアップ作業を追跡し、失敗時のアラートを設定しましょう。 詳細については、「 バックアップ ストレージの使用量の監視とトラブルシューティング」を参照してください。