从Azure应用程序服务到blob存储的防火墙访问

从Azure应用程序服务到blob存储的防火墙访问,azure,azure-web-app-service,azure-storage,Azure,Azure Web App Service,Azure Storage,我正在尝试锁定应用程序服务对blob存储的访问。我有以下powershell代码,它从我运行的应用程序服务中获取可能的传出ip地址,然后将对blob存储的访问限制为这些ip地址: Write-Host ("Setting blob storage access restrictions") $appServiceIPAddresses = (Get-AzureRmWebApp -ResourceGroupName $resourceGroupName -name $webSiteName).Po

我正在尝试锁定应用程序服务对blob存储的访问。我有以下powershell代码,它从我运行的应用程序服务中获取可能的传出ip地址,然后将对blob存储的访问限制为这些ip地址:

Write-Host ("Setting blob storage access restrictions")
$appServiceIPAddresses = (Get-AzureRmWebApp -ResourceGroupName $resourceGroupName -name $webSiteName).PossibleOutboundIpAddresses.Split(",")
$currentStorageAccessRules = (Get-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName $resourceGroupName -Name $storageAccountName).IpRules 
$currentStorageAccessRules = {$currentStorageAccessRules}.Invoke() # Convert to modifiable list
foreach($ipAddress in $appServiceIPAddresses) {
    if (($currentStorageAccessRules | Where-Object { $_.IPAddressOrRange -eq $ipAddress }) -ne $null) {
        Write-Host("IP $ipAddress already has access to blob storage $storageAccountName")
    } else {
        Write-Host("Allowing IP $ipAddress access to blob storage $storageAccountName")
        $ipRule = New-Object -TypeName Microsoft.Azure.Commands.Management.Storage.Models.PSIpRule
        $ipRule.Action = 'Allow'
        $ipRule.IPAddressOrRange = $ipAddress
        $currentStorageAccessRules.Add($ipRule)
    }
}
Update-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName $resourceGroupName -Name $storageAccountName -IPRule $currentStorageAccessRules -DefaultAction Deny
Write-Host ("Updated blob storage access restrictions")

这将正确设置我期望的所有ip地址,但是当应用程序服务尝试访问blob存储时,我现在得到403禁止。所有容器都是私有的,所以应该没有对blob的url访问,我只是通过应用程序服务以编程方式访问它们。有人知道上述方法不起作用的原因吗?

这很可能是权限问题,具体取决于您访问存储帐户所使用的特定身份验证方法,有三种:SAS、存储密钥和名称以及AAD。您必须确保您可以访问Blob存储作为服务,具体取决于您正在使用的服务。我建议检查这个包含更多信息


另外,在防火墙设置中,尝试检查“允许受信任的Microsoft服务访问此存储帐户”,然后重试

根据这里的文章:“IP网络规则对来自与存储帐户相同Azure区域的请求没有影响。请使用虚拟网络规则来允许相同区域的请求。”因此,我上面的规则将被忽略,我需要设置虚拟网络以锁定访问。希望这对别人有帮助


有关如何执行此操作的更多信息,请参见此处:

可能是它使用的是Azure内部地址,而不是面向公众的地址?你知道这些IP地址是通过这种方式被其他应用共享的吗?当然,除非您是在ASE中运行:)在脚本运行后,是否已在门户中检查存储帐户防火墙规则中是否列出了正确的IP?此外,如果您在门户中手动执行此操作,它是否工作?是,IP地址在门户中正确列出。不,如果我手动把它们放进去也不行。我的理解是,不存在应用程序服务“内部ip地址”,所有传出流量都将从这些ip地址发送,这些ip地址是否共享无关紧要。如果您在未启用防火墙的情况下直接从门户网站上的Azure应用程序服务访问blob存储,它是否工作?是的,它工作。当我打开ip限制时,它停止工作。这不是权限问题,只有当ip地址限制到位时,访问才会被切断。否则效果很好。我还添加了“允许受信任的Microsoft服务访问此存储帐户”,但如果您查看受信任的服务列表,其中不包括应用程序服务,这主要是后台服务等