由于网络设置中的 VNET,Backup-AzApiManagement 无法访问 blob 存储

Backup-AzApiManagement failed to access blob storage because of VNETs in Network settings

运行 PowerShell 将 Azure API 管理实例从子网 A 中的 Azure VM 备份到 Blob 存储中。

消息说 Operation returned an invalid status code 'BadRequest'

我也将 Azure APIM 管理 public IP 添加到 Blob 存储防火墙中,它仍然不起作用。

使用调试模式,它有更多信息

{ "error": { "code": "InvalidParameters", "message": "Invalid parameter: This request is not authorized to perform this operation.\r\nParameter name: backupContainerName (value: [apim-backup])", "details": null, "innerError": null } }

经过四处搜索,显然这意味着 Blob 存储不允许该 IP。 只有 Backup-AzApiManagement 命令失败。 PowerShell 中的其他存储操作将在该 Azure VM 中运行。 此外,VM 中的存储资源管理器 UI 也可以访问 Blob 并从中上传 Blob。

这是否意味着,这个访问 blob 存储请求是由 Microsoft 基础设施内部服务器在幕后发出的,而不是来自我 运行 的 Azure VM?

如果您有安全的 Blob 存储帐户,请查看网络要求 https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-disaster-recovery-backup-restore#access-using-storage-access-key-2

TL;DR

  1. 如果你的服务在美国东部,你的存储账户在美国东部,添加APIM IP地址将无济于事。在 East US2 创建 Storage 帐户并从 East US 添加 APIM IP 地址。同一区域存储帐户和 APIM 服务将无法工作,因为只有 Cross-region 个存储请求将被 SNAT 到 public IP 地址。

  2. 我们发布了使用托管身份的备份支持,您无需提供访问密钥。 https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-disaster-recovery-backup-restore#access-using-managed-identity-2 使用托管身份,您不需要添加 IP 地址。您可以在存储帐户上启用“允许受信任的服务”。这种情况下的存储帐户可以与 APIM 服务位于同一区域。

例如备份 - https://docs.microsoft.com/en-us/rest/api/apimanagement/current-ga/api-management-service/backup#apimanagementbackupwithsystemmanagedidentity