次の方法で共有


PCI アプリのセキュリティで保護されたインフラストラクチャを開発する

概要

このセキュリティで保護された Payment Card Industry (PCI) アプリのインフラストラクチャは、カード所有者データの収集、保存、取得に適した、サービスとしての Payment Card Industry プラットフォーム (PaaS) 環境の展開に関するガイダンスを提供します。 このソリューションは、一般的な参照アーキテクチャに対する Azure リソースのデプロイと構成を自動化し、お客様が特定のセキュリティとコンプライアンスの要件を満たし、お客様が Azure で独自のソリューションを構築および構成するための基盤として機能する方法を示します。 このソリューションは、Payment Card Industry Data Security Standard (PCI DSS 3.2) と同様の要件のサブセットを実装します。

このサンプルでは、お客様が PCI DSS 3.2 要件と同様のコンプライアンスを実現できるように、事前に構成されたセキュリティ制御を備えた PaaS Web アプリケーション参照アーキテクチャを自動的にデプロイします。 このソリューションは、リソースのデプロイと構成をガイドする Azure Resource Manager テンプレートと PowerShell スクリプトで構成されています。

この記事で説明されている手順に従って、アプリケーション コンポーネントが正しく構成されていることを確認する必要があります。 データベース、Azure App Service、Azure Key Vault インスタンス、および Azure Application Gateway インスタンスは、相互に依存します。

デプロイ スクリプトによってインフラストラクチャが設定されます。 デプロイ スクリプトを実行した後、コンポーネントとサービスをリンクするには、Azure portal で手動構成を行う必要があります。

このサンプルは、小売業界で働き、セキュリティで保護された Azure インフラストラクチャを使用してリテール アプリを構築する Azure 上の経験豊富な開発者を対象としています。

このアーキテクチャは、お客様が特定の要件に合わせて調整するための基盤として機能することを目的としており、運用環境で as-is 使用しないでください。

PCI DSS 3.2 の要件を完全に満たすには、変更を加えずにアプリケーションをこの環境にデプロイするだけでは不十分です。 次の点に注意してください。

  • このアーキテクチャは、お客様が PCI DSS 3.2 に準拠した方法で Azure を使用するのに役立つベースラインを提供します。
  • 要件は各顧客の実装の仕様によって異なる場合があるため、このアーキテクチャを使用して構築されたソリューションの適切なセキュリティとコンプライアンスの評価を行う責任があります。

このアプリの開発と展開では、次の方法を学習します。

  • Azure Key Vault インスタンスを作成し、そこからシークレットを格納および取得します。
  • Azure Database for Azure SQL をデプロイし、セキュリティで保護されたデータを設定し、そのデータへのアクセスを承認します。
  • フロントエンド ファイアウォール アクセスで分離された専用の App Service 環境で Azure Web アプリをデプロイします。
  • OWASP Top 10 Ruleset を使用するファイアウォールを使用して、Azure Application Gateway インスタンスを作成して構成します。
  • Azure サービスを使用して、転送中および保存中のデータの暗号化を有効にします。
  • コンプライアンスを評価するために Azure Policy と Azure Blueprints を設定します。

このアプリを開発してデプロイした後、説明されている構成とセキュリティ対策と共に、次のサンプル Web アプリを設定します。

アーキテクチャ図とコンポーネント

このアプリは、3 つの層を持つ一般的な n 層アプリケーションです。 監視コンポーネントとシークレット管理コンポーネントが統合されたフロントエンド、バックエンド、およびデータベースレイヤーを次に示します。

アプリのアーキテクチャ

アーキテクチャは、次のコンポーネントで構成されます。

  • App Service Environment v2。 アプリケーション アーキテクチャ用の App Service Environment とロード バランサーを提供します。
  • Azure Application Gateway。 アプリケーション アーキテクチャのゲートウェイとファイアウォールを提供します。
  • Application Insights。 複数のプラットフォームで拡張可能な Application Performance Management (APM) サービスを提供します。
  • Azure Key Vault。 アプリのシークレットを格納および暗号化し、その周囲のアクセス ポリシーの作成を管理します。
  • Azure Active Directory。クラウドベースの ID およびアクセス管理サービス、サインイン、リソースへのアクセスを提供します。
  • Azure DNS。 ドメインをホストするサービスを提供します。
  • Azure Load Balancer。 アプリケーションをスケーリングし、サービスの高可用性を作成する
  • Azure Storage。 最新のデータ ストレージ シナリオのソリューションを提供します。
  • Azure Web App。 Web アプリケーションをホストするための HTTP ベースのサービスを提供します。
  • Azure Database for AzureSQL。 アプリのデータを安全に格納します。
  • Azure Blueprints。 特定の標準と要件に対する仕様とコンプライアンスを提供します。
  • Azure Security Center
  • Azure Policy 割り当てられたポリシーに準拠していないリソースを評価します。

脅威モデル

脅威モデリングは、ビジネスとアプリケーションに対する潜在的なセキュリティ上の脅威を特定し、適切な軽減計画が実施されていることを確認するプロセスです。

このサンプルでは、 Microsoft Threat Modeling Tool を 使用して、セキュリティで保護されたサンプル アプリの脅威モデリングを実装しました。 コンポーネントとデータ フローを図に示すことで、開発プロセスの早い段階で問題や脅威を特定できます。 これにより、時間とコストを後で節約できます。

これは、サンプル アプリの脅威モデルです。

脅威モデル

脅威モデリング ツールによって生成される脅威のサンプルと潜在的な脆弱性を次のスクリーンショットに示します。 脅威モデルは、公開されている攻撃対象領域の概要を示し、開発者に問題を軽減する方法を検討するよう求めます。

脅威モデルの出力

たとえば、前の脅威モデル出力の SQL インジェクションは、ユーザー入力をサニタイズし、Azure Database for PostgreSQL のストアド関数を使用することで軽減されます。 この軽減策により、データの読み取りと書き込み中にクエリが任意に実行されるのを防ぐことができます。

開発者は、脅威モデルの出力内の各脅威を軽減することで、システムの全体的なセキュリティを向上させます。

デプロイメント

[前提条件]

アプリケーションを起動して実行するには、次のツールをインストールする必要があります。

  • アプリケーション コードを変更および表示するためのコード エディター。 Visual Studio Code はオープンソース オプションです。
  • 開発用コンピューター上の Azure CLI
  • お使いのシステム上の Git。 Git は、ソース コードをローカルに複製するために使用されます。
  • jq は、JSON をユーザーフレンドリな方法でクエリするための UNIX ツールです。

このサンプルは、Azure 内にリソースをデプロイするために Azure Resource Manager の API サービスによって処理される JSON 構成ファイルと PowerShell スクリプトで構成されています。 詳細なデプロイ手順については、こちら参照してください。

クイックスタート

  1. この GitHub リポジトリ ローカル ワークステーションに複製またはダウンロードします。

  2. 0-Setup-AdministrativeAccountAndPermission.md 確認し、指定されたコマンドを実行します。

  3. Contoso サンプル データを使用してテスト ソリューションをデプロイするか、初期運用環境をパイロットします。

    このスクリプトでは、Contoso のサンプル データを使用して Web ストアのデモンストレーションを行う Azure リソースをデプロイします。

この例では、Web アプリを App Service にデプロイし、リソースを作成するデプロイ スクリプトを実行します。

Azure にアプリをデプロイするには、次のような多くの方法があります。

  • Azure Resource Manager テンプレート
  • PowerShell
  • Azure CLI (Azure のコマンド ライン インターフェース)
  • Azure Portal
  • Azure DevOps

ガイダンスと推奨事項

ネットワーク

このアーキテクチャでは、アドレス空間が 10.200.0.0/16 のプライベート仮想ネットワークを定義します。 Virtual_Network

ネットワーク セキュリティ グループ

ネットワーク セキュリティ グループ (https://docs.microsoft.com/azure/virtual-network/virtual-networks-nsg) には、仮想ネットワーク内のトラフィックを許可または拒否するアクセス制御リスト (ACL) が含まれています。 ネットワーク セキュリティ グループを使用して、サブネットまたは個々の VM レベルでトラフィックをセキュリティで保護できます。 次のネットワーク セキュリティ グループが存在します。

  • Application Gateway 用の 1 つのネットワーク セキュリティ グループ
  • App Service Environment 用の 1 つのネットワーク セキュリティ グループ
  • Azure SQL Database 用の 1 つのネットワーク セキュリティ グループ
  • 要塞ホスト用の 1 つのネットワーク セキュリティ グループ

各ネットワーク セキュリティ グループには、ソリューションが安全かつ正しく動作できるように、特定のポートとプロトコルが開いています。 さらに、ネットワーク セキュリティ グループごとに次の構成が有効になります。

NSG 構成

App Service Environment の NSG 構成は、次の図に示すように構成する必要があります。

NSG_Config

各サブネットは、対応するネットワーク セキュリティ グループに関連付けられています。

設定

サブネットは、次の図に示すように構成されます。 Config

Azure DNS

ドメイン ネーム システム (DNS) は、Web サイトまたはサービス名をその IP アドレスに変換 (または解決) する役割を担います。 Azure DNS は、Azure インフラストラクチャを使用して名前解決を提供する DNS ドメインのホスティング サービスです。 Azure でドメインをホストすることで、ユーザーは他の Azure サービスと同じ資格情報、API、ツール、課金を使用して DNS レコードを管理できます。 Azure DNS では、プライベート DNS ドメインもサポートされています。

データの保護

クラウド内のデータを保護するには、データが発生する可能性がある特定の状態と、その状態に対してどのような制御を利用できるのかを把握する必要があります。 Azure のデータ セキュリティと暗号化のベスト プラクティスは、次のデータの状態に関連しています。

  • 休止状態のとき: 磁気ディスクまたは光学ディスクなどの物理メディア上で、静的に存在するすべての情報ストレージオブジェクト、コンテナー、およびタイプが含まれます。
  • 転送中: コンポーネント、場所、またはプログラム間でデータが転送されるとき、転送中です。 例として、ネットワーク上の転送、サービス バス経由の転送 (オンプレミスからクラウドへ、クラウドからオンプレミスへ。ExpressRoute などのハイブリッド接続を含みます)、入力/出力プロセス中の転送があります。

Azure Storage

暗号化された保存データの要件を満たすために、すべての Azure Storage は Azure Key Vault を使用して、データにアクセスして暗号化するキーの制御を維持します。 これは、PCI DSS 3.2 で定義されている組織のセキュリティ コミットメントとコンプライアンス要件をサポートするカード所有者データの保護と保護に役立ちます。

Azure Disk Encryption

Azure Disk Encryption は、Windows の BitLocker 機能を利用して、データ ディスクのボリューム暗号化を提供します。 このソリューションは Azure Key Vault と統合され、ディスク暗号化キーの制御と管理に役立ちます。

Azure SQL データベース

Azure SQL Database インスタンスでは、次のデータベース セキュリティ対策を使用します。

  • Active Directory の認証と承認 により、データベース ユーザーとその他の Microsoft サービスを 1 か所で ID 管理できます。
  • SQL データベース監査 データベース イベントを追跡し、Azure ストレージ アカウントの監査ログに書き込みます。
  • Azure SQL Database は、 透過的なデータ暗号化を使用するように構成されています。この暗号化は、保存情報を保護するために、データベース、関連するバックアップ、トランザクション ログ ファイルの暗号化と暗号化解除をリアルタイムで実行します。 透過的なデータ暗号化は、保存されたデータが不正アクセスの対象になっていないことを保証します。
  • ファイアウォール規則 適切なアクセス許可が付与されるまで、データベース サーバーへのすべてのアクセスを禁止します。 ファイアウォールは、各要求の送信元 IP アドレスに基づいてデータベースへのアクセス権を付与します。
  • SQL 脅威検出 は、疑わしいデータベース アクティビティ、潜在的な脆弱性、SQL インジェクション攻撃、および異常なデータベース アクセス パターンに対するセキュリティ アラートを提供することで、潜在的な脅威が発生したときに検出および対応できるようにします。
  • 暗号化された列 により、機密データがデータベース システム内でプレーンテキストとして表示されることはありません。 データ暗号化を有効にすると、キーにアクセスできるクライアント アプリケーションまたはアプリケーション サーバーのみがプレーンテキスト データにアクセスできます。
  • SQL Database 動的データ マスク では、特権のないユーザーまたはアプリケーションにデータをマスクすることで、機密データの公開が制限されます。 動的データ マスクは、潜在的に機密性の高いデータを自動的に検出し、適用する適切なマスクを提案できます。 これにより、未承認のアクセスによってデータベースが終了しないように、データへのアクセスを特定して減らすことができます。 お客様は、データベース スキーマに準拠するように動的データ マスク設定を調整する必要があります。

ID 管理

次のテクノロジは、Azure 環境内のカード所有者データへのアクセスを管理する機能を提供します。

  • Azure Active Directory は、Microsoft のマルチテナント のクラウドベースのディレクトリと ID 管理サービスです。 このソリューションのすべてのユーザーは、Azure SQL Database にアクセスするユーザーを含め、Azure Active Directory に作成されます。
  • アプリケーションへの認証は、Azure Active Directory を使用して実行されます。 詳細については、「アプリケーションと Azure Active Directoryの統合」を参照してください。 さらに、データベース列の暗号化では、Azure Active Directory を使用して Azure SQL Database に対してアプリケーションを認証します。 詳細については、 Azure SQL Database で機密データを保護する方法を参照してください。
  • Azure ロールベースのアクセス制御を使用すると、管理者はきめ細かいアクセス許可を定義して、ユーザーがジョブを実行するために必要なアクセス権のみを付与できます。 すべてのユーザーに Azure リソースに対する無制限のアクセス許可を付与する代わりに、管理者はカード所有者データにアクセスするための特定のアクションのみを許可できます。 サブスクリプションへのアクセスは、サブスクリプション管理者に制限されます。
  • Azure Active Directory Privileged Identity Management を使用すると、カード所有者データなどの特定の情報にアクセスできるユーザーの数を最小限に抑えることができます。 管理者は、Azure Active Directory Privileged Identity Management を使用して、特権 ID とリソースへのアクセスを検出、制限、監視できます。 この機能は、必要に応じてオンデマンドの Just-In-Time 管理アクセスを適用するためにも使用できます。
  • Azure Active Directory Identity Protection は、組織の ID に影響を与える可能性のある脆弱性を検出し、組織の ID に関連する検出された疑わしいアクションに対する自動応答を構成し、疑わしいインシデントを調査して、それらを解決するための適切なアクションを実行します。

シークレットの管理

このソリューションでは、キーとシークレットの管理に Azure Key Vault を使用します。 Azure Key Vault は、クラウド アプリケーションとサービスで使用される暗号化キーとシークレットを保護するのに役立ちます。 次の Azure Key Vault 機能は、お客様がこのようなデータを保護してアクセスするのに役立ちます。

  • 高度なアクセス ポリシーは、必要に応じて構成されます。
  • Key Vault アクセス ポリシーは、キーとシークレットに対して最低限必要なアクセス許可で定義されます。
  • Key Vault 内のすべてのキーとシークレットには有効期限があります。
  • Key Vault 内のすべてのキーは、特殊なハードウェア セキュリティ モジュールによって保護されます。 キーの種類は、HSM で保護された 2048 ビット RSA キーです。
  • Key Vault を使用すると、キーとシークレット (認証キー、ストレージ アカウント キー、データ暗号化キーなど) を暗号化できます。ハードウェア セキュリティ モジュール (HSM) によって保護されているキーを使用した PFX ファイルとパスワード
  • RBAC を使用して、特定のスコープでユーザー、グループ、アプリケーションにアクセス許可を割り当てます。
  • Key Vault を使用して、自動更新で TLS 証明書を管理します。
  • Key Vault の診断ログは、少なくとも 365 日の保持期間で有効になります。
  • キーに対して許可される暗号化操作は、必要なものに制限されます。

Azure Security Center

Azure Security Center を使用すると、ワークロード間でセキュリティ ポリシーを一元的に適用および管理し、脅威にさらされるのを制限し、攻撃を検出して対応することができます。 さらに、Azure Security Center は、Azure サービスの既存の構成にアクセスして、セキュリティ体制の向上とデータの保護に役立つ構成とサービスの推奨事項を提供します。

Azure Security Center では、さまざまな検出機能を使用して、環境を対象とする潜在的な攻撃を顧客に警告します。 これらのアラートには、アラートをトリガーした原因、対象となるリソース、および攻撃の原因に関する重要な情報が含まれています。 Azure Security Center には、脅威や疑わしいアクティビティが発生したときにトリガーされる一連の定義済みのセキュリティ アラートがあります。 Azure Security Center のカスタム アラート ルールを使用すると、お客様は、環境から既に収集されているデータに基づいて新しいセキュリティ アラートを定義できます。

Azure Security Center では、優先順位付けされたセキュリティ アラートとインシデントが提供されるため、お客様は潜在的なセキュリティの問題を簡単に検出して対処できます。 脅威の調査と修復においてインシデント対応チームを支援するために、検出された脅威ごとに脅威インテリジェンス レポートが生成されます。

Azure Application Gateway

このアーキテクチャでは、Web アプリケーション ファイアウォールが構成され、OWASP ルールセットが有効になっている Azure Application Gateway を使用して、セキュリティの脆弱性のリスクを軽減します。 その他の機能は次のとおりです。

  • エンド ツー エンド SSL
  • TLS v1.0 と v1.1 を無効にする
  • TLSv1.2 を有効にする
  • Web アプリケーション ファイアウォール (防止モード)
  • OWASP 3.0 ルールセットを使用した防止モード
  • 診断ログの有効化
  • カスタム健康状態チェック
  • Azure Security Center と Azure Advisor は、追加の保護と通知を提供します。 Azure Security Center には、評判システムも用意されています。

ログ記録と監査

Azure サービスは、システムとユーザーのアクティビティ、およびシステムの正常性を広範囲にログに記録します。

  • アクティビティ ログ は、サブスクリプション内のリソースに対して実行された操作に関する分析情報を提供します。 アクティビティ ログは、操作のイニシエーター、発生時刻、および状態を判断するのに役立ちます。
  • 診断ログ には、すべてのリソースによって出力されたすべてのログが含まれます。 これらのログには、Windows イベント システム ログ、Azure Storage ログ、Key Vault 監査ログ、Application Gateway のアクセス ログとファイアウォール ログが含まれます。 すべての診断ログは、アーカイブのために一元化および暗号化された Azure ストレージ アカウントに書き込みます。 保持期間は、組織固有の保持要件を満たすために、ユーザーが構成できる最大 730 日間です。

Azure Monitor ログ

これらのログは、処理、格納、およびダッシュボード レポート用に Azure Monitor ログ に統合されます。 収集されると、データは Log Analytics ワークスペース内のデータ型ごとに個別のテーブルに編成されます。これにより、元のソースに関係なく、すべてのデータをまとめて分析できます。 さらに、Azure Security Center は Azure Monitor ログと統合されているため、お客様は Kusto クエリを使用してセキュリティ イベント データにアクセスし、それを他のサービスのデータと組み合わせることができます。

このアーキテクチャの一部として、次の Azure 監視ソリューション が含まれています。

  • Active Directory 評価: Active Directory 正常性チェック ソリューションは、サーバー環境のリスクと正常性を定期的に評価し、デプロイされたサーバー インフラストラクチャに固有の推奨事項の優先順位付けされた一覧を提供します。
  • SQL Assessment: SQL 正常性チェック ソリューションは、サーバー環境のリスクと正常性を定期的に評価し、デプロイされたサーバー インフラストラクチャに固有の推奨事項の優先順位付けされた一覧をお客様に提供します。
  • エージェントの正常性: エージェントの正常性ソリューションは、デプロイされているエージェントの数とその地理的な分布、応答していないエージェントの数、および運用データを送信しているエージェントの数を報告します。
  • アクティビティ Log Analytics: Activity Log Analytics ソリューションは、顧客のすべての Azure サブスクリプションにわたる Azure アクティビティ ログの分析を支援します。

Azure Monitor

Azure Monitor は、Azure リソース内の API 呼び出しの追跡など、組織が監査、アラートの作成、データのアーカイブを行うことができるようにすることで、ユーザーがパフォーマンスの追跡、セキュリティの維持、傾向の特定を行うのに役立ちます。

Application Insights

Application Insights は、複数のプラットフォーム上の Web 開発者向けの拡張可能な Application Performance Management サービスです。 Application Insights はパフォーマンスの異常を検出し、お客様はそれを使用してライブ Web アプリケーションを監視できます。 これには、お客様が問題を診断し、ユーザーがアプリで実際に何を行っているかを理解するのに役立つ強力な分析ツールが含まれています。 これは、お客様がパフォーマンスと使いやすさを継続的に改善できるように設計されています。

Azure Key Vault

組織内のキーを保管するための保管庫を作成し、以下のような運用業務に対する責任を保持します。

  • Key Vault に格納されるデータには、次のものが含まれます。

    • アプリケーションインサイトキー
    • Data Storage アクセス キー
    • 接続文字列
    • データ テーブル名
    • ユーザー資格情報
  • 高度なアクセス ポリシーは、必要に応じて構成されます

  • Key Vault アクセス ポリシーは、キーとシークレットに対して最低限必要なアクセス許可で定義されます

  • Key Vault 内のすべてのキーとシークレットの有効期限

  • Key Vault 内のすべてのキーは HSM によって保護されます [キーの種類 = HSM 保護された 2048 ビット RSA キー]

  • Role-Based アクセス制御 (RBAC) を使用して、すべてのユーザー/ID に最低限必要なアクセス許可が付与されます

  • アプリケーションが相互に信頼し、実行時に同じシークレットにアクセスする必要がない限り、アプリケーションは Key Vault を共有しません

  • Key Vault の診断ログは、少なくとも 365 日の保持期間で有効になります。

  • キーに対して許可される暗号化操作は、必要なものに制限されます

VPN と ExpressRoute

この PaaS Web アプリケーション参照アーキテクチャの一部としてデプロイされたリソースへの接続を安全に確立するには、セキュリティで保護された VPN トンネルまたは ExpressRoute を構成する必要があります。 VPN または ExpressRoute を適切に設定することで、お客様は転送中のデータに対する保護レイヤーを追加できます。

Azure でセキュリティで保護された VPN トンネルを実装することで、オンプレミス ネットワークと Azure Virtual Network の間に仮想プライベート接続を作成できます。 この接続はインターネット経由で行われ、お客様のネットワークと Azure の間の暗号化されたリンク内で情報を安全に "トンネリング" できます。 サイト間 VPN は、何十年もの間、あらゆる規模の企業によって展開されている、セキュリティで保護された成熟したテクノロジです。 このオプションでは、暗号化メカニズムとして IPsec トンネル モードが使用されます。

VPN トンネル内のトラフィックはサイト間 VPN を使用してインターネットを経由するため、Microsoft は、さらに安全な別の接続オプションを提供します。 Azure ExpressRoute は、Azure とオンプレミスの場所または Exchange ホスティング プロバイダーの間の専用 WAN リンクです。 ExpressRoute 接続はインターネットを経由しないため、これらの接続は、インターネット経由の一般的な接続よりも信頼性、高速、待機時間の短縮、および高いセキュリティを提供します。 さらに、これは顧客の通信プロバイダーの直接接続であるため、データはインターネット経由で移動しないため、データに公開されません。

オンプレミス ネットワークを Azure に拡張するセキュリティで保護されたハイブリッド ネットワークを実装するためのベスト プラクティス で利用できます。

コストに関する考慮事項

Azure アカウントをまだお持ちでない場合は、無料で作成できます。 無料アカウントページに移動して開始し、無料の Azure アカウントで何ができるかを確認し、12 か月間無料の製品を確認します。

セキュリティ機能を使用してサンプル アプリにリソースをデプロイするには、一部の Premium 機能に対して料金を支払う必要があります。 アプリがスケーリングされ、Azure によって提供される無料レベルと試用版をアプリケーションの要件を満たすためにアップグレードする必要があるため、コストが増加する可能性があります。 Azure 料金計算ツール を使用してコストを見積もります。

次のステップ

次の記事は、セキュリティで保護されたアプリケーションの設計、開発、デプロイに役立ちます。