我们的自动 Redis 导入开始失败,并显示以下消息:
Not Found. There was no storage account called '<redacted>' in the Azure region 'Brazil South'.
我们的流程如下:
sas_url=$(az storage blob generate-sas \
-o tsv \
--account-name $AZ_ACCOUNT_NAME \
--account-key $AZ_ACCOUNT_KEY \
--container-name $AZ_CONTAINER_NAME \
--name db \
--permissions r \
--start $(date_plus_minutes -20) \
--expiry $(date_plus_minutes 120) \
--full-uri)
az login \
--service-principal \
-u $AZ_SP_ID \
-p $AZ_SP_PASS \
--tenant $AZ_SP_TENANT
az redis import \
--ids $REDIS_ID \
--files $sas_url
Redis 服务器和存储帐户位于同一订阅和资源组中。
如果我从 Web 界面开始导入,该过程就可以工作;当我使用我的帐户而不是服务主体时,该过程也可以从命令行工作。
我验证了,当以服务主体身份登录时,
az storage account list
不会列出存储帐户(即使服务主体在该帐户中具有存储 Blob 数据贡献者角色),但我不确定这是否重要 - SAS 令牌应该向通常无权访问的用户授予访问权限,对吧?我已通过打开 URL 确认这一点,并且即使未登录 Azure 也能够下载该文件。
我注意到的一件事是,在 Web 界面中,Redis 服务器被列为“位置:巴西南部”,存储帐户为“位置:巴西南部”。不过,我不确定这是否相关,因为我能够使用普通用户从命令行上传。
我注意到的一件事是,在 Web 界面中,Redis 服务器被列为“位置:巴西南部”,存储帐户为“位置:巴西南部”。不过,我不确定这是否相关,因为我能够使用普通用户从命令行上传。
在我的环境中,我在同一位置(巴西南部)、同一资源组和同一订阅中创建了存储帐户和 Redis 缓存。
传送门:
现在,我将服务主体
contributor role
和 storage blob data contributor
角色分配给存储帐户。
传送门:
现在,您可以运行与从存储帐户导入 blob 相同的命令。
命令:
az login --service-principal -u "xxx" -p "xxx" --tenant "xxx"
az redis import --ids "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Cache/Redis/xxx" --files "https://venkat98012.blob.core.windows.net/venkat/test" --debug
参考: