Azure Storage のネットワーク許可範囲が広い可能性

ストレージアカウントへの公開ネットワークアクセスを必要な接続元に限定し、許可ルールとサービスの例外を見直す方法を説明します。

説明

Azure Storage の公開エンドポイントをすべてのネットワークに開放すると、業務上アクセスする必要がない場所からもデータへのアクセスを試みることができます。Ansible の network_acls.default_action: Allow は、公開エンドポイントに対する既定のネットワーク制限を解除します。Deny を使用していても、許可するアドレス範囲やサービスの例外が広すぎると、想定以上の接続を許可することになります。

Azure では、public_network_access の設定がファイアウォールの既定の動作より優先されます。公開アクセスを無効にする際は、信頼されたサービスやリソースインスタンスに対する既存の例外も確認してください。ネットワーク経由の接続を許可することと、データの読み取りや書き込みを許可することは別です。公開エンドポイントが有効なだけで、匿名アクセスが許可されるわけではありません。

想定される影響

  • ネットワークの許可範囲が広いと、漏えいした資格情報や過剰なデータ権限が、業務に関係のないネットワークからも悪用されるおそれがあります。
  • 機密データを保護するには、必要なクライアントの接続経路とデータへのアクセス権限の両方を制限する必要があります。

対処方法

  1. 公開エンドポイントが必要な場合は、network_acls.default_action を Deny にし、必要な公開 IPv4 アドレスや仮想ネットワークだけを許可してください。リソースインスタンスのルールと bypass の例外も、実際の用途に合わせて必要最小限にしてください。
  2. プライベート接続だけが必要な場合は、利用するストレージサービスのプライベートエンドポイントと DNS を構成してから、public_network_access: Disabled を適用してください。プライベートエンドポイントを作成しただけでは、公開アクセスは遮断されません。引き続き有効なサービスやリソースインスタンスの例外も確認してください。
  3. IP ルールには、クライアントの実際の公開送信元アドレスを指定してください。同じ Azure リージョンからの要求には IP ルールが適用されないため、必要に応じて仮想ネットワークルールを使用してください。変更後は、承認した接続が成功し、許可していない接続が遮断されることをテストし、データのアクセス権限も確認してください。

例

以下は、既定で許可する設定と拒否する設定を比較する例です。アカウント名も clh0003 から clh0002 に変わっているため、既存のアカウントに適用する際は、同じ対象アカウントを指定してください。実際のリソースグループ、利用可能なアカウント名、認証設定が必要です。

変更前

yaml
- name: configure firewall and more virtual networks
  azure_rm_storageaccount:
    resource_group: myResourceGroup
    name: clh0003
    type: Standard_RAGRS
    network_acls:
      bypass: AzureServices,Metrics
      default_action: Allow

変更後

yaml
- name: configure firewall and virtual networks
  azure_rm_storageaccount:
    resource_group: myResourceGroup
    name: clh0002
    type: Standard_RAGRS
    network_acls:
      bypass: AzureServices,Metrics
      default_action: Deny
      ip_rules:
        - value: 1.2.3.4
          action: Allow

変更前: default_action: Allow は、公開エンドポイントが有効な場合に、すべてのネットワークからの接続を許可します。データへのアクセスには、別途設定された権限が適用されます。

変更後: 既定の動作を Deny に変更し、1 つの IP アドレスに対する許可ルールを追加します。1.2.3.4 は例示用のアドレスなので、実際に接続を許可するクライアントの公開アドレスに置き換えてください。bypass: AzureServices,Metrics が残っているため、その IP アドレス以外にも例外に該当するアクセスが許可されます。必要な例外だけを残し、接続をテストしてください。

参考資料