Azure Storage Account の公開アクセス設定の確認

ネットワークからの到達性と Blob の匿名アクセスを別々に確認してください。

説明

Azure Storage Account で広範なネットワークアクセスや Blob の匿名アクセスを許可すると、意図しない相手にデータが公開されるおそれがあります。ネットワーク経由で到達できることと、認証なしでデータを読めることは別の条件です。

アカウントで Blob の公開アクセスを許可しても、すべてのコンテナーが自動的に公開されるわけではありません。コンテナーの公開レベルとネットワーク制限も適用され、認証済みのデータアクセスには対応する権限が必要です。

想定される影響

  • 公開設定のコンテナー内のデータが、意図しない利用者に読み取られる可能性があります。
  • 広いネットワーク許可範囲によって、漏えいした資格情報の悪用を制限しにくくなるおそれがあります。

対処方法

アカウントとコンテナーで不要な Blob の匿名アクセスを無効にしてください。パブリックエンドポイントが必要な場合は、ネットワークの既定の動作を Deny にし、承認済みのパブリック IP アドレスやサブネットだけを許可してください。プライベート接続だけを使う場合は、プライベートエンドポイントと DNS を構成・試験してからパブリックネットワークアクセスを無効にしてください。データ権限と必要なクライアントのアクセスも確認してください。

例

AzureRM 2.99.0 の形式を維持した例です。allow_blob_public_access は旧属性名のため、インストール済みのプロバイダーバージョンに対応する属性を使用してください。例の IP アドレスは、承認済みの実際のパブリックアドレスに置き換えてください。

変更前

hcl
resource "azurerm_storage_account" "app_storage" {
  name                     = "storageaccountname"
  resource_group_name      = azurerm_resource_group.example.name
  location                 = azurerm_resource_group.example.location
  account_tier             = "Standard"
  account_replication_type = "LRS"

  network_rules {
    default_action = "Deny"
    ip_rules       = ["0.0.0.0/0"]
  }
}

0.0.0.0/0 はアドレス範囲を絞らない広範な CIDR です。この設定だけで Blob の匿名読み取りが有効になるわけではありません。

変更後

hcl
resource "azurerm_storage_account" "app_storage" {
  name                     = "storageaccountname"
  resource_group_name      = azurerm_resource_group.example.name
  location                 = azurerm_resource_group.example.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
  allow_blob_public_access = false

  network_rules {
    default_action = "Deny"
    ip_rules       = ["100.0.0.1"]
  }
}

ネットワークアクセスを一つのアドレスに制限し、アカウントで Blob の匿名アクセスを無効にします。許可されたネットワーク上のクライアントにも、データへのアクセス権限が別途必要です。

参考資料