説明
Azure Storage Account で広範なネットワークアクセスや Blob の匿名アクセスを許可すると、意図しない相手にデータが公開されるおそれがあります。ネットワーク経由で到達できることと、認証なしでデータを読めることは別の条件です。
アカウントで Blob の公開アクセスを許可しても、すべてのコンテナーが自動的に公開されるわけではありません。コンテナーの公開レベルとネットワーク制限も適用され、認証済みのデータアクセスには対応する権限が必要です。
想定される影響
- 公開設定のコンテナー内のデータが、意図しない利用者に読み取られる可能性があります。
- 広いネットワーク許可範囲によって、漏えいした資格情報の悪用を制限しにくくなるおそれがあります。
対処方法
アカウントとコンテナーで不要な Blob の匿名アクセスを無効にしてください。パブリックエンドポイントが必要な場合は、ネットワークの既定の動作を Deny にし、承認済みのパブリック IP アドレスやサブネットだけを許可してください。プライベート接続だけを使う場合は、プライベートエンドポイントと DNS を構成・試験してからパブリックネットワークアクセスを無効にしてください。データ権限と必要なクライアントのアクセスも確認してください。
例
AzureRM 2.99.0 の形式を維持した例です。allow_blob_public_access は旧属性名のため、インストール済みのプロバイダーバージョンに対応する属性を使用してください。例の IP アドレスは、承認済みの実際のパブリックアドレスに置き換えてください。
変更前
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 の匿名読み取りが有効になるわけではありません。
変更後
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 の匿名アクセスを無効にします。許可されたネットワーク上のクライアントにも、データへのアクセス権限が別途必要です。