Function App の FTP 通信保護の確認

Function App へのファイル転送で平文 FTP を使わないよう発行設定を確認してください。

説明

Function App で暗号化されない FTP を許可し、実際のデプロイに使用すると、発行用の認証情報や関数ファイルが転送中に漏えいするおそれがあります。FTPS のみに制限するか、FTP による発行が不要なら無効にしてください。この設定は関数の Web リクエストを保護する HTTPS 設定とは別です。

想定される影響

  • 平文 FTP で送る発行用の認証情報が漏えいするおそれがあります。
  • 関数コードや設定ファイルを転送中に保護できない場合があります。
  • 盗まれた発行用の認証情報でデプロイ内容が変更されるおそれがあります。

対処方法

FTP による発行が必要なら site_config.ftps_state を FtpsOnly に、不要なら Disabled に設定してください。承認された暗号化済みのデプロイ経路を使い、発行用の認証情報とデプロイ権限を制限してください。デプロイが動作し、平文 FTP 接続が拒否されることを確認してください。

例

AzureRM 3.x の旧 azurerm_function_app リソースで FTP 設定を比較する抜粋です。必須のストレージ設定は省略しています。現在のリソースでは既定値が異なる場合があるため、実際の発行設定を確認してください。

変更前

hcl
resource "azurerm_function_app" "example" {
  name                = "test-azure-functions"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  app_service_plan_id = azurerm_app_service_plan.example.id

  site_config {
    http2_enabled = true
    ftps_state    = "AllAllowed"
  }
}

変更後

hcl
resource "azurerm_function_app" "example" {
  name                = "test-azure-functions"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  app_service_plan_id = azurerm_app_service_plan.example.id

  site_config {
    ftps_state = "FtpsOnly"
  }
}

変更前の AllAllowed は平文 FTP も許可します。変更後の FtpsOnly はファイル転送を FTPS に制限します。FTP による発行が不要なら Disabled を使用してください。

参考資料