説明
azurerm_redis_firewall_rule の start_ip が 0.0.0.0、end_ip が 255.255.255.255 の場合、許可範囲はすべての IPv4 アドレスを含みます。このルールでは、ファイアウォールによる IPv4 の接続元制限がなくなります。実際に外部から接続できるかどうかはパブリックネットワークの設定と経路によって決まり、Redis の認証や認可が無効になるわけではありません。
想定される影響
公開エンドポイントに到達できる外部クライアントが接続を試みられます。認証情報が漏えいしたり認証設定が不十分だったりすると、キャッシュデータの読み取り・改ざんやサービス障害につながるおそれがあります。
対処方法
- すべてのルールの許可範囲を確認し、キャッシュから見える承認済みクライアントの接続元 IP、または必要最小限の範囲に制限してください。
- プライベート接続を使用する場合は、プライベートエンドポイントと DNS の経路が機能することを確認してから、パブリックネットワークアクセスを無効にしてください。許可リストにプライベートアドレスを追加するだけでは、プライベート接続は確立されません。
例
以下は AzureRM 4.x 用の抜粋で、参照先のリソースグループと random_id は別途定義されているものとします。文書用のアドレス 203.0.113.10 は、実際に承認したクライアントの接続元 IP に置き換えてください。
変更前
hcl
resource "azurerm_redis_cache" "example" {
name = "redis${random_id.server.hex}"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
capacity = 1
family = "P"
sku_name = "Premium"
non_ssl_port_enabled = false
minimum_tls_version = "1.2"
}
resource "azurerm_redis_firewall_rule" "open_rule" {
name = "someIPrange"
redis_cache_name = azurerm_redis_cache.example.name
resource_group_name = azurerm_resource_group.example.name
start_ip = "0.0.0.0"
end_ip = "255.255.255.255"
}
変更後
hcl
resource "azurerm_redis_cache" "example" {
name = "redis${random_id.server.hex}"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
capacity = 1
family = "P"
sku_name = "Premium"
non_ssl_port_enabled = false
minimum_tls_version = "1.2"
}
resource "azurerm_redis_firewall_rule" "open_rule" {
name = "someIPrange"
redis_cache_name = azurerm_redis_cache.example.name
resource_group_name = azurerm_resource_group.example.name
start_ip = "203.0.113.10"
end_ip = "203.0.113.10"
}
説明: 同じ open_rule リソースの許可範囲を、IPv4 全体から承認済みの単一アドレスに絞ります。ほかのルールに広い許可範囲が残っている場合は、それらも修正してください。