説明
Azure Cache for Redisのパブリックエンドポイントを使う場合、ファイアウォールの範囲が必要なクライアントより広いと、不要な外部接続の試行も許可する可能性があります。start_ipとend_ipは許可範囲の開始と終了を定めます。両端だけでなく、その間のすべてのアドレスと、ほかの規則で許可される範囲も確認する必要があります。
承認済みクライアントのパブリックIPを限定して許可する構成は、インターネット全体を許可する構成とは異なります。プライベートIPの文字列を指定するだけでは、プライベートエンドポイントや仮想ネットワーク接続は構成されません。ネットワーク制限に加えて、認証とデータ権限も必要です。
想定される影響
- 必要以上に広いパブリック範囲を許可すると、キャッシュへの接続を試みられるクライアントが増えます。
- 認証情報の漏えいや過剰な権限が重なると、データの読み取り・変更やリソース消費につながる可能性があります。
対処方法
- パブリックエンドポイントが必要な場合は、NATなどを経たクライアントの実際の送信元アドレスを確認し、必要なアドレスだけを許可してください。すべてのファイアウォール規則を合わせたアクセス範囲も確認してください。
- プライベート接続だけが必要な場合は、対応するサービス階層でプライベートエンドポイント、DNS、クライアント経路を構成してテストしてから、
public_network_access_enabledをfalseに設定してください。 - 変更前にTerraformの計画と接続への影響を確認してください。変更後は必要なクライアントの接続と不要な送信元の遮断をテストし、認証、データ権限、TLSも点検してください。
例
以下の部分的な例はAzureRM v4.50.0のnon_ssl_port_enabled構文を使います。省略したリソースグループとrandom_id.serverを定義し、文書用アドレス203.0.113.10を承認済みクライアントの実際のパブリック送信元に置き換えてください。プライベート接続を構成する例ではありません。
変更前
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
}
resource "azurerm_redis_firewall_rule" "public_rule" {
name = "someIPrange"
redis_cache_name = azurerm_redis_cache.example.name
resource_group_name = azurerm_resource_group.example.name
start_ip = "1.2.3.4"
end_ip = "2.3.4.5"
}
変更後
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
}
resource "azurerm_redis_firewall_rule" "public_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"
}
説明:
- 変更前:
1.2.3.4から2.3.4.5までの広い範囲を許可しています。実際に必要なアドレスかを確認する必要があります。 - 変更後: 開始と終了を一つのクライアントアドレスに合わせ、許可範囲を狭めています。リソースアドレス
public_ruleは維持しています。実際のアドレスと接続経路はデプロイ先に合わせて確認してください。