適用対象:Azure SQL データベース
Azure SQL Database は、サービスとしてのフル マネージド プラットフォーム (PaaS) データベース エンジンであり、アップグレード、修正プログラムの適用、バックアップ、監視などのデータベース管理機能をユーザーの関与なしに処理します。 顧客レコード、財務情報、知的財産などの重要なビジネス データが格納されることが多いため、データ侵害、不正アクセス、コンプライアンス違反から保護するには、Azure SQL Database のセキュリティ保護が不可欠です。
この記事では、Azure SQL Database デプロイを最適にセキュリティで保護する方法に関するガイダンスを提供します。
ネットワークのセキュリティ
Azure SQL Database のネットワーク セキュリティは、不正な接続を防ぎ、攻撃にさらされるリスクを軽減し、適切なネットワーク分離とアクセス制御を通じて信頼できるソースのみがデータベースに到達できるようにします。
セキュリティ強化のためにプライベート エンドポイントを使用する: Azure Private Link を使用してプライベート IP アドレス経由で Azure SQL Database に接続し、データベースをパブリック インターネットに公開しないようにします。 プライベート接続により、データ流出のリスクが排除され、攻撃対象領域が減少します。 詳細については、「 Azure SQL Database の Azure Private Link」を参照してください。
適切な接続ポリシーを選択する: プロキシとリダイレクトの接続ポリシーの違いを理解します。 リダイレクトでは待機時間が短くなり、Azure 内からの接続には推奨されますが、Azure の外部からの接続にはプロキシが必要です。 詳細については、 Azure SQL Database の接続アーキテクチャに関するページを参照してください。
サーバー レベルのファイアウォール規則の構成: 接続できる IP アドレスまたは範囲を指定する IP ファイアウォール規則を構成して 、Azure 内の論理サーバー へのアクセスを制御します。 必要な IP アドレスのみを許可することで、最小限の特権の原則を使用します。 詳細については、Azure SQL Database と Azure Synapse の IP ファイアウォール規則に関するページを参照してください。
データベース レベルのファイアウォール規則を構成する: より詳細な制御を行うために、個々のデータベースに適用されるデータベース レベルのファイアウォール規則を構成します。 この構成では、データベースごとのアクセス ポリシーを実装できます。 詳細については、「 データベース レベルのファイアウォール規則」を参照してください。
Azure Virtual Networks との統合: 仮想ネットワーク ルールを使用して、Azure 仮想ネットワーク内の特定のサブネットからのトラフィックのみを許可します。 この構成では、IP ベースの規則を超えたネットワーク分離の追加レイヤーが提供されます。 詳細については、「 Azure SQL Database の仮想ネットワーク規則」を参照してください。
接続暗号化を有効にする: 転送中の暗号化を使用するようにすべてのクライアント接続を構成します。 Azure SQL Database では、トランスポート層セキュリティ (TLS) 1.2 が既定でサポートされており、クライアントとデータベース間の移動中にデータが確実に保護されます。 TLS 1.3 も使用できます。 詳細については、「 接続アーキテクチャ」を参照してください。
プライベート エンドポイントを使用するときにパブリック アクセスを無効にする: プライベート エンドポイントを使用する場合は、パブリック ネットワーク アクセスを完全に無効にして、すべての接続がプライベート エンドポイントを経由するようにします。 この構成は、最高レベルのネットワーク セキュリティを提供します。 詳細については、「 パブリック ネットワーク アクセスの拒否」を参照してください。
ID 管理
強力な ID と認証制御により、承認されたユーザーとアプリケーションのみが Azure SQL Database リソースにアクセスでき、一元化された ID 管理とアカウント ライフサイクル制御が容易になります。
Microsoft Entra 管理者の構成: 論理サーバーの Microsoft Entra (旧称 Azure Active Directory) 管理者を指定して、一元化された ID 管理と高度なセキュリティ機能を有効にします。 この管理者は、アクセス ポリシーと認証ポリシーを管理できます。 詳細については、「 Microsoft Entra 認証の構成」を参照してください。
Microsoft Entra 認証を使用する: 一元化された ID 管理とアカウント ライフサイクル制御を容易にするために、SQL 認証の代わりに Microsoft Entra 認証を使用します。 Microsoft Entra ID は優れたセキュリティを提供し、条件付きアクセスや多要素認証などの高度な機能を有効にします。 詳細については、Microsoft Entra 認証に関するページを参照してください。
条件付きアクセス ポリシーの構成: 条件付きアクセス ポリシーを使用して、ユーザーの場所、デバイスのコンプライアンス、リスク レベルなどの条件に基づいてアクセスを制御します。 このアプローチでは、各アクセス試行のコンテキストに応答するアダプティブ セキュリティが提供されます。 詳細については、「 条件付きアクセス」を参照してください。
包含データベース ユーザーの作成: 可能な場合は、サーバー レベルのログインではなく、Microsoft Entra ID またはグループにマップされる包含データベース ユーザーを使用します。 この方法では、サーバー レベルのアクセスが不要になり、アクセス許可の管理が簡素化され、セキュリティが向上します。 詳細については、「 包含データベース ユーザー」を参照してください。
多要素認証を有効にする: パスワード以外のセキュリティ層を追加するには、管理者アカウントと特権ユーザーに多要素認証 (MFA) が必要です。 Microsoft Entra ID では、電話の検証、認証アプリ、FIDO2 セキュリティ キーなど、さまざまな MFA 方法がサポートされています。 詳細については、「 多要素認証」を参照してください。
アプリケーションのマネージド ID を使用する: Azure リソースのマネージド ID を有効にして、資格情報を格納せずにアプリケーションを認証できるようにします。 この方法では、パスワードが埋め込まれた接続文字列を管理する必要がなくなり、資格情報が公開されるリスクが軽減されます。 詳細については、「 Microsoft Entra for Azure SQL のマネージド ID」を参照してください。
強力なパスワード ポリシーを適用する: SQL 認証を使用する場合は、簡単に推測できない複雑なパスワードが必要です。 パスワード ローテーション ポリシーを実装し、異なるアカウント間でパスワードを再利用しないようにします。 詳細については、「 パスワード ポリシー」を参照してください。
可能な限り SQL 認証を無効にする: セキュリティを最大限に高めるために、SQL 認証を完全に無効にし、すべての接続で Microsoft Entra 認証を使用するように要求することを検討してください。 この方法により、SQL パスワードが脆弱または侵害されるリスクが排除されます。 詳細については、「 Microsoft Entra 専用認証」を参照してください。
特権アクセス
特権アクセスを制御することで、承認されていない変更を防ぎ、侵害されたアカウントの影響を軽減し、管理アクションが適切に監視および制御されるようにします。
最小限の特権アクセスを実装する: ジョブ機能を実行するために必要な最小限のアクセス許可のみをユーザーに付与します。 最小限の特権の原則を維持するために、アクセス許可を定期的に確認して調整します。 詳細については、「 データベース エンジンのアクセス許可の概要」を参照してください。
個別の管理ロール: すべてのデータベース管理者に管理者権限を付与しないようにします。 可能な場合は、より詳細なアクセス許可を使用し、さまざまな管理機能間で職務の分離を実装します。 詳細については、「アクセス許可」を参照してください。
Azure ロールベースのアクセス制御 (RBAC) の使用: Azure RBAC を実装して、Azure SQL Database 管理操作へのアクセスを制御します。 特定の管理タスクに必要なアクセス許可のみを提供するカスタム ロールを作成します。 詳細については、 Azure SQL Database の Azure RBAC に関するページを参照してください。
特権アクティビティの監視: 監査を有効にして、特権アカウントによって実行されたすべてのアクションを追跡します。 疑わしいアクティビティや未承認の変更がないか、監査ログを定期的に確認します。 機密性の高い操作のアラートを構成します。 詳細については、Azure SQL データベース 監査に関するページを参照してください。
アクセス管理にデータベース ロールを使用する: 組み込みのデータベース ロールを利用し、ロールベースのセキュリティを実装するカスタム ロールを作成します。 個々のアクセス許可を付与するのではなく、ロールにユーザーを割り当てて、管理を簡素化し、エラーを減らします。 詳細については、「 データベース レベルのロール」を参照してください。
Just-In-Time アクセスを実装する: Microsoft Entra Privileged Identity Management (PIM) を使用して、管理者ロールへの承認ベースのアクセスを時間制限付きで提供します。 この方法により、ユーザーは必要に応じて昇格された特権のみを持つことができます。 詳細については、「 Privileged Identity Management」を参照してください。
データ保護
データ保護は、暗号化、アクセス制御、およびデータ分類を通じて情報を保護し、機密情報の不正な開示、改ざん、または損失を防ぎます。
Transparent Data Encryption (TDE) を有効にする: TDE を使用して、保存中のデータベース、ログ、バックアップ ファイルを暗号化します。 TDE は、新しく作成されたすべての Azure SQL データベースに対して既定で有効になっています。 暗号化キーをさらに制御するには、Azure Key Vault でカスタマー マネージド キーを使用することを検討してください。 詳細については、カスタマー マネージド キーを使用した Transparent Data Encryption (TDE) と TDE に関する説明を参照してください。
機密データに対して Always Encrypted を実装する: Always Encrypted を使用して、使用中、保存中、転送中の機密性の高いデータを保護します。 この保護により、データベース管理者でも機密データをプレーンテキストで表示できなくなります。 機能を強化するために、セキュリティで保護されたエンクレーブで Always Encrypted を使用します。 詳細については、「 Always Encrypted」を参照してください。
改ざん防止データに台帳を使用する: 台帳で機密データに対する変更の不変レコードを作成し、改ざんが明らかなログ記録を提供できるようにします。 台帳テーブルは、データ整合性の暗号化証明を提供し、規制要件を満たすのに役立ちます。 詳細については、「レジャー」を参照してください。
動的データ マスクを使用する: アプリケーションのデータ機能を維持しながら、特権のないユーザーの機密データを難読化するために動的データ マスクを適用します。 この機能は、アプリケーションの変更を必要とせずに機密情報への不正アクセスを防ぐのに役立ちます。 詳細については、「 動的データ マスク」を参照してください。
機密データの分類とラベル付け: SQL データの検出と分類を使用して、データベース内の機密データを識別、分類、ラベル付けします。 この分類により、保護とコンプライアンスのレポートが向上し、機密データが存在する場所を理解するのに役立ちます。 Microsoft Purview との統合により、強化されたデータ ガバナンス機能が提供されます。 詳細については、「データの検出と分類」および「Microsoft Purview 統合」を参照してください。
列レベルのセキュリティを実装する: 列レベルでアクセス許可を付与して、機密データへのアクセスを制限します。 機密性の高い列へのアクセスが特に必要なユーザーにのみ、SELECT、UPDATE、または REFERENCES のアクセス許可を付与します。 詳細については、「 列レベルのセキュリティ」を参照してください。
Row-Level セキュリティ (RLS) を使用する: RLS を実装して、ユーザーがそれらに関連するデータ行にのみアクセスできるようにします。 この機能は、アプリケーションを大幅に変更しなくてもアプリケーション レベルのセキュリティを提供し、マルチテナント シナリオに最適です。 詳細については、「 Row-Level セキュリティ」を参照してください。
バックアップと回復
信頼性の高いバックアップと復旧プロセスにより、障害、災害、または攻撃によるデータの損失を防ぎ、復旧時間とポイント目標を確実に満たすことができます。
自動バックアップ構成を確認する: 自動バックアップが適切に構成され、保有期間がビジネス要件を満たしていることを確認します。 Azure SQL Database では、既定で自動バックアップが提供され、構成可能な保有期間は 1 日から 35 日です。 詳細については、「 自動バックアップ」を参照してください。
バックアップ ストレージの冗長性を構成する: 可用性とディザスター リカバリーの要件に基づいて、適切なバックアップ ストレージ冗長オプションを選択します。 オプションには、ローカル冗長 (LRS)、ゾーン冗長 (ZRS)、ジオ冗長 (GRS)、ジオゾーン冗長 (GZRS) ストレージなどがあります。 詳細については、「 バックアップ ストレージの冗長性」を参照してください。
コンプライアンスに長期的なリテンション期間を使用する: 既定の保持期間を超えるコンプライアンス要件に対して長期バックアップリテンション期間 (LTR) を構成します。 LTR を使用すると、最大 10 年間の完全バックアップを格納できます。 詳細については、「長期保存」をご覧ください。
バックアップと復元の手順をテストする: バックアップと復元の手順を定期的にテストして、それらが正しく動作し、目標復旧時間 (RTO) を満たしていることを確認します。 復元されたデータベースが完全に機能し、データの整合性が維持されていることを検証します。 詳細については、「 データベースの復旧」を参照してください。
バックアップ アクティビティの監視: バックアップ操作を追跡して、正常に完了したことを確認します。 Azure Monitor を使用し、バックアップエラーのアラートを構成します。 詳細については、「 バックアップ ストレージの使用量の監視とトラブルシューティング」を参照してください。
暗号化によるバックアップの保護: ソース データベースで TDE が有効になっている場合、バックアップ ファイルは自動的に暗号化されます。 保存データを保護するために TDE が有効になっていることを確認します。 詳細については、「 Transparent Data Encryption」を参照してください。
ディザスター リカバリー用に geo リストアを実装する: geo リストア機能を使用して、geo 冗長バックアップから任意の Azure リージョンにデータベースを復元します。 この機能は、地域の障害や災害に対する保護を提供します。 詳細については、「 geo リストア」を参照してください。
監視と脅威の検出
包括的な監視と脅威検出は、セキュリティの問題を特定し、異常なアクティビティを検出し、Azure SQL Database に対する潜在的な脅威に迅速に対応するのに役立ちます。
Microsoft Defender for SQL を有効にする: データベースにアクセスしたりデータベースを悪用したりしようとする、通常とは異なる害を及ぼす可能性のある試行を検出するように Microsoft Defender for SQL を構成します。 この機能は、脆弱性評価や脅威検出など、高度な脅威保護機能を提供します。 詳細については、「 Microsoft Defender for SQL」を参照してください。
Microsoft Defender for Cloud と統合する: Microsoft Defender for Cloud を使用して、Azure リソース全体のセキュリティ管理と脅威保護を一元化します。 この機能では、セキュリティに関する推奨事項、規制コンプライアンスの追跡、および統合された脅威保護が提供されます。 詳細は、Microsoft Defender for Cloud を参照してください。
高度な脅威保護アラートの構成: SQL インジェクション攻撃、異常なデータベース アクセス パターン、ブルート フォース認証の試行など、疑わしいデータベース アクティビティのアラートを設定します。 通知の受信者を構成し、Azure Security Center と統合します。 詳細については、「 Advanced Threat Protection」を参照してください。
監査を有効にする: 監査を構成してデータベース イベントを追跡し、Azure Storage、Log Analytics ワークスペース、または Event Hubs の監査ログに書き込みます。 包括的なカバレッジのために、サーバー レベルとデータベース レベルの両方のイベントを監査します。 詳細については、Azure SQL データベース 監査に関するページを参照してください。
データベース監視に Azure Monitor を使用する: Azure Monitor と統合して、メトリックとログを収集および分析します。 セキュリティ関連のイベントのカスタム ダッシュボードとアラートを作成します。 詳細については、「 Azure SQL Database の監視」を参照してください。
監査ログを定期的に確認する: 監査ログを定期的に確認して、疑わしいアクティビティまたは未承認のアクセス試行を特定するプロセスを確立します。 特権アカウントアクティビティ、認証の失敗、機密データへのアクセスに焦点を当てます。 詳細については、Azure SQL データベース 監査に関するページを参照してください。
診断ログを有効にする: 診断設定を構成して、ログを Azure Monitor ログ、Event Hubs、または Azure Storage にストリーミングして、長期的な保持と分析を行います。 SQLSecurityAuditEvents などのセキュリティ関連のログ カテゴリを含めます。 詳細については、「 診断設定」を参照してください。
セキュリティ評価と脅威の軽減
Azure SQL Database 環境を定期的に評価することで、脆弱性を特定し、セキュリティ体制を改善しながら、セキュリティ標準に準拠することができます。
脆弱性評価を実行する: Azure portal で SQL 脆弱性評価を使用して、潜在的なデータベースの脆弱性を検出して修正します。 定期的なスキャンをスケジュールし、修復の進行状況を追跡します。 詳細については、「 SQL 脆弱性評価」を参照してください。
機密データの分類とラベル付け: SQL データの検出と分類を使用して機密データを識別してラベル付けし、保護とコンプライアンスを強化します。 監査や動的データ マスクなどの他のセキュリティ機能では、分類メタデータを使用できます。 詳細については、「 データの検出と分類」を参照してください。
セキュリティに関する推奨事項を確認する: Azure Security Center と Microsoft Defender for SQL のセキュリティに関する推奨事項を定期的に確認します。 重大度と潜在的な影響に基づいて、結果に優先順位を付けて修正します。 詳細については、「 Microsoft Defender for SQL」を参照してください。
データベース レベルの暗号化を実装する: TDE を超えて、機密性の高い列に Always Encrypted を使用することを検討し、適切なキー管理プラクティスを実装します。 一元化されたキー管理には Azure Key Vault を使用します。 詳細については、「 Always Encrypted」を参照してください。
SQL インジェクションからの保護: SQL インジェクション攻撃を防ぐために、パラメーター化されたクエリとストアド プロシージャをアプリケーションに実装します。 ユーザー入力を SQL ステートメントに連結しないでください。 詳細については、「SQL インジェクション」を参照してください。
アクセス許可を定期的に確認する: ユーザーが適切なアクセス許可を持っていることを確認するために、定期的なアクセス レビューを実施します。 不要な特権を削除し、アクセスが不要になったユーザーのアカウントを非アクティブ化します。 詳細については、「 データベース エンジンのアクセス許可の概要」を参照してください。
重要なデータに対してデータベース台帳を有効にする: 監査クリティカルまたは改ざんの影響を受けやすいデータを含むデータベースの場合は、台帳でデータ整合性の暗号化証明を提供できるようにします。 詳細については、「レジャー」を参照してください。
多層防御セキュリティを実装する: さまざまなセキュリティ スコープを対象とする複数のセキュリティ機能を使用して、さまざまな脅威に対する包括的な保護を提供します。 ネットワーク セキュリティ、ID 管理、データ保護、監視を組み合わせて、最大限のセキュリティを実現します。 詳細については、「セキュリティの ベスト プラクティス」を参照してください。
「Microsoft クラウド セキュリティ ベンチマーク: Azure SQL Database の Microsoft クラウド セキュリティ ベンチマークに基づいてセキュリティ制御を実装する」に従います。 このベンチマークは、業界標準に沿った包括的なセキュリティ ベースラインを提供します。 詳細については、「 Azure SQL Database のセキュリティ ベースライン」を参照してください。