説明
認証が必要な Function App の HTTP エンドポイントで匿名リクエストを許可すると、許可していないユーザーが機能やデータにアクセスするおそれがあります。プラットフォームの認証設定がないだけでは、アプリケーションに認証が一切ないとは判断できません。関数キー、アプリケーション側の認証、実際のアクセス経路も確認してください。
想定される影響
- 保護が必要な関数が意図しない呼び出しを受ける場合があります。
- 関数の権限によっては、データの参照や変更につながるおそれがあります。
- 自動化された呼び出しでリソース使用量や費用が増える場合があります。
対処方法
エンドポイントの公開範囲に合う認証方式を設定してください。プラットフォーム認証を使う場合は ID プロバイダーと未認証リクエストの処理を構成し、保護対象のパスで匿名リクエストを拒否することをテストしてください。認証済みユーザーにも必要な操作だけを許可してください。
例
AzureRM 3.x の旧 azurerm_function_app リソースを使った抜粋で、ストレージなどの必須設定は省略しています。現在の構成には、OS に対応する Function App リソースを使用してください。
変更前
hcl
resource "azurerm_function_app" "example" {
name = "example-app-service"
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 {
dotnet_framework_version = "v4.0"
scm_type = "LocalGit"
}
}
変更後
hcl
resource "azurerm_function_app" "example" {
name = "example-app-service"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
app_service_plan_id = azurerm_app_service_plan.example.id
auth_settings {
enabled = true
}
}
変更後は auth_settings を有効にしますが、この設定だけで匿名リクエストを拒否するわけではありません。ID プロバイダーとリクエストの処理方針を設定し、実際のエンドポイントで認証・認可を確認してください。